반응형
Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

GBEY

[SQL] FULL OUTER JOIN이란? 본문

데이터분석

[SQL] FULL OUTER JOIN이란?

리스보아 2023. 8. 25. 08:12
반응형

postgre sql 이미지

FULL OUTER JOIN

 

🐰 목차

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 밴다이어그램

 

 

 

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이 결합된 밴다이어그램

 

 

아래 테이블에 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 테이블에만 데이터가 존재할 때를 의미한다.

 

 

반응형