오늘은 join에 대한 개념을 정리해본다.
중복 없는 열(column)들을 Join한다고 가정했을 때, 가장 일반적인 경우이다.
각각 단 하나의 열만 있는 두 개의 테이블이 있고, 데이터가 다음과 같다고 가정한다.
A B
- -
1 3
2 4
3 5
4 6
(1, 2)는 A에만 있고, (3, 4)는 같이 있으며, (5, 6)은 B만 갖고 있다.
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은 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
아우터 조인을 사용하는 이유는 기준 테이블의 데이터를 누락 없이 모두 조회하고 참조 테이블의 값이 있을 경우 해당 값을 사용하기 위해서이다.
Full-Outer-Join은 A와 B의 합집합을 얻는다. 만약 어떤 행의 A에는 데이터가 있고 B에는 비어있는 경우 B 부분은 null이며, 반대의 경우에는 A 부분이 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
FULL OUTER JOIN은 두개의 테이블을 합쳐서 조회한다고 생각하면 된다. JOIN이 될 경우 해당값을 표시하고 JOIN이 안되면 NULL로 표시하되 두개의 테이블 모든 데이터가 조회된다. 자주 사용하지 않기 때문에 개념만 이해하면 된다.
select a.empno
, a.ename
, a.job
, a.mgr
, a.deptno
, b.dname
from emp AS a CROSS JOIN dept AS b
크로스 조인은 기준 테이블(emp)의 행을 조인 테이블(dept) 행만큼 증가를 시킨다. 아주 가끔씩 사용할 일이 있으니 개념만 이해하면 된다.