본문 바로가기

IT Story/SQL Story

조인(Join): 외부 조인

내부 조인은 두 테이블을 조인해 조인 조건으로 사용한 열에 있는 같은 값을 조합해 검색한다.

하지만 다른 테이블에 있는 행에서 일치 항목이 아닌 행을 조합해 검색해야 할 때도 있다.

그런 경우에 외부 조인을 사용한다. 예를 들어, 상품을 주문한 고객과 주문하지 않은 고객을 포함해 주문 내역을 함께 검색하고 싶다면 외부 조인을 사용할 수 있다. 즉, 외부 조인은 열의 일치 항목을 고려하지 않고, 한쪽 테이블을 다른 쪽 테이블에 조합할 때 사용한다. 

 

외부 조인의 기본 형식

SELECT [열 이름]

FROM [테이블 1]

<LEFT, RIGHT, FULL> OUTER JOIN [테이블2] ON [테이블1.열] = [테이블2.열]

WHERE [검색 조건]

 

LEFT, RIGHT는 기준 테이블을 정하는 것이다.

A 테이블을 기준으로 B 테이블을 조인하고 싶다면 LEFT를 

B 테이블을 기준으로 A 테이블을 조인하고 싶다면 RIGHT를 사용한다.

 

예1) 고객 테이블이 왼쪽, 주문 테이블이 오른쪽에 있다고 하자.

고객번호 고객이름
1 부엉이 
2 독수리 
3 비둘기
주문번호 고객번호 주문날짜
100 1 2021-11-16
200 4 2021-11-16
300 3 2021-11-16

LEFT OUTER JOIN on 고객번호

고객번호 고객이름 주문번호 고객번호 주문날짜
1 부엉이  100 1 2021-11-16
2 독수리  NULL NULL NULL
3 비둘기 300 3 2021-11-16

고객 테이블을 우선 포함한 다음, 고객 테이블의 고객번호와 주문 테이블의 고객번호를 비교해 고객 테이블에 있는 고객번호만 주문테이블에서 골라 결과에 포함시키고 없으면 NULL처리한다. 

 

LEFT OUTER JOIN 문을 적용한 쿼리

select [고객.고객번호],[고객.고객이름],[주문.주문번호],[주문.고객번호],[주문.주문날짜]

from [고객] outer join [주문] on [고객.고객번호] = [주문.고객번호]

 

LEFT OUTER JOIN 문 사용하기

2개 테이블을 LEFT OUTER JOIN 쿼리 실행: 기준 테이블(nasdaq_company)

Select
a.symbol as a_symbol,
b.symbol as b_symbol
From nasdaq_company as a
LEFT OUTER JOIN industry_group_symbol as b ON a.symbol = b.symbol

a_symbol  b_symbol
^CMC200 NULL
^DJI  NULL
^FTSE  NULL
^GSPC NULL
^IXIC NULL
^N225 NULL
^RUT NULL
A A A A
AA AA AA AA

테이블 A에 있는 것만 검색하려면

→ b_symbol에서 NULL 부분만 선택하면 된다.

Select
a.symbol as a_symbol,
b.symbol as b_symbol
From nasdaq_company as a
LEFT OUTER JOIN industry_group_symbol as b ON a.symbol = b.symbol

Where b.symbol IS NULL


RIGHT OUTER JOIN 문 사용하기

고객번호 고객이름
1 부엉이 
2 독수리 
3 비둘기

 

주문번호 고객번호 주문날짜
100 1 2021-11-16
200 4 2021-11-16
300 3 2021-11-16

RIGHTT OUTER JOIN on 고객번호

고객번호 고객이름 주문번호 고객번호 주문날짜
1 부엉이  100 1 2021-11-16
NULL NULL 200 4 2021-11-16
3 비둘기 300 3 2021-11-16

주문 테이블을 우선 포함한 다음, 주문 테이블에서 고객번호와 일치하는 고객 테이블의 고객번호를만 데이터에 표시하고 없으면 NULL처리한다. 

 

Select
a.symbol as a_symbol,
b.symbol as b_symbol
From industry_group_symbol as a
RIGHTT OUTER JOIN nasdaq_company as b ON a.symbol = b.symbol

 

a_symbol  b_symbol
NULL ^CMC200
NULL ^DJI 
NULL ^FTSE 
NULL ^GSPC
NULL ^IXIC
NULL ^N225
NULL ^RUT
A A A A
AA AA AA AA

 

FULL OUTER JOIN 문 알아보기

LEFT OUTER JOIN 문과 RIGHTT OUTER JOIN 문을 합친 것이다.

가끔 데이터베이스 디자인이나 데이터에 문제가 있을 때, 데이터의 누락이나 오류를 찾아낼 때 사용한다. 

고객번호 고객이름
1 부엉이 
2 독수리 
3 비둘기
주문번호 고객번호 주문날짜
100 1 2021-11-16
200 4 2021-11-16
300 3 2021-11-16

FULL OUTER JOIN on 고객번호

고객번호 고객이름 주문번호 고객번호 주문날짜
1 부엉이  100 1 2021-11-16
2 독수리  NULL NULL NULL
3 비둘기 300 3 2021-11-16
4 NULL 200 4 2021-11-16

 

Select
a.symbol as a_symbol,
b.symbol as b_symbol
From industry_group_symbol as a
FULL OUTER JOIN nasdaq_company as b ON a.symbol = b.symbol

 

LEFT 테이블과 RIGHT 테이블에 있는 데이터만 추출하려면 NULL 데이터를 필터링해서 원하는 결과를 검색할 수 있다.

Select
a.symbol as a_symbol,
b.symbol as b_symbol
From nasdaq_company  as a
FULL OUTER JOIN industry_group_symbol as b ON a.symbol = b.symbol

Where a.symbol IS NULL

OR b.symbol IS NULL

 

 

 

'IT Story > SQL Story' 카테고리의 다른 글

공통 테이블 식(Common Table Expression, CTE)  (0) 2022.12.01
서브 쿼리  (0) 2022.11.30
조인(Join): 내부 조인  (0) 2022.11.28
SQL 시작하기: CREATE 문  (0) 2022.11.24
SQL 시작하기: GROUP BY 문과 HAVING 문  (0) 2022.11.24