반응형
[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한 것이다.
반응형
'SQL' 카테고리의 다른 글
[SQL] JOIN 개념 및 종류, VIEW(뷰), SELECT INTO, INSERT INTO SELECT, CASE ... WHEN ... END (0) | 2022.04.11 |
---|---|
[SQL] SQL, CRUD 기초 (간단한 설명) (0) | 2022.04.07 |
[SQL] DBMS, SQL 기초 (간단한 설명) (0) | 2022.03.31 |
[SQL] 기본 문법 간단한 정리 (SHOW, USE, DESCRIBE 등) (0) | 2022.02.03 |
[SQL] mybatis 쿼리 select문 예시 (PostgreSQL) (0) | 2022.01.26 |