SQL

[SQL] JOIN 알기 쉽게 설명 (INNER, LEFT/RIGHT/FULL OUTER)

15호의 개발자 2022. 2. 4. 21:23
반응형

[SQL] JOIN 알기 쉽게 설명 (INNER, LEFT/RIGHT/FULL OUTER)

 

 

 

1. INNER JOIN

 

INNER JOIN은 교집합이라고 생각하면 쉽다.


 

SELECT *
FROM t1
INNER JOIN t2
ON t1.숫자 = t2.숫자

[결과]

 

 

 

 

 

2. OUTER JOIN

 

OUTER JOIN은 합집합이라고 생각하면 쉽다.

(1) LEFT OUTER JOIN

   : 왼쪽 테이블의 레코드를 항상 포함하는 합집합.

 

 

SELECT *
FROM t1
LEFT OUTER JOIN t2
ON t1.숫자 = t2.숫자;

[결과]

 

 

 

(2) RIGHT OUTER JOIN

   : 오른쪽 테이블의 레코드를 항상 포함하는 합집합.

 

 

SELECT *
FROM t1
RIGHT OUTER JOIN t2
ON t1.숫자 = t2.숫자;

[결과]

 

 

 

(3) FULL OUTER JOIN

   : LEFT OUTER JOIN과 RIGHT OUTER JOIN을 UNION한 것.

 

 

SELECT *
FROM t1
FULL OUTER JOIN t2
ON t1.숫자 = t2.숫자;

또는

SELECT *
FROM t1
LEFT OUTER JOIN t2
ON t1.숫자 = t2.숫자
UNION
SELECT *
FROM t1
RIGHT OUTER JOIN t2
ON t1.숫자 = t2.숫자;

(MySQL 같은 경우는 FULL OUTER JOIN이 지원되지 않기 때문에 LEFT OUTER JOIN과 RIGHT OUTER JOIN 한 것을 UNION하면 된다.)

 

[결과]

 

 


(cf)

참고로, UNION과 UINON ALL은 다르므로 경우에 따라 구분해서 사용해야 한다.

UNION ALL로 하는 경우 중복된 것도 그대로 나온다.

 

  • UNION: LEFT OUTER JOIN과 RIGHT OUTER JOIN을 중복 제거한 합집합
  • UNION ALL: LEFT OUTER JOIN과 RIGHT OUTER JOIN을 중복 제거하지 않고 합한 것

 

[UNION ALL로 한 결과]

윗부분은 LEFT OUTER JOIN한 것이고, 아랫부분은 RIGHT OUTER JOIN한 것이다.

 

반응형