DB/Oracle

[ORACLE] EXISTS/NOT EXISTS

Plone 2020. 11. 18. 16:45

#EXISTS/NOT EXISTS

함수이기 때문에 WHERE, ON같은 조건절에 EXISTS() 같은 형태로 작성한다

서브 쿼리 내 값이 존재하면 TRUE를 반환하고

서브 쿼리 내 값이 존재하지 않으면 FALSE를 반환한다

 

FALSE가 반환되면 메인 쿼리의 SELECT는 NULL이 출력된다

 

#EXISTS

서브쿼리 안의 값이 있다면 TRUE를 반환하고 없다면  FALSE를 반환한다

 

# NOT EXISTS

EXISTS의 반대이다

 

#WHERE EXISTS

SELECT * -- FALSE면 NULL
FROM
    TABLE1 T1
WHERE EXISTS -- 서브쿼리 안의 값이 있다면 TRUE를 반환하고 없다면  FALSE를 반환한다
    (SELECT *
     FROM
        TABLE2 T2
     WHERE
        T2.BOARDNUM = T1.BOARDNUM
    )

 

#WHERE NOT EXISTS

SELECT * -- TRUE면 NULL
FROM
    TABLE1 T1
WHERE NOT EXISTS -- NOT
    (SELECT *
     FROM
        TABLE2 T2
     WHERE
        T2.BOARDNUM = T1.BOARDNUM
    )

 

#JOIN절에서도 사용이 가능하다

 

#ON EXISTS

SELECT * -- FALSE면 NULL
FROM
    TABLE1 T1
INNER JOIN
    TABLE2 T2
    ON EXISTS -- 서브쿼리 안의 값이 있다면 TRUE를 반환하고 없다면  FALSE를 반환한다
    (SELECT *
     FROM
        TABLE3 T3
     WHERE
        T3.BOARDNUM = T2.BOARDNUM
    )

 

#ON NOT EXISTS

SELECT * -- TRUE면 NULL
FROM
    TABLE1 T1
INNER JOIN
    TABLE2 T2
    ON NOT EXISTS -- NOT
    (SELECT *
     FROM
        TABLE3 T3
     WHERE
        T3.BOARDNUM = T2.BOARDNUM
    )