> 데이터 베이스 > MySQL 튜토리얼 > MySQL 다중 테이블 쿼리 사례 분석

MySQL 다중 테이블 쿼리 사례 분석

WBOY
풀어 주다: 2023-05-27 10:52:06
앞으로
1637명이 탐색했습니다.

다중 테이블 쿼리

사례 설명

카테시안 곱의 이해

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 ;#非等值
로그인 후 복사

without = 셀프 조인 및 비자기 조인

  • 비 셀프 링크: 테이블 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 ;#自连接
로그인 후 복사

내부 조인 및 외부 조인

  • 내부 조인: 동일한 열이 포함된 테이블을 병합합니다. 한 테이블과 다른 테이블이 일치하지 않는 행은 결과에 포함되지 않습니다.

  • 외부 조인: 동일한 열이 포함된 테이블 병합, 결과 내부 조인의 결과 외에도 일치하지 않는 행도 쿼리됩니다.

외부 조인의 범주: 왼쪽 외부 조인(왼쪽 테이블에 더 많은 내용, 채우기 오른쪽 외부 조인(오른쪽 표에서 자세히, 왼쪽 채우기), 전체 외부 조인

SQL92: (+)를 사용하여 연결을 만듭니다.

내부 연결: 위를 참조하세요.

외부 연결: 다음과 같은 경우 왼쪽 테이블의 데이터가 일치하지 않으면 오른쪽 테이블에 (+)를 추가하고, 반대로 왼쪽 테이블에 (+)를 추가하지만 MySQL은 이를 지원하지 않습니다.

WHERE t1.department_id = t2.department_id(+)#左连接
로그인 후 복사

SQL99: JOIN...ON

사용 방법 내부 조인

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;
로그인 후 복사

usage of umion

merge query results

r
SELECT colum... FROM table1
UNION (ALL)
SELECT colum... FROM table2
로그인 후 복사
  • union operatorsage ausage of the query results union, 중간체 (낮은 효율성) 모든 운영자 (권장)

중복 제거 없이 두 쿼리 결과 통합(고효율)

    7가지 SQL JOINS 구현
중간 그림(내부 조인):

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;
로그인 후 복사
MySQL 다중 테이블 쿼리 사례 분석왼쪽 가운데 그림:

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿