MySQL에서 데이터 테이블의 외부 조인을 사용하는 방법
Outer Join을 사용하는 이유
Outer Join을 사용하는 이유를 설명하기 전에 먼저 기록을 살펴보겠습니다. (다음과 같습니다:)
표의 장산은 부서번호가 없으므로, 고정된 부서 설립 없이 임시로 '임시근로자'로 분류하겠습니다.
이러한 시나리오에서는 문제가 발생합니다. 각 사원의 이름과 그가 속한 부서를 조회하고자 할 때, 내부 조인을 사용하는 경우, 연결 조건이 ` "Employee Table"의 "부서 번호" = ""부서 테이블"의 부서 번호이기 때문입니다. ", "장산"이 그리워 질 것입니다. "Zhang San"은 "부서 번호"가 없지만 "임시 직원"으로 회사의 구성원이기도 하므로 이 문제를 해결하려면 외부 조인 구문을 도입해야 합니다. 그렇지 않으면 일부 논리 데이터가 손실됩니다. .
외부 조인 소개
외부 조인과 내부 조인의 차이점:
연결 조건을 충족하는 레코드만 내부 조인 결과에 표시됩니다. 연결 조건을 충족하지 않는 레코드는 결과에 표시되지 않습니다. 세트.
데이터 연결 조건의 충족 여부에 관계없이 외부 연결은 결과 집합에 특별한 방식으로 표시됩니다. (예를 들어 위에서 언급한 직원 부서 번호 정보를 조회할 때 "Zhang San"은 부서 번호가 없기 때문에 Inner Join을 사용하면 "Zhang San"은 "연결 조건"을 충족하지 않아 결과에 나타나지 않습니다. ; "외부 조인"으로 변경하면 놓치지 않습니다.)
외부 조인의 예는 다음과 같습니다
SELECT e.empno, e.ename, d.dname FROM t_emp e LEFT JOIN t_dept d ON e.deptno = d.deptno; -- 在连接的时候仍然是链接 "员工表" 与 "部门表" ,只不过连接关键字由 "JOIN" 变成了 "LEFT JOIN" (下文再为大家详细解释) -- 两张表的连接条件还是使用 "ON" 关键字去连接的 , 连接条件依然是 "员工表" 的 "部门编号" = "部门表" 的 "部门编号" -- LEFT JOIN 为 "外连接" 的 "左外连接" ;(在 "外连接" 中,是分为 "左外连接" 与 "右外连接" 的) -- 在该SQL语句中 "LEFT JOIN" 左右各有数据表 "t_emp e" 与 "t_dept d" -- 所以这里的 "左连接" 的意思就是:保留 左表 的所有记录,然后与 右表 去连接,如果 右表 有符合条件的记录,则正常连接即可; -- 如果 右表 没有符合条件的连接记录, 右表 则展示 "NULL" 值与 "左表" 去匹配
왼쪽 조인과 오른쪽 조인
"왼쪽 외부 조인"은 다음을 의미합니다. 조인 작업을 수행하면 왼쪽 테이블의 모든 항목이 유지되고 오른쪽 테이블과 조인됩니다. 왼쪽 테이블은 오른쪽 테이블에 연결되며, 오른쪽 테이블에 조건에 맞는 레코드가 없으면 "NULL"을 사용하여 왼쪽 테이블을 연결한다.
"왼쪽 조인"과의 차이점은 "오른쪽 조인"입니다. "오른쪽 조인"은 오른쪽 테이블의 모든 레코드를 유지하고 마찬가지로 왼쪽 테이블의 적격 레코드를 조인합니다. 왼쪽 테이블 조건에 맞는 레코드가 없으면 "NULL"을 사용하여 오른쪽 테이블에 연결한다.
오른쪽 조인 SQL 문 예:
SELECT e.empno, e.ename, d.dname FROM t_dept d RIGHT JOIN t_emp e ON e.deptno = d.deptno; -- 这里有个需要注意的地方,就是相较于上文中的 "左连接" ,这里的 "右连接" 左右两张的表的位置做了调换
여기에서 "부서 번호" 없이도 "Zhang San"의 레코드를 찾을 수 있음을 알 수 있습니다. 따라서 "왼쪽 조인"과 "오른쪽 조인"의 차이는 그리 크지 않습니다.
외부 조인 연습 ①
각 부서의 이름과 부서의 인원수를 조회해 보시겠어요?
이 질문은 간단해 보이지만 두 가지 어려움이 있고, 실수하기 쉬운 부분도 있습니다. 자세한 내용은 아래 SQL 문 예제와 개요도를 참조하세요.
SELECT d.deptno, d.dname, COUNT(*) FROM t_dept d LEFT JOIN t_emp e ON d.deptno = e.deptno GROUP BY d.deptno;
좋아, 여기서부터 문제가 시작된다.
다들 주목하세요 여기 "40" - "OPERATIONS" 부서에는 실제로 사람이 없습니다. 즉, 인원수는 "0"인데 이상하게도 여기서 통계를 하면 숫자가 나옵니다. of people counted가 "1"인데 왜 그럴까요?
그룹화를 사용할 때 왼쪽 테이블의 모든 데이터를 유지하는 "Left Join"을 사용하기 때문에 "deptno"에 따라 그룹화하기 때문입니다. 왼쪽 테이블. (왼쪽 테이블의 레코드가 유지되기 때문에 그룹화도 왼쪽 테이블을 기준으로 그룹화해야 합니다. 다음 키는 "COUNT(*)"이며 유효한 모든 레코드의 개수를 계산합니다. 따라서 모든 레코드가 왼쪽 테이블 "t_dept"의 레코드가 오른쪽 테이블 "t_emp"에 연결되면 오른쪽 테이블은 "NULL" 값을 사용하여 왼쪽 테이블 "t_dept"에 연결됩니다. 유효한 기록이므로 "COUNT(*)" 계산 결과는 "1"입니다.
그래서 40개 부서의 통계 결과는 "1"인 것은 이해가 되지만, 이 결과는 그렇지 않습니다. 어떻게 해결해야 할까요?
SELECT d.deptno, d.dname, COUNT(e.deptno) FROM t_dept d LEFT JOIN t_emp e ON d.deptno = e.deptno GROUP BY d.deptno;
이 SQL 문은 여전히 매우 훌륭합니다. 실제로 다시 작성해 봐야 이러한 공격을 알 수 있습니다. 외부 조인 연습 ②
부서명이 없는 직원의 경우 부서명 대신 "NULL"을 사용합니다. (실제로는 "장산"을 의미함)
"왼쪽 외부 조인"이라고 생각하시면 됩니다. " just Used는 예약되어 있습니다. 부서 테이블의 모든 레코드를 "올바른" 외부 조인으로 바꿀 수는 없을까요? 사실... 그렇게 간단하지는 않습니다.
이 연습을 위한 SQL 문은 " UNION" 키워드. " 키워드는 여러 쿼리 문의 결과 집합을 결합합니다(중복 내용 제외).
"UNION"关键字 在 SQL 语句中的用法如下:
(SQL查询语句) UNION (SQL查询语句) -- 如果存在多条查询语句的话,可以继续使用 UNION 关键字 连接
PS:这里需要注意一下,“UNION” 合并多少个结果集其实无所谓,关键是这些结果集的字段数量和字段的名称必须要相同 。如果说第一个 SQL 查询语句返回的是 10个 字段,第二个返回的是 2个字段 ,这种情况是完全没办法合并的。
(SELECT d.deptno, d.dname, COUNT(e.deptno) FROM t_dept d LEFT JOIN t_emp e ON d.deptno = e.deptno GROUP BY d.deptno) UNION (SELECT d.deptno, d.dname, COUNT(*) FROM t_dept d RIGHT JOIN t_emp e ON d.deptno = e.deptno GROUP BY d.deptno); -- 第一个查询语句,得到的结果集是各个部门的人数。 -- 第二个查询语句,得到的结果集是隶属于各个部门的人数,但是因为 "张三" 是一个没有部门所属的 "临时工" -- 所以两个查询语句的结果集合并之下没救如下图所示。
위 내용은 MySQL에서 데이터 테이블의 외부 조인을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











다음 단계를 통해 phpmyadmin을 열 수 있습니다. 1. 웹 사이트 제어판에 로그인; 2. phpmyadmin 아이콘을 찾고 클릭하십시오. 3. MySQL 자격 증명을 입력하십시오. 4. "로그인"을 클릭하십시오.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템으로, 주로 데이터를 신속하고 안정적으로 저장하고 검색하는 데 사용됩니다. 작업 원칙에는 클라이언트 요청, 쿼리 해상도, 쿼리 실행 및 반환 결과가 포함됩니다. 사용의 예로는 테이블 작성, 데이터 삽입 및 쿼리 및 조인 작업과 같은 고급 기능이 포함됩니다. 일반적인 오류에는 SQL 구문, 데이터 유형 및 권한이 포함되며 최적화 제안에는 인덱스 사용, 최적화 된 쿼리 및 테이블 분할이 포함됩니다.

Redis는 단일 스레드 아키텍처를 사용하여 고성능, 단순성 및 일관성을 제공합니다. 동시성을 향상시키기 위해 I/O 멀티플렉싱, 이벤트 루프, 비 블로킹 I/O 및 공유 메모리를 사용하지만 동시성 제한 제한, 단일 고장 지점 및 쓰기 집약적 인 워크로드에 부적합한 제한이 있습니다.

데이터베이스 및 프로그래밍에서 MySQL의 위치는 매우 중요합니다. 다양한 응용 프로그램 시나리오에서 널리 사용되는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) MySQL은 웹, 모바일 및 엔터프라이즈 레벨 시스템을 지원하는 효율적인 데이터 저장, 조직 및 검색 기능을 제공합니다. 2) 클라이언트 서버 아키텍처를 사용하고 여러 스토리지 엔진 및 인덱스 최적화를 지원합니다. 3) 기본 사용에는 테이블 작성 및 데이터 삽입이 포함되며 고급 사용에는 다중 테이블 조인 및 복잡한 쿼리가 포함됩니다. 4) SQL 구문 오류 및 성능 문제와 같은 자주 묻는 질문은 설명 명령 및 느린 쿼리 로그를 통해 디버깅 할 수 있습니다. 5) 성능 최적화 방법에는 인덱스의 합리적인 사용, 최적화 된 쿼리 및 캐시 사용이 포함됩니다. 모범 사례에는 거래 사용 및 준비된 체계가 포함됩니다

MySQL은 성능, 신뢰성, 사용 편의성 및 커뮤니티 지원을 위해 선택됩니다. 1.MYSQL은 효율적인 데이터 저장 및 검색 기능을 제공하여 여러 데이터 유형 및 고급 쿼리 작업을 지원합니다. 2. 고객-서버 아키텍처 및 다중 스토리지 엔진을 채택하여 트랜잭션 및 쿼리 최적화를 지원합니다. 3. 사용하기 쉽고 다양한 운영 체제 및 프로그래밍 언어를 지원합니다. 4. 강력한 지역 사회 지원을 받고 풍부한 자원과 솔루션을 제공합니다.

Apache는 데이터베이스에 연결하여 다음 단계가 필요합니다. 데이터베이스 드라이버 설치. 연결 풀을 만들려면 Web.xml 파일을 구성하십시오. JDBC 데이터 소스를 작성하고 연결 설정을 지정하십시오. JDBC API를 사용하여 Connections, 명세서 작성, 매개 변수 바인딩, 쿼리 또는 업데이트 실행 및 처리를 포함하여 Java 코드의 데이터베이스에 액세스하십시오.

Docker에서 MySQL을 시작하는 프로세스는 다음 단계로 구성됩니다. MySQL 이미지를 가져와 컨테이너를 작성하고 시작하고 루트 사용자 암호를 설정하고 포트 확인 연결을 매핑하고 데이터베이스를 작성하고 사용자는 데이터베이스에 모든 권한을 부여합니다.

Centos에 MySQL을 설치하려면 다음 단계가 필요합니다. 적절한 MySQL Yum 소스 추가. mysql 서버를 설치하려면 yum install mysql-server 명령을 실행하십시오. mysql_secure_installation 명령을 사용하여 루트 사용자 비밀번호 설정과 같은 보안 설정을 작성하십시오. 필요에 따라 MySQL 구성 파일을 사용자 정의하십시오. MySQL 매개 변수를 조정하고 성능을 위해 데이터베이스를 최적화하십시오.
