Database

[MySql] OUTER JOIN에서 On과 Where 조건

k9e4h 2017. 8. 25. 11:08

1. JOIN에서 On 과 Where 조건의 순서차이


join의 on절이 선조건이 됨.




2. MS-SQL 쿼리 ON절과 Where 절의 차이


1. ON절에 조건을 사용할 경우 키값 조인을 하기전에 조건을 제외한다. 
2. Where절에 조건을 사용할 경우 테이블 조인의 결과값에 대한 조건검색 결과를 나타낸다.

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





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


규칙 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'


블로그발췌


위 블로그 내용 추가 설명

1. where은 join된 이후에 실행됨

2. join 이후에 조건을 걸어버리니까 다 날아가고 inner join이 됨

3. 앞에 A table에만 뒤 조건 걸골 elft하니까 A*B가 됨

4. 2랑 결과가 같은듯 / inner join. 

반응형