본문 바로가기
  • 마침표 보다 쉼표를 나타내자
프로그래밍/SQL

서브쿼리 EXISTS

by Y코더 2024. 3. 20.
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

'프로그래밍 > SQL' 카테고리의 다른 글

데이터베이스란?  (124) 2024.03.10