GBEY
[SQL] FULL OUTER JOIN이란? 본문

FULL OUTER JOIN
🐰 목차
pgAdmin에서 FULL OUTER JOIN 연습하기
🐰 OUTER JOIN이란?
- OUTER JOIN에는 몇 가지 종류가 있는데, 각각은 조인된 테이블들 중 하나에만 존재하는 값을 어떻게 다룰지에 따라 사용된다.
- 종류:
FULL OUTER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
🐰 FULL OUTER JOIN이란?
- 테이블 A, 테이블 B 에 포함된 모든 데이터를 보여준다.
- 모든 데이터를 보여주는데, 매칭되지 않는 데이터는 해당 테이블쪽에 Null로 기입된다.
- 테이블의 순서를 바꿔 적어도 결과는 같다. 대칭이기 때문
사용법
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.col_match = TableB.col_match;
밴다이어그램으로 보기

FULL OUTER JOIN 결과 예시
Results | |||
reg_id | name | att_id | name |
1 | Suzy | null | null |
2 | Amy | 1 | Amy |
3 | John | 3 | John |
4 | Sara | null | null |
null | null | 2 | Peter |
null | null | 4 | David |
FULL OUTER JOIN + WHERE
- 두 테이블에 매치되지 않는 값을 구할 수 있다. (각 테이블에만 있는 고유한 값)
- INNER JOIN과 반대되는 개념
- 두 테이블의 순서는 바꿔 적을 수 있다.
사용법
SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.col_match = TableB.col_match
WHERE TableA.id IS null
OR TableB.id IS null
밴다이어그램으로 나타내기

아래 테이블에 FULL OUTER JOIN과 WHERE 절을 적용하면?
SELECT * FROM Registration
FULL OUTER JOIN Attendance
ON Registration.name = Attendance.name
WHERE Registration.reg_id IS null
OR Attendance.att_id IS null;
Results | |||
reg_id | name | att_id | name |
1 | Suzy | null | null |
2 | Amy | 1 | Amy |
3 | John | 3 | John |
4 | Sara | null | null |
null | null | 2 | Peter |
null | null | 4 | David |
아래처럼 한쪽에만 값이 존재하는 경우만 볼 수 있다.
Results | |||
reg_id | name | att_id | name |
1 | Suzy | null | null |
4 | Sara | null | null |
null | null | 2 | Peter |
null | null | 4 | David |
🐰 pgAdmin에서 FULL OUTER JOIN 연습하기
- 실제로 결제 기록이 있는 고객의 정보만 보유하고자 함
>> payment 테이블의 기록이 모두 현재 고객과 관련이 있는지 확인
>> customer 테이블의 기록이 모두 결제기록과 관련이 있는지 확인
SELECT * FROM customer
FULL OUTER JOIN payment
ON customer.customer_id = payment.customer_id
WHERE customer.customer_id IS null
OR payment.payment_id IS null;
위 쿼리문의 WHERE 절에서
customer.customer_id IS null 은 payment 테이블에만 데이터가 존재할 때,
payment.payment_id IS null 은 customer 테이블에만 데이터가 존재할 때를 의미한다.
'데이터분석' 카테고리의 다른 글
[SQL] RIGHT OUTER JOIN 이란? (= RIGHT JOIN) (0) | 2023.08.28 |
---|---|
[SQL] LEFT OUTER JOIN이란? (= LEFT JOIN) (1) | 2023.08.26 |
[SQL] JOIN - INNER JOIN이란? (0) | 2023.08.24 |
[SQL] AS문이란? + pgAdmin에서 연습하기 (0) | 2023.08.24 |
[SQL] GROUP BY란? + pgAdmin으로 연습하기 (0) | 2023.08.24 |