ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - JOIN 사용 시 ON과 WHERE의 차이
    Database/Oracle 2023. 2. 21. 14:14

    JOIN 사용 시 ON과 WHERE의 차이

    쿼리문 01
    SELECT
        *
    FROM
        TBLD_01 a LEFT JOIN TBLD_02 b
        ON (a.aa == b.aa)
    WHERE
        b.cc = 7;

    위 쿼리문의 경우 TBLD_01과 TBLD_02 테이블에 대해서 OUTER JOIN을 수행한 후 b.cc = 7인 데이터들을 추출한다.

     

    위 쿼리문의 작업 순서는 아래와 같다.

     

    1. TBLD_01과 TBLD_02 테이블의 OUTER JOIN 수행

    2. OUTER JOIN 결과들 중 b.cc = 7인 데이터들을 추출

     

    쿼리문 02
    SELECT
        *
    FROM
        TBLD_01 a LEFT JOIN TBLD_02 b
    ON
        (a.aa = b.aa AND b.cc = 7);

    하지만, 위 쿼리문의 경우 TBLD_01과 cc 속성 값이 7인 TBLD_02 테이블에 대해서 OUTER JOIN을 수행한 결과가 나온다.

     

    쿼리문의 작업 순서는 아래와 같다.

     

    1. TBLD_01과 cc 속성 값이 7TBLD_02 테이블의 OUTER JOIN 수행

     

    결과
    TBLD_01    TBLD_02
    aa | bb    aa | cc
    -------    -------
     1 | 4      1 | 7
     2 | 5      2 | 8
     3 | 6

     

    위와 같은 TBLD_01 테이블과 TBLD_02 테이블이 있다고 가정해 보겠다.

     

    aa   |   bb  |   aa  |   cc
    ------------------------------
     1   |   4   |   1   |   7

    쿼리문 01의 결과는 위와 같다.

     

    aa   |   bb  |   aa  |   cc
    ------------------------------
     1   |   4   |   1   |   7
     2   |   5   |   2   |   8
     3   |   6   |  null |  null

     

    쿼리문 02의 결과는 위와 같다.

     

    결과를 보면 알 수 있듯이, ON과 WHERE의 차이점은 JOIN을 할 대상이 달라지는 것이다.


    출처

    https://blog.leocat.kr/notes/2017/07/28/sql-join-on-vs-where

     

    728x90

    'Database > Oracle' 카테고리의 다른 글

    Oracle - BETWEEN AND  (0) 2022.05.02
    Oracle - 조건문(IF, CASE)  (0) 2022.04.27
    Oracle - MERGE INTO  (0) 2022.04.26
    Oracle - 반복문(LOOP, WHILE, FOR)  (0) 2022.04.25
    Oracle - 변수 및 상수 선언  (0) 2022.04.25

    댓글

Designed by Tistory.