Skip to Content
Suffering builds character

8.아우터 조인

아우터 조인, OUTER JOIN

아우터 조인은 이너와 아우터를 함께 반환함

아우터 조인은 아우터를 지정하는 기준에 따라 왼쪽부터 LEFT, RIGHT, FULL OUTER JOIN으로 구분됨 outer_join

아우터 조인 연습용 스키마

아래의 스키마를 활용하여 실습 진행

sql
-- inner join에서 활용한 스키마, 데이터 제거 DROP DATABASE join_practice; CREATE DATABASE join_practice; use join_practice; DROP TABLE IF EXISTS ta; DROP TABLE IF EXISTS tb; DROP TABLE IF EXISTS tc; DROP TABLE IF EXISTS td; CREATE TABLE ta (x INT, y INT); CREATE TABLE tb (x INT); CREATE TABLE tc (x INT); CREATE TABLE td (x INT); INSERT INTO ta VALUES (1, 1); INSERT INTO ta VALUES (2, 2); INSERT INTO ta VALUES (3, 3); INSERT INTO tb VALUES (1); INSERT INTO tb VALUES (2); INSERT INTO tb VALUES (4); INSERT INTO tc VALUES (1); INSERT INTO tc VALUES (2); INSERT INTO tc VALUES (3); INSERT INTO td VALUES (1); INSERT INTO td VALUES (3); INSERT INTO td VALUES (4); SELECT * FROM ta; SELECT * FROM tb; SELECT * FROM tc; SELECT * FROM td;
x of TAy of TAx of TAx of TCx of TD
11111
2222
3333
44

샘플 데이터 결과셋이 다음과 같다고 할 때,

x of TAy of TAx of TBx of TCx of TD
11111
2222NULL
33NULL33
NULLNULL4NULL4
ta가 아우터 기준일 때의 쿼리문

아우터 기준이라는 의미는 LEFT OUTER 쿼리 기준 좌측에 작성한 테이블을 말함

ta a LEFT OUTER tb b

sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a LEFT OUTER JOIN tb b ON b.x = a.x;

수행 결과 ↓

x of TAx of TB
11
22
3NULL
→ 아우터 기준이 아닌 tb는 NULL이 출력됨

조인 수행 과정 ↓

x of TAx of TBB == A결과
111 == 1TRUE
222 == 2TRUE
3NULLOUTERTRUE
NULL4Skip!FALSE

→ TA 기준(LEFT)으로 OUTER 조인되었기 때문에 3은 출력됨

tb가 아우터 기준일 때의 쿼리문

RIGHT OUTER 쿼리 기준 우측에 작성한 테이블

→ ta a RIGHT OUTER tb b

sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a RIGHT OUTER JOIN tb b ON b.x = a.x;

수행 결과 ↓

x of TAx of TB
11
22
NULL4
→ 아우터 기준이 아닌 tb는 NULL이 출력됨

조인 수행 과정 ↓

x of TAx of TB조인 조건결과
B == A
111 == 1TRUE
222 == 2TRUE
3NULLSkip!FALSE
NULL4OUTERTRUE

→ TB 기준(RIGHT)으로 OUTER 조인되었기 때문에 4가 출력됨

아우터 조인에 일반 조건 기술

아우터 기준에 해당하는 테이블(여기서는 ta a)의 일반 조건은 WHERE 절에 기술해야함

sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a LEFT OUTER JOIN tb b ON b.x = a.x WHERE a.x > 1;

수행 결과 ↓

x of TAx of TB
22
3NULL

조인 수행 과정 ↓

구분아우터 기준 테이블
x of TAx of TB일반 조건일반 조건 결과조인 조건조인 조건 결과최종 결과
a.x > 1B == A
111 > 1FALSE1 == 1TRUEFALSE
222 > 1TRUE2 == 2TRUETRUE
3NULL3 > 1TRUEOUTERTRUETRUE
NULL4NULL > 1FALSESkip!FALSEFALSE
아우터 기준에 해당하는 일반 조건을 ON에 작성했을 때,
sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a LEFT OUTER JOIN tb b ON b.x = a.x AND a.x > 1; -- WHERE 대신 AND를 통해 ON 절에 기술

수행 결과 ↓

x of TAx of TB
1NULL
22
3NULL

→ 일반 조건과 관계 없이, ta 기준 모든 OUTER를 출력함 OUTER 기준이 아닌 TB는 일반 조건(a.x >1)이 TRUE인 행만 값이 출력됨 즉, TB 테이블에도 1의 값은 존재하지만 일반 조건에 충족되지 않기 때문에 출력되지 않고, NULL로 출력됨 (TB의 3은 초기 값 자체가 NULL이었음)

조인 수행 과정 ↓

구분아우터 기준 테이블
x of TAx of TB일반 조건일반 조건 결과조인 조건조인 조건 결과최종 결과
a.x > 1B == A
111 > 1FALSE1 == 1TRUETRUE
222 > 1TRUE2 == 2TRUETRUE
3NULL3 > 1TRUEOUTERTRUETRUE
NULL4NULL > 4FALSESkip!FALSEFALSE
아우터 기준에 해당하지 않는 테이블(tb)의 일반 조건은 ON 절에 기술해야함
sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a LEFT OUTER JOIN tb b ON b.x = a.x AND b.x > 1;

수행 결과 ↓

x of TAx of TB
1NULL
22
3NULL

조인 수행 과정 ↓

구분아우터기준x table
x of TAx of TB일반 조건일반 조건 결과조인 조건조인 조건 결과최종 결과
b.x > 1B == A
111 > 1FALSE1 == 1TRUETRUE
222 > 1TRUE2 == 2TRUETRUE
3NULL3 > 1TRUEOUTERTRUETRUE
NULL44 > NULLFALSESkip!FALSEFALSE
WHERE 절에 아우터 기준이 아닌 테이블(tb)의 일반 조건을 기술할 경우, 아우터 조인이 이너 조인으로 변경됨
sql
SELECT a.x AS 'x of ta', b.x AS 'x of tb' FROM ta a LEFT OUTER JOIN tb b ON b.x = a.x WHERE b.x > 1;
구분아우터기준x table
x of TAx of TB일반 조건일반 조건 결과조인 조건조인 조건 결과최종 결과
b.x > 1B == A
111 > 1FALSE1 == 1TRUEFALSE
222 > 1TRUE2 == 2TRUETRUE
3NULLNULL > 1FALSENULL == 3FALSEFALSE
NULL44 > 1TRUE4 == NULLFALSEFALSE
Last updated on