카테고리 없음

outer join 에서 where 절에 써야 할지..관계절에 써야 할지...

뭉치냐옹 2009. 3. 17. 14:06

다음의 경우 T1은 강의테이블이고 T2는 강의를 들은 회원의 로그가 들어있는 테이블이다.

이경우 아래 2개의 쿼리중 옳은 것은?

 

[1번쿼리]

select T1.C1 강의코드,T2.C4 들은시각 from T1 a left outer join T2 b

on (a.C1 = b.C1 and a.C2=b.C2 and b.C3='특정사용자ID')

where a.C2='특정과목코드'

 

[2번쿼리]

select T1.C1 강의코드,T2.C4 들은시각 from T1 a left outer join T2 b

on (a.C1 = b.C1 and a.C2=b.C2 )

where a.C2='특정과목코드' and b.C3='특정사용자ID'

 

정답: 1번

 

설명: outer join 에서 옵셔널테이블(left join 이므로 right 에 있는 테이블이 옵셔널 테이블)의 상수조건(b.Column='일정한값' 이 되는 조건)은 관계(on 절)에 명시되어야 하지 필터링 조건(where 절) 에

명시되면 안된다.

 

2번쿼리의경우 b.C3 의 값을 where 절에 정의하게 되면 outer join 이 아니라 inner join이 되어

특정과목의 강의를 볼 수 없게 된다.