2023.04.17 - [RDBS/MYSQL] - [MySQL]조건절에 포함되는 데이터 가져오기(WHERE IN, WHERE NOT IN)
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 |
'RDBS > MYSQL' 카테고리의 다른 글
[MySQL]데이터의 특정 값이 포함되어있는지 확인하는 방법(FIND_IN_SET) (3) | 2023.06.06 |
---|---|
[MySQL]반드시 알아야 하는 쿼리의 실행 순서 (8) | 2023.05.06 |
[MySQL]다양한 NULL 처리 방법(IFNULL, CASE문, COALESCE) (0) | 2023.05.01 |
[MySQL]조건절에 포함되는 데이터 가져오기(WHERE IN, WHERE NOT IN) (5) | 2023.04.17 |
[MySQL]해당월의 마지막 일자 구하기(LAST_DAY) (4) | 2023.04.14 |