티스토리 뷰
1. Outer Join 이란?
SQL를 작성하면서 Outer Join이 어쩔 수 없이 발생할 때가 있습니다.
모델링 단계에서 가급적 Outer Join이 발생하지 않도록 하는것이 더 좋겠죠.
일단 Outer Join이 꼭 필요해서 사용할 경우 오라클과 ANSI SQL를 사용할때 많이 햇갈리는 경우가 있습니다.
Outer Join이란 두개의 집합(Table)을 Join으로 연결할 경우. 한쪽 집합을 기준으로 다른 집합에는 없어도 보여주고 싶을 경우에
사용합니다. 즉 A, B 집합이 있을 경우 A를 기준으로하고 B에는 A에 있는 집합은 당연히 나오고 없으면 null로 나오도록 하는 것입니다.
이때 기준이 되는 집합을 Outer라 하고 그 반대쪽을 Inner라 합니다.
t_emp가 Outer Table이고 t_dept가 Inner Table일 경우
[오라클]
select a.id, a.name, b.dept_nm
from t_emp a, t_dept b
where a.dept_cd = b.dept_cd(+) <-- Outer Sign을 Inner Table쪽에 명시
주) inner table의 컬럼이 조건절에 추가로 나오면 모두 (+) 를 명시해야 합니다.
조인조건이 아니라 필터 조건에 (+) 붙이기 싫다면 OR로 IS NULL 조건을 추가로 주면 됩니다.
[ANSI SQL]
// Oracle 9i이부터는 ANSI SQL Outer Join Syntax를 지원합니다.
select a.id, a.name, b.dept_nm
from t_emp a left outer join t_dept b
on a.dept_cd = b.dept_cd
주)ANSI SQL에서 left outer join을 사용할지 right outer join을 사용할지 햇갈리는 경우가 많은데
매우 간단하게 알 수 있습니다. 바로 Outer Table이 어느쪽에 있느냐 입니다.
위경우에 t_emp 테이블이 Outer Table이고 from 절에서 왼쪽에 위치함으로 left outer join으로 한 것입니다.
ANSI SQL OUTER JOIN에서 주의할 점은 inner table에 대한 조건이 있을 경우 반드시 on 절에 기술해야 합니다
where 절에 b.dept_nm = '기술본부' 이런식으로 하면 안됩니다. 반드시 on 절에 기술해야 한다는 것을 기억하세요.
반면에 Outer Table의 컬럼의 조건은 where 절에 기술해야 합니다.
즉 조인조건은 on절에, outer table의 조건은 where절, inner table의 조건은 on절에 기술해야 합니다.
PS). Outer Join에서 Inner Table은 Driving Table이 될 수 없습니다.
무조건 Outer Table이 Driving 된다는것도 기억해 두십시오.
2. Full Outer Join
오라클 8i까지 Full Outer Join에 대한 이슈가 있을 경우 UNION으로 해결했습니다.
SELECT d.dept_id, d.name, l.regional_group FROM department d, location l WHERE d.location_id (+) = l.location_id UNION SELECT d.dept_id, d.name, l.regional_group FROM department d, location l WHERE d.location_id = l.location_id (+) ;
DEPT_ID NAME REGIONAL_GROUP ---------- -------------------- ---------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES 40 OPERATIONS BOSTON CHICAGO SAN FRANCISCO
그런데 오라클 9i이부터는 Full Outer Join이 지원이 됩니다.
SELECT d.dept_id, d.name, l.regional_group
FROM department d FULL OUTER JOIN location l
ON d.location_id = l.location_id;
DEPT_ID NAME REGIONAL_GROUP
---------- -------------------- ----------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES
40 OPERATIONS BOSTON
CHICAGO
SAN FRANCISCO
- Total
- Today
- Yesterday
- weka
- 배당급
- Sybase IQ
- 카카오 에드
- 로니카 BCS
- GKRS
- 파나소닉 비데 DL-EH10KWS
- 증권정보포털
- Life Chair
- 르세라핌
- 남설 팔찌
- 고체 향수
- JMW 헤어드라이기기
- 별이 빚나는 밤
- 화분벌레
- 매직 트랙패드2
- 빈센트 반 고흐
- VARIDESK
- 브리다 정수기
- yugabyteDB
- 톡토기
- 솔리드 쿨론
- 유가바이트디비
- 코라나 19
- 별잉 빛나는 밤
- 홈 오피스
- 오미크론
- 루미큐브 종류
- node.js
- Pixel Pals
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |