Join이란?
두 개 이상의 테이블을 서로 연결하여 데이터를 검색할 때 사용하는 방법
두 개의 테이블을 마치 하나의 테이블인 것처럼 보여준다.
Join문은 여러 종류가 있는데, 하나씩 특징을 살펴보자.
Implicit join
- from 절에는 table들만 나열하고 where절에 join condition을 명시하는 방식
- 예전 방식의 join 문법
- 복잡해질수록 실수할 가능성이 높다
SELECT D.name
FROM employee AS E, department AS D
WHERE E.id = 1 and E.dept_id = D.id;
Explicit join
- from 절에 JOIN 키워드와 함께 joined table들을 명시하는 방식
- from 절에서 ON 뒤에 join condition이 명시된다
- 복잡한 join 쿼리 작성 중에도 실수할 가능성이 적다
SELECT D.name
FROM employee AS E JOIN department AS D ON E.dept_id = D.id
WHERE E.id = 1;
Inner join(join)
- 그냥 JOIN 으로 사용가능(INNER 생략 가능)
- 두 table에서 join condition을 만족하는 tuple들로 result table(결과 테이블)을 만드는 join
- join condition에 사용 가능 연산자 : =, <, >, ≠ 등 여러 비교 연산자 가능
- join condition에서 null 값을 가지는 tuple은 result table에 포함되지 않는다
SELECT *
FROM employee E INNER JOIN department D on E.dept_id = D.id;
Outer join
- LEFT, RIGHT, FULL OUTER JOIN 이 존재(OUTER 생략 가능)
- LEFT JOIN
- 왼쪽 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함
- RIGHT JOIN
- 오른쪽 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함
- FULL JOIN (mysql에서는 지원X)
- 두 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join
Using
USING
키워드를 사용하여 동일한 이름을 갖는 열에 대해 조인을 수행하는 방식
ON
절과 같은 결과를 만들지만, 동일한 이름을 갖는 열을 명시적으로 사용할 수 있음
SELECT *
FROM employee AS E JOIN department AS D USING (dept_id);
Natural join
- 두 테이블 간 동일한 이름을 갖는 모든 열을 기준으로 조인하는 방식
NATURAL JOIN
은 동일한 이름을 갖는 열을 자동으로 인식하여 조인
- 열 이름이 동일하지 않으면 자연 조인을 사용할 수 없음
SELECT *
FROM employee AS E NATURAL JOIN department AS D;
Cross join
- 두 테이블 간의 모든 조합을 반환하는 조인 방식
- 조인 조건이 없기 때문에 카테시안 곱(Cartesian Product)라고도 함
- 조인 결과가 매우 클 수 있음
SELECT *
FROM employee AS E CROSS JOIN department AS D;
Join 종류 요약
- Implicit join: WHERE 절을 사용하여 조인 조건을 명시
- Explicit join: JOIN 키워드를 사용하여 조인 조건을 명시
- Inner join: 두 테이블 간 조인 조건을 만족하는 튜플만 반환
- Outer join: 조인 조건을 만족하지 않는 튜플도 포함
- LEFT JOIN: 왼쪽 테이블의 모든 튜플 포함
- RIGHT JOIN: 오른쪽 테이블의 모든 튜플 포함
- FULL JOIN: 두 테이블의 모든 튜플 포함
- Using: 동일한 이름을 갖는 열을 기준으로 조인
- Natural join: 동일한 이름을 갖는 모든 열을 기준으로 조인
- Cross join: 두 테이블의 모든 조합을 반환