ANSI 코드 방시으로 쿼리를 작성하는 중 ON절과 Where 절의 차이가 뭘까 궁금하여
여러가지 방식으로 테스트를 진행해 보았다.
어떤 방식에서는 같은 결과값이 나왔으나
어떤 방식에서는 다른 결과값이 나왔다.
원인을 알아보기 위해 구글링...ㅋㅋ
.................LOADING........................
내부 조인일 경우에는 ON절과 Where절 어디에 조건을 써도 같은 결과가 나온다.
하나 외부 조인일 경우에는 다르다는 사실을 알았다.
외부 조인일 경우
1. ON절에 조건을 사용할 경우 키값 조인을 하기전에 조건을 제외한다.
2. Where절에 조건을 사용할 경우 테이블 조인의 결과값에 대한 조건검색 결과를 나타낸다.
규칙 LEFT OUTER JOIN 시 ON 절에서는
우측(널값으로 채워지는 쪽)의 추가 제약조건을 넣고
좌측의 추가 제약조건은 WHERE절에 넣어야 한다.
위 내용을 토대로 속도이슈에 대한 문제를 어느정도 해결할수 있을 것 같다.
외부 DB의 내용을 DBLink로 실시간으로 가져와 보여주는게 대부분이다 보니
많은 부하가 걸려 사이트 로딩 속도가 오래 걸리는 문제를 해결하기 위해
직접적으로 외부 DB를 맘대로 수정할수 있는 권한 또한 없을 뿐더러 오로지 쿼리 튜닝뿐...
이제 어느 정도 해결될 조짐이 보인다. ......
이런 문제에 대해 고민하는 개발자들이 많이 있을줄 안다.
해결책을 찾고자 해도 주위의 사람들은 모르는 사람들이 많을 뿐더러 정작 찾고자 했을때
찾기가 힘들다...
부디 이런 문제로 고민하시는 개발자 분들에게 좋은 정보가 되시길....
아래는 어렵게 찾은 고마우신 분의 정보와 해당 블로그를 링크하였다.
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'
위의 예제는 http://ultteky.egloos.com/10411192 에서 참고하였다.
공유하기 버튼
|
|







최근 덧글