집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 다중 테이블 쿼리 사례 분석
카테시안 곱의 이해
select id,department_name from employees,departments;#错的 select id,department_id,department_name from employees CROSS JOIN departments;#错的
각 직원과 각 부서가 한 번씩 매칭되었습니다(발견된 항목 수 = ID 수 * 부서 수)
오류 원인: 연결 조건 누락
연결 조건을 작성하세요: Table 1. Column = Table 2. Column (여러 테이블이 연결된 경우 최소한 n-1 연결 조건을 사용해야 함)
select id,employees.name,department_name from employees,departments WHERE employees.name = departments.name;
참고: 표시할 열이 있는 경우 is in 쿼리할 테이블의 이름이 동일한 경우 어떤 테이블에서 왔는지 표시해야 합니다. 예: 직원.이름
여러 테이블을 쿼리할 때 어떤 테이블 정보가 표시되는지 표시하는 것이 좋습니다(최적화)
최적화: 테이블의 별칭을 사용하는 FROM 뒤에 넣을 수 있지만, 별칭을 사용한 후에는 별칭을 사용해야 합니다.
등가 조인: 위의 =
비동등 조인:
select t1.id,t1.name,t2.grade from employees t1,departments t2 WHERE ti.salary BETWEEN t2.lowest_salary AND t2.highest_salary ;#非等值
비 셀프 링크: 테이블 1 및 테이블 2 조인
셀프 링크: 테이블 1이 자체적으로 조인됩니다.
#显示员工(t1)和其管理者(t2)的基本信息 select t1.id,t1.name,t2.id,t2.name from employees t1,employees t2#一个表看作两个表 WHERE t1.manage_id = t2.id ;#自连接
내부 조인: 동일한 열이 포함된 테이블을 병합합니다. 한 테이블과 다른 테이블이 일치하지 않는 행은 결과에 포함되지 않습니다.
외부 조인: 동일한 열이 포함된 테이블 병합, 결과 내부 조인의 결과 외에도 일치하지 않는 행도 쿼리됩니다.
외부 조인의 범주: 왼쪽 외부 조인(왼쪽 테이블에 더 많은 내용, 채우기 오른쪽 외부 조인(오른쪽 표에서 자세히, 왼쪽 채우기), 전체 외부 조인
내부 연결: 위를 참조하세요.
외부 연결: 다음과 같은 경우 왼쪽 테이블의 데이터가 일치하지 않으면 오른쪽 테이블에 (+)를 추가하고, 반대로 왼쪽 테이블에 (+)를 추가하지만 MySQL은 이를 지원하지 않습니다.
WHERE t1.department_id = t2.department_id(+)#左连接
select t1.id,t1.name,t2.department_name,t3.environment from employees t1 JOIN departments t2 ON t1.department_id = t2.department_id JOIN locations t3#加入第二个人表 ON t2.department_location = t3.department_location;
OUTER JOIN 사용...ON...
왼쪽 외부 조인: LEFT OUTER JOIN
오른쪽 외부 조인: RIGHT OUTER JOIN
전체 OUTER JOIN(안됨) mysql에 의해 지원)
select t1.name,t2.department_name#左外连接 from employees t1 LEFT OUTER(可省略) JOIN departments t2 ON t1.department_id = t2.department_id;
merge query results
rSELECT colum... FROM table1 UNION (ALL) SELECT colum... FROM table2
union operatorsage ausage of the query results union, 중간체 (낮은 효율성) 모든 운영자 (권장)
중복 제거 없이 두 쿼리 결과 통합(고효율)
select t1.name,t2.department_name from employees t1 JOIN departments t2 ON t1.department_id = t2.department_id;왼쪽 상단 그림(왼쪽 외부 조인):
select t1.name,t2.department_name from employees t1 LEFT JOIN departments t2 ON t1.department_id = t2.department_id;오른쪽 위 그림(오른쪽 외부 조인):
select t1.name,t2.department_name from employees t1 RIGHT JOIN departments t2 ON t1.department_id = t2.department_id;왼쪽 가운데 그림:
select t1.name,t2.department_name from employees t1 LEFT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t2.department_id IS NULL;
가운데 오른쪽 그림:
select t1.name,t2.department_name from employees t1 RIGHT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t1.department_id IS NULL;
왼쪽 아래 그림(전체 외부 조인):
#方式一:左上图 UNION ALL 右中图 select t1.name,t2.department_name from employees t1 LEFT JOIN departments t2 ON t1.department_id = t2.department_id UNION ALL select t1.name,t2.department_name from employees t1 RIGHT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t1.department_id IS NULL; #方式二:左中图 UNION ALL 右上图 select t1.name,t2.department_name from employees t1 LEFT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t2.department_id IS NULL UNION ALL select t1.name,t2.department_name from employees t1 RIGHT JOIN departments t2 ON t1.department_id = t2.department_id;
오른쪽 아래 그림:
#左中图 UNION ALL 右中图 select t1.name,t2.department_name from employees t1 LEFT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t2.department_id IS NULL UNION ALL select t1.name,t2.department_name from employees t1 RIGHT JOIN departments t2 ON t1.department_id = t2.department_id WHERE t1.department_id IS NULL;
SQL의 새로운 기능 구문
자연 조인
키워드 사용: NATURAL JOIN(유연하지 않음), 테이블의 동일한 필드를 모두 자동으로 쿼리한 다음 등가 조인을 수행합니다.
USING 연결(자체 조인에는 적용되지 않음)
select t1.name,t2.department_name from employees t1 JOIN departments t2 ON t1.department_id = t2.department_id; 等价于 select t1.name,t2.department_name from employees t1 JOIN departments t2 USING(department_id);
위 내용은 MySQL 다중 테이블 쿼리 사례 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!