728x90
서브 쿼리 EXISTS에 대해 알아보자!!
EXISTS를 언제 쓰지?
SQL에 대한 공부없이 주구장창 코드만 짜게되면
다른 명령어는 모른채 SELECT 문에 SELECT 로
덕지덕지 붙어있는 서브쿼리문을 볼 수 있다...😇
그러면 !!
평소에 사용하던 서브쿼리 구문부터 보자.
SELECT *
FROM customers C
WHERE customer_id IN (SELECT customer_id
FROM orders O
WHERE O.customer_id = C.customer_id
);
간단히 고객테이블로 예시를 들었다.
orders 테이블의 모든 customer_id 를 가져와서 임시집합이 생기고
customers 테이블의 customer_id 가 이 집합에 속하는지 비교하게 된다.
아하.. 점점 고객 데이터가 늘어난다면 쿼리의 성능이 많이 떨어질 것이다.
사실,
가장 무서운 점은 숨어있는 null 값의 위협이다...😨
orders 테이블에 null 값이 숨어 있다면 IN 연산자는 붉은 빛을 드리우게 되리라
반드시 NULL 처리가 필요하다.
서브쿼리들의 SQL에 EXISTS의 등장이라
SELECT *
FROM customers C
WHERE EXISTS (SELECT *
FROM orders O
WHERE O.customer_id = C.customer_id
);
어떤 이점이 있는지 순서대로 알아보자.
customers 테이블의 각각 레코드에 대해 orders 테이블과 관련이 있는지 확인하고
orders 테이블에 일치하는 customer_id 레코드가 존재하는지 확인한다.
이렇게 되면 데이터가 방대해져도 두려울 것이 없다. 👍
EXISTS의 가장 중요한 점은
서브쿼리를 돌려 존재 여부를 확인하고
조회된 값을 반환하지 않아서 성능이 향상된다.
NOT EXISTS
SELECT *
FROM customers C
WHERE NOT EXISTS (SELECT *
FROM orders O
WHERE O.customer_id = C.customer_id
);
EXISTS 구문 앞에 NOT을 입력하면
서브 쿼리의 결과가 없으면 검색하게 된다.
마치며
항상 모르고 있는 명령어가 있는지 알아보고
숙지하는 것이 중요하다!! 😎
잘못되거나 더 좋은 내용이 있으면 댓글로 부탁드립니다👍
728x90