DATABASE

[ORACLE] OUTER JOIN 예제

오래오래 늘 함께 2019. 6. 13. 16:38

* 분야별로 지원자 수가 없는 과목들 추출하기*

 

A : 전 과목 테이블 (기준)

B : 지원한 과목 테이블

(lec_cd : 과목코드)

 

1. 전 과목 테이블에서 분야별로 과목 추출하기

 

SELECT

  grade,

  col_cd,

  lec_cd

FROM A

group by grade, col_cd, lec_cd

 

2. 분야별로 추출한 과목테이블(AA)과 지원한 과목 테이블(B) OUTER JOIN 

-> 지원한 과목 테이블(BB)에서 지원한 과목이 없는 데이터까지 추출

 

SELECT

  aa.grade,

  aa.col_cd,

  aa.lec_cd

(SELECT

  grade,

  col_cd,

  lec_cd

FROM A

group by grade, col_cd, lec_cd ) aa, B bb

where aa.grade = bb.grade (+)

and aa.col_cd = bb.col_cd (+)

and aa.lec_cd = bb.lec_cd (+)

group by aa.grade, aa.col_cd, aa.lec_cd

order by aa.grade, aa.col_cd, aa.lec_cd

 

3. 지원한 과목이 없는 데이터

 

HAVING  /*group by의 조건절*/

SUM( CASE WHEN lec_cd is not null then 1 else 0 end ) 

-> lec_cd가 null 이면 0 null이 아니면 1

 

 

[ SELECT

   aa.grade,

   aa.col_cd,

   aa.lec_cd

(SELECT

  grade,

  col_cd,

  lec_cd

FROM A

group by grade, col_cd, lec_cd ) aa, B bb

where aa.grade = bb.grade (+)

and aa.col_cd = bb.col_cd (+)

and aa.lec_cd = bb.lec_cd (+)

group by aa.grade, aa.col_cd, aa.lec_cd

having sum(case when lec_cd is not null then 1 else 0 end) < 1  /*lec_cd가 없는 데이터만 추출하기 위해*/

order by aa.grade, aa.col_cd, aa.lec_cd ]