JOIN이란
두 테이블을 묶어서 하나의 결과 집합을 만드는 것이다. 서브 쿼리를 통해 두 개 이상의 테이블도 조인 가능하다.
INNER JOIN
일반적으로 JOIN을 이야기 하면 INNER JOIN이다. 교집합을 생각하면 된다.
SELECT <선택 열>
FROM <기준 테이블>
[INNER] JOIN <참조 테이블>
ON <조인 조건>
[WHERE <검색 조건>];
- 기준 테이블의 row와 참조 테이블의 row 중 조인 조건이 맞는 row끼리 묶는다.
- 선택 열은 테이블 간 동일한 이름의 열을 가지고 있을 수 있어
테이블명.속성명
으로 명시해줘야한다.- 테이블 명에 Alias(별칭)을 사용하면 좀 더 간결하게 작성 가능하다.
- 조인 조건은 기준 테이블의 row가 참조 테이블의 어떤 row와 병합되어야 하는지 속성의 기준으로 명시한다.
테이블A.fkey = 테이블B.pkey
예시
SELECT o.OrderID, c.CustomerName
FROM Orders o
INNER JOIN Customers c
ON o.CustomerID = c.CustomerID;
OUTER JOIN
INNER JOIN은 양 테이블 모두 내용이 있는 경우만 검색이 된다. 하지만 OUTER JOIN은 한 쪽에만 내용이 존재해도 결과가 검색된다.
SELECT <열 목록>
FROM <기준 테이블(LEFT)>
<LEFT | RIGHT | FULL> [OUTER] JOIN <참조 테이블(RIGHT)>
ON <조인 조건>
[WHERE 검색조건];
- LEFT JOIN: 기준 테이블의 데이터 손실 없이 JOIN이 가능하다.
- RIGHT JOIN: 참조 테이블의 데이터 손실 없이 JOIN이 가능하다.
- FULL JOIN: 두 테이블의 데이터 손실 없이 JOIN이 가능하다.
CROSS JOIN
한 쪽 테이블의 row 하나 당 다른 쪽 테이블의 모든 행을 하나씩 JOIN하는 것이다.
- 결과는 [A 테이블의 행 개수 X B 테이블의 행 개수]가 된다. 이를 카티션 곱이라 한다.
- 두 테이블의 행 간의 모든 조합을 검색한다.
SELECT *
FROM ATable
CROSS JOIN BTable;
- 조인 조건이 없는데 이는 CROSS JOIN이 조인 조건 없이 모든 행을 합치기 때문이다.
SELF JOIN
자기 자신과 자기 자신과 JOIN을 하는 것이다. 보통 속성 간 데이터 처리가 필요한 경우 사용한다.
- 같은 테이블을 사용하므로 별칭을 사용해야 함.
SELECT <열 목록>
FROM <테이블 별칭1, 테이블 별칭2>
[WHERE 검색조건];
EmpId Name Direct_Supervisor_Id
1 홍대표 0
2 유과장 1
3 하대리 2
4 노대리 2
SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A, EMP B
WHERE A.Direct_Supervisor_Id = B.EmpId
---------------------------------------------------------
EMPID 직원명 직속상관
2 유과장 홍대표
3 하대리 유과장
4 노대리 유과장
SELECT A.EMPID, A.NAME AS '직원명',B.NAME AS '직속상관'
FROM EMP A
INNER JOIN EMP B
ON A.Direct_Supervisor_Id = B.EmpId
'Database' 카테고리의 다른 글
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 3 (0) | 2023.02.08 |
---|---|
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 2 (2) | 2023.02.01 |
[MySQL] InnoDB 스토리지 엔진 아키텍처 - 1 (0) | 2023.01.11 |
[MySQL] MySQL 쿼리 실행 구조 (0) | 2023.01.10 |
[MySQL] MySQL 아키텍처 (0) | 2023.01.06 |