RDBS/MYSQL

[MySQL]EXISTS, NOT EXISTS를 사용하여 데이터의 존재 여부 확인하기

MoonSta 2023. 5. 3. 10:53

2023.04.17 - [RDBS/MYSQL] - [MySQL]조건절에 포함되는 데이터 가져오기(WHERE IN, WHERE NOT IN)

 

[MySQL]조건절에 포함되는 데이터 가져오기(WHERE IN, WHERE NOT IN)

📌WHERE절 IN, NOT IN 기본적인 WHERE 절의 사용에 익숙하다면 IN, NOT IN을 사용하여 일치하거나, 불일치하는 데이터만 조회할 수 있다.다음 예제를 통해 확인해보도록 하겠습니다. 📌예제 SELECT * -- 학

mooonstar.tistory.com

WHERE 절에서 사용하는 IN, NOT IN절과 유사하게 사용되는 EXISTS, NOT EXISTS 문법에 대해 알아보도록 하겠습니다. 

 

📌연산자 EXISTS  특징

  • FK로 연관된 두 테이블의 관계가 있는 경우 유용하게 사용됨
  • 조건의 해당하는 데이터의 존재 유무만을 판단하기 때문에 성능이 뛰어남 
  • 일반적으로 SELECT절까지 진행하지 않기 때문에 IN에 비해 성능이 뛰어남 
  • 메인 쿼리의 결과값을 서브 쿼리에 대입하여 조건 비교후 결과를 리턴하는 반면에 IN절은 서브 쿼리의 결과를 메인 쿼리에 대입한다.

 

IN : SELECT 절에서 조회한 데이터를 비교하기 때문에 SELECT절까지 가지 않는 EXISTS에 비해 속도나 성능이 떨어진다.

 

 

📌회원 테이블

ID NAME GRADE
Jdjkf333 문OO SILVER
DFD15 채OO GOLD
JDFGD333 박OO DIAMOND
S12355 김OO GOLD

 

📌결제 테이블

DATE ID PRODUCT_NAME
2023-04-30 Jdjkf333 사과
2023-04-25 DFD15
2023-04-21 S12355 수박

 

 

📌결제 내역이 있는 회원 조회하기

SELECT *
  FROM MEMBER MEM
  WHERE EXISTS (
                #주문 내역여부 판단
                SELECT *	
                  FROM HIST
                 WHERE HIST.ID = MEM.ID
   );
ID NAME GRADE
Jdjkf333 문OO SILVER
DFD15 채OO GOLD
S12355 OO GOLD

 

 

📌결제 내역이 없는 회원 조회하기

SELECT *
  FROM MEMBER MEM
  WHERE NOT EXISTS (
                #주문 내역여부 판단
                SELECT *	
                  FROM HIST
                 WHERE HIST.ID = MEM.ID
   );
ID NAME GRADE
JDFGD333 박OO DIAMOND