[SQL] IN, EXISTS 정리

인스·2025년 7월 2일

IN

  • 집합 내부에 값이 존재하는지 여부
  • IN 쿼리 -> 메인 쿼리순서로 진행
  • 예제
    [STUDENT 테이블]
SELECT *
FROM STUDENT
WHERE department_id IN ('1001', '1002');

// 결과
이름이 홍길동인 row만 출력됨

NOT IN

  • 조건이나 서브쿼리에 일치하지 않는 값을 반환
  • ⭐ 조건에 null이 존재하게 되면 no rows selected로 UNKNOWN(=false) 값이 반환되므로 무조건 null 처리 필요!!!!
  • 관련 문제 : 업그레이드 할 수 없는 아이템 구하기


EXISTS

  • 결과로 TRUE, FALSE 반환하는 연산자
  • 테이블 간의 결과를 어떤 값이 존재하는 지만 조회할때 사용
  • 메인 쿼리 -> EXISTS 쿼리 순서로 진행
    => 메인 쿼리에 먼저 접근 후 ROW 하나 가져오고 EXISTS 서브쿼리를 실행시켜 결과 판단
  • 예제
    [STUDENT 테이블]

    [DEPARTMENT 테이블]
SELECT 
    * 
FROM STUDENT_TABLE A
WHERE 
    EXISTS (SELECT 1
    	    FROM DEPARTMENT_TABLE B
            WHERE A.department_id = B.department_id)
            
            
// 결과
홍길동, 이순신 ROW 출력

NOT EXISTS

  • 조건에 맞지 않는 ROW 들만 추출할때


💡 비교

  • EXISTS 절이 성능 더 좋음
  • EXISTS는 일치하는 행 발견시 테이블 스캔 중지
  • IN은 하위 쿼리와 결합하면 서브쿼리를 먼저 처리 한 다음 서브 쿼리 결과를 가지고 메인 쿼리 처리함
  • EXISTS -> 서브 쿼리에 데이터가 많을 때, IN -> 데이터가 적거나 작은 연산자를 사용할 때
profile
💻💡👻

0개의 댓글