Q: INNER JOIN OUTER JOIN의 차이가 무엇인가요? 그리고 LEFT JOIN, RIGHT JOIN, FULL JOIN은 또 무엇인가요?
(질문자: cdv)
A: 중복이 없는 서로 다른 두 컬럼을 JOIN한다고 가정할 때, 일반적으로는:
- inner join 을 A 와 B에 대해 수행하는 것은, A와 B의 교집합을 말합니다. 벤다이어그램으로 그렸을 때 교차되는 부분입니다.
- outer join을 A와 B에 대해 수행하는 것은, A와 B의 합집합을 말합니다. 벤다이어 그램으로 그렸을 때, 합집합 부분입니다.
예제:
두 개의 테이블이 있다고 가정합시다. 컬럼은 1개이고, 데이터는 아래와 같습니다.
A B - - 1 3 2 4 3 5 4 6
(1, 2)는 A에만 있고, (3, 4)는 A와 B 모두에 있으며, (5, 6)은 B에만 있습니다.
Inner join
이너 조인, Inner join을 수행하면 두 집합에 모두 있는 열만 남게 됩니다.
select * from a INNER JOIN b on a.a = b.b; select a.*,b.* from a,b where a.a = b.b; a | b --+-- 3 | 3 4 | 4
Left outer join
레프트 아우터 조인, Left outer join을 하면, A의 모든 열 더하기 B에 있는 공통부분을 얻게 됩니다.
select * from a LEFT OUTER JOIN b on a.a = b.b; select a.*,b.* from a,b where a.a = b.b(+); a | b --+----- 1 | null 2 | null 3 | 3 4 | 4
Right outer join
라이트 아우터 조인, Right outer join을 하면 B의 모든 열 더하기 A에 있는 공통부분을 얻게 됩니다.
select * from a RIGHT OUTER JOIN b on a.a = b.b; select a.*,b.* from a,b where a.a(+) = b.b; a | b -----+---- 3 | 3 4 | 4 null | 5 null | 6
Full outer join
풀 아우터 조인, Full outer join을 하면 A와 B의 합집합을 얻게 됩니다.
B에는 있는데 A에 없는 (5, 6)은 A에서는 해당 부분이 null 이 되고,
A에는 있는데 B에 없는 (1, 2)는 B에서는 해당 부분이 null 이 됩니다.
select * from a FULL OUTER JOIN b on a.a = b.b; a | b -----+----- 1 | null 2 | null 3 | 3 4 | 4 null | 6 null | 5
(답변자: Mark Harrison)
A: 여러가지 join이 있고, 아래와 같은 스키마를 이용하실 수 있습니다.
Source: Visual-Representation-of-SQL-Joins explained in detail by C.L. Moffatt
(답변자: Teoman shipahi)
_
출처: https://stanleykou.tistory.com/entry/SQL-INNER-조인과-OUTER조인이-무엇인가요 [StanleyKou의 개인작업실]
'JAVA HTML JAVASCRIPT > DB' 카테고리의 다른 글
[오라클] 데이터 중복제거 방법 (distinct, group by, 성능) (0) | 2020.07.30 |
---|---|
PostgreSQL 설치 DB생성 (0) | 2020.02.05 |
PostgreSQL 설치 및 확인 (0) | 2020.02.05 |
DBeaver 설치 및 연동 (0) | 2020.02.05 |
inner / outer join (0) | 2020.01.27 |