Note/그밖에

LEFT OUTER JOIN 시에 ON 절과 WHERE 절에 추가 제약조건 넣는 규칙

Delia :D 2011. 7. 5. 17:29
left outer join 시 조건을 잘못쓰면 원하는 결과를 가져오지않는다. 
심지어 카운트도 잘못세어온다.
left outer join 시 조건절 쓰는방법을 익혀두도록 하자.


** 규칙 **
LEFT OUTER JOIN 시
ON 절에서는 우측(널값으로 채워지는 쪽)의 추가 제약조건을 넣고 
WHERE 절에서는 좌측의 추가 제약조건을  넣어야 한다.

 

1. 원하는 결과값 
SELECT *  --(184개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B 
ON  a.Extn_Sta_No = b.Extn_Sta_No   
AND B.Oper_DT = '20090713'    <-- 우측의 추가 제약조건
WHERE A.Transp_Oper_Org_CD = '1'   <-- 좌측의 추가제약조건
 
2. 잘못된 예 -- INNER JOIN의 결과가 나오게 됨.
SELECT *  --(176개 행 적용됨)
FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B 
ON  a.Extn_Sta_No = b.Extn_Sta_No   
AND  A.Transp_Oper_Org_CD = '1'  
WHERE b.Oper_DT = '20090713'     

3. 잘못된 예 
 SELECT * --(503개 행 적용됨) 
 FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B 
 ON  a.Extn_Sta_No = b.Extn_Sta_No   
 AND B.Oper_DT = '20090713'                 <--둘다 ON 절에 위치함.
 AND A.Transp_Oper_Org_CD = '1'
 
4. 잘못된 예  
 SELECT * --(176개 행 적용됨)
 FROM TBHZM200 AS A LEFT OUTER JOIN MST_TKT_STA_STOCK AS B 
 ON  a.Extn_Sta_No = b.Extn_Sta_No   
 WHERE B.Oper_DT = '20090713'    <--둘다 where절에 위치
 AND A.Transp_Oper_Org_CD = '1'

'Note > 그밖에' 카테고리의 다른 글

java, jsp 난수발생  (0) 2011.07.05
jsp request 내장객체 사용  (0) 2011.07.05
윈도우 사용자계정 없이 부팅하기  (0) 2011.07.05
DISTINCT 와 GROUP BY의 차이  (0) 2011.07.04
php 소숫점 처리  (0) 2011.06.30