백엔드 개발자

SQL JOIN 종류 [ INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN] 본문

CS/데이터베이스

SQL JOIN 종류 [ INNER JOIN, LEFT JOIN, RIGHT JOIN, OUTER JOIN]

임잠탱 2023. 8. 31. 20:58

JOIN

두 개의 테이블을 합치는 것을 JOIN이라고 한다.
JOIN을 하는 방법은 크게 4가지 정도가 있다.

설명을 위해 두 개의 테이블이 있다고 가정하겠다.

User 테이블

user_id name age item_id
1 홍길동 20 1
2 최세은 25 2
3 이가경 25 3

 

Item 테이블

item_id name price
1 부활 1000
2 시간증가 500
     

INNER JOIN

우선 가장 많이 사용되는 JOIN 방법이다.

A와 B테이블의 공통된 부분만 가져오는 것이다.
그냥 JOIN 명령어를 사용하면 기본적으로 INNER JOIN 을 한다.

SELECT * FROM User A
INNER JOIN Item B ON
A.item_id = B.item_id

결과는 두 테이블에 공통적으로 존재하는 것만 나오므로

user_id name age item_id name price
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500

이러한 결과가 나오게 된다.
User 테이블의 3번은 아이템 id가 3이라고 하는데 item_id 가 3인 것은 존재하지 않으므로 나오지 않는다.

LEFT OUTER JOIN

LEFT OUTER JOIN 은 LEFT JOIN 이라고도 한다.
왼쪽 테이블을 기준으로 왼쪽 테이블의 내용은 전부 출력하고 오른쪽 테이블과 공통인 부분을 매핑하여 보여주는 방식이다.

SELECT * FROM User A
LEFT JOIN Item B ON
A.item_id = B.item_id

결과 :

user_id name age item_id name price
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500
3 이가경 25 3 null null

왼쪽 테이블을 모두 보여주는데 B테이블과 매칭되는 것이 없으면 null 로 표시해준다.

RIGHT OUTER JOIN

LEFT OUTER JOIN 과 마찬가지로 방향만 전환된 케이스이다.
이것은 오른쪽 테이블을 기준으로 오른쪽 테이블의 내용은 전부 출력하고 왼쪽 테이블과 공통인 부분을 매핑하여 보여준다.
LEFT JOIN으로 구현가능하므로 대부분 LEFT JOIN 으로 해결한다. (위에서 테이블 순서만 바꾸면 됨.)

그래서 사용예시를 보자면

SELECT * FROM User A
RIGHT JOIN Item B ON
A.item_id = B.item_id

결과 :

user_id name age item_id name price
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500

FULL OUTER JOIN

이 방식은 모든 테이블 값을 가져온다.
이 명령어를 지원하지는 않고 LEFT JOIN 과 OUTER JOIN 을 합쳐서 사용할 수 있다.

SELECT * FROM User A
LEFT JOIN Item B ON
A.item_id = B.item_id 

UNION

SELECT * FROM User A
RIGHT JOIN Item B ON
A.item_id = B.item_id

UNION 을 사용하여 LEFT JOIN 결과 값과 RIGHT JOIN 결과를 합쳐 출력할 수 있다. UNION 은 기본적으로 DISTINCT 이다.

user_id name age item_id name price
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500
3 이가경 25 3 null null
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500

==> LEFT JOIN 결과와 RIGHT JOIN 결과가 합쳐지는데

user_id name age item_id name price
1 홍길동 20 1 부활 1000
2 최세은 25 2 시간증가 500
3 이가경 25 3 null null

==> 중복된 결과는 제거되므로 이러한 결과가 나오게 된다.

EXCLUSIVE JOIN

추가로 EXCLUSIVE JOIN 도 있다.

A 테이블과 B 테이블에서 A 테이블에만 해당하는 값들을 가져오는 것이다.
이것도 LEFT JOIN 을 이용하여 구현할 수 있다.

SELECT * FROM User A
LEFT JOIN Item B ON
A.item_id = B.item_id WHERE B.item_id IS NULL

B의 아이디 값이 null 이면 B에는 존재하지 않는 것이므로 A테이블에만 해당되는 값들을 구할 수 있다.

결과 :

user_id name age item_id name price
3 이가경 25 3 null null

끝 ~~

'CS > 데이터베이스' 카테고리의 다른 글

DB 트랜잭션과 격리 수준  (0) 2024.11.07
Comments