규칙 

LEFT OUTER JOIN 시 ON 절에서는 우측(널값으로 채워지는 쪽)의 추가 제약조건을 넣고 

좌측의 추가 제약조건은 WHERE절에 넣어야 한다. 


1. 원하는 결과값 

1
2
3
4
5
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' -- 좌측의 추가제약조건
cs

2. 잘못된 예 -- INNER JOIN의 결과가 나오게 됨.

1
2
3
4
5
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'    
cs


3. 잘못된 예 

1
2
3
4
5
 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'
cs

 

4. 잘못된 예  

1
2
3
4
5
 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'
cs

결과

1
2
3
4
갯수 503 SELECT count(*FROM TBHZM200 AS A 
갯수 184 SELECT count(*FROM TBHZM200 AS A WHERE A.Transp_Oper_Org_CD = '1' 
갯수 13838 SELECT count(*FROM MST_TKT_STA_STOCK AS B 
갯수 178 SELECT count(*FROM MST_TKT_STA_STOCK AS B WHERE B.Oper_DT = '20090713'
cs




출처 : http://ultteky.egloos.com/10411192


'SQL > MS-SQL' 카테고리의 다른 글

SELF JOIN  (0) 2017.09.19
join Diagram  (0) 2017.09.19
NULL 비교하기  (0) 2017.09.19
일반집계함수 WINDOW FUNCTION  (0) 2017.09.07
순위관련 WINDOW FUNCTION  (0) 2017.09.07

+ Recent posts