WHERE , ON절 순서 관련질문 0 2 4,290

by kdg99 [Oracle 기초] ORACLE [2024.03.06 11:09:32]


안녕하세요 선배님들

이번에 SQL공부를 하다가 궁금한 점이 생겨서 질문드립니다.

ON절과 WHERE절에 같은 조건을 거는 경우에 대한 질문인데

검색하면서 여러 답변을 찾아보면서 더 아리송해지는 것 같아 글 올립니다.

        SELECT *
          FROM EMP_LIST  E  
     LEFT JOIN DEPT_LIST D  ON E.EMP_NO = D.EMP_NO
                           AND D.MADE_DT > '20230101'
                           AND D.MADE_DT < '20231231'
         WHERE     D.MADE_DT > '20230101'
               AND D.MADE_DT < '20231231'

위와 같은 테이블 조인시 (각각 ON절, WHERE절이 걸린 쿼리로 구분해서 봐주세요)

ON절이 먼저 실행되면서 필터링된 DEPT_LIST 테이블이 조인된 후 WHERE 절에서 다시 한 번 걸러지는 것인지

WHERE절이 먼저 실행되면서 필터링된 DEPT_LIST 테이블의 조인과정중 ON절에서 다시 한 번 걸러지는 것인지

궁금합니다.

찾아본바로는 WHERE절에 거는 것이 성능이 더 좋은 것 같은데

빈값이 출력되는 행보다 ON절로 걸러지는 행이 많은 경우를 가정하면

ON절이 먼저 진행되면 ON절로 조인되는 개수를 줄이는게 좋지 않나요?

 

그리고

옵티마이저가 알아서 조정하겠지만 혹시 그렇지 않은 경우에서의 기본적인

JOIN ON WHERE 절 각각의 실행순서가 궁금합니다

ON절은 아래에서부터 실행된다고 들었어서 궁금증이 생겼습니다.

 

JOIN절 - 테이블 3개를 JOIN한 경우 위에서부터 아래

ON절 - ON 연결조건 AND 조건1 AND 조건2 의 경우 아래에서부터 위로

WHERE절 - 조건1 AND 조건2 AND 조건3 의 경우 앞에서부터 뒤로

이런식으로,.,

by 마농 [2024.03.06 15:05:23]

On 절이 먼저냐 Where 절이 먼저냐? 를 따지는게 아닙니다.
위가 먼저냐 아래가 먼저냐? 를 따지는게 아닙니다.
어떤 조건을 먼저 처리하는게 유리한가? 를 따지셔야 합니다.

이너조인의 경우에는 ON 절 WHERE 절 아무데나 조건 줘도 알아서 잘 돌아갑니다.
그래도 조인 조건은 ON 절에 검색조건은 WHERE 절에 적어주는게 좋습니다.

아우터 조인의 경우엔 ON 절 WHERE 절 조건의 위치에 따라 결과가 달라집니다.
따라서 어떤 결과를 원하는지에 따라 조건의 위치를 잘 선택해야 합니다.

위 쿼리는 아우터 조인이지만 이너조인 처럼 동작합니다.
쿼리를 잘못 작성한 것이죠.
- 조건을 잘못 줬을 가능성과
- 조인을 잘못 선택했을 가능성
 


by kdg99 [2024.03.06 16:51:57]

친절한 답변 감사합니다!

판단의 기반이 되는 기준을 정하는게 정말 어려운 것 같습니다,, 아직 공부가 많이 필요한 것 같네요

ON, WHERE의 위치차이는 나오는 결과를 선택하는 부분이 크고 성능에 유의미한 영향을 줄 때 고려하는 부분인 것 같네요

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입