조인 [JOIN]
조인은 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 의미한다.
조인에는 여러 종류의 조인이 있는데 세부적인 조인이 존재하지만
크게 두 가지로 나눌 수 있다.
- INNER JOIN (내부 조인)
- OUTER JOIN (외부 조인)
INNER JOIN (내부 조인)
INNER JOIN은 특정 컬럼을 기준으로 서로 매칭되는 튜플만 조인 결과에 포함된다.
default 옵션으로 조인 조건을 만족하는 튜플들만 반환하게 되며,
INNER 키워드를 생략할 수 있다.
위 그림처럼 A와 B 테이블의 교집합의 부분이 새로운 테이블의 결과로 나오게 된다.
SELECT *
FROM A INNER JOIN B
ON A.number = B.number
위의 예시문처럼
FROM 절에 조인할 테이블의 이름과 INNER JOIN 구를 작성하고
ON 절에 조인할 조건을 작성하면 된다.
OUTER JOIN (외부 조인)
OUTER JOIN은 INNER JOIN과 다르게 매칭되는 튜플만 조회하는 것이 아니라
매칭되지 않았던 튜플까지 함께 조회한다.
OUTER JOIN에는 크게 세 가지로 나눌 수 있다.
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
- LEFT OUTER JOIN
LEFT OUTER JOIN의 결과는
조인한 두 테이블의 매칭되는 튜플뿐만 아니라
왼쪽 테이블의 미매칭 튜플을 포함해서 조회한다.
SELECT *
FROM A LEFT OUTER JOIN B
ON A.number = B.number
왼쪽 테이블 A의 모든 튜플과
조건절과 일치하는 A와 B 테이블의 튜플이 조회된다.
짝이 맞지 않는 튜플에 대해서는 NULL 값이 반환된다.
A.number와 B.number가 일치하는 1, 2, 5에 대해서는
조인된 결과가 조회되고
일치하지 않는 3, 4에 대해서는 NULL이 조회된다.
2. RIGHT OUTER JOIN
LEFT OUTER JOIN이 왼쪽 테이블을 기준으로 조회한 것처럼
RIGHT OUTER JOIN은 오른쪽 테이블을 기준으로 조회한다.
SELECT *
FROM A RIGHT OUTER JOIN B
ON A.number = B.number
LEFT OUTER JOIN과 달리
오른쪽 테이블인 B를 기준으로 조인을 하고 조회를 한다.
A.number 에는 6이 없으므로
6에 해당하는 튜플에 대해서는 NULL값이 조회된다.
3. FULL OUTER JOIN
FULL OUTER JOIN은
LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합친 결과와 동일하다.
모든 튜플에 대해서 조인된 결과를 조회하고
조건절이 일치하지 않는 튜플에 대해서 NULL값을 반환한다.
SELECT *
FROM A FULL OUTER JOIN B
ON A.number = B.number;
다만,
내가 사용하고 있는 Maria DB는 FULL OUTER JOIN을 지원하지 않기 때문에
UNION 연산을 이용해 FULL OUTER JOIN과 같은 결과를 조회할 수 있다.
SELECT * FROM A LEFT OUTER JOIN B ON A.number = B.number
UNION
SELECT * FROM A RIGHT OUTER JOIN B ON A.number = B.number;
'SQL' 카테고리의 다른 글
[SQL] ER 다이어그램을 통한 관계 데이터베이스 설계 (RDBMS) (0) | 2022.12.10 |
---|---|
[SQL] 중첩 질의, 상관 중첩 질의 (1) | 2022.11.18 |