EXISTS

두 테이블 간의 결과를 어떤 값이 존재하는지 알고 싶은 경우이다.

핵심은 존재하는 가를 판단하기 위해서이다.

쿼리의 의도를 잘 고려하면 쿼리문 성능에 효과적이지만 그렇지 않을 경우 JOIN이 더 좋다.

SELECT * FROM customers WHERE EXISTS (
    SELECT * FROM orders WHERE orders.c_id = customers.c_id);

서브쿼리에서 메인쿼리 테이블을 활용하는 형태를 연관 서브쿼리라고 함

결국 EXISTS를 통해서 True False를 반환한다.

-- IN
-- DISTINCT 생략해도 결과는 같음
SELECT * FROM customers WHERE c_id IN ( SELECT DISTINCT c_id FROM orders);

-- JOIN
SELECT DISTINCT c.*
FROM customers c JOIN orders o
on o.c_id = c.c_id;

위와 같이 IN이나 JOIN으로 사용할 수 있지만

NOT EXISTS도 있다.