본문 바로가기
Sql

IN,BETWEEN,EXISTS

by 헬로제이콥 2025. 7. 7.

✅ 1. IN – 리스트에 포함되는 값만 추출

📌 뜻

WHERE 컬럼 IN (값1, 값2, 값3)
→ 컬럼 값이 주어진 값 리스트 중 하나라도 맞으면 통과


✅ 예제: 특정 부서의 직원만 보기

sql
복사편집
SELECT emp_name, dept_id FROM employees WHERE dept_id IN (10, 20);

설명:
→ dept_id가 10 또는 20인 직원만 조회

emp_namedept_id
홍길동 10
이순신 10
강감찬 20
 

✅ 실무 팁: 서브쿼리 안에서도 자주 씀

sql
복사편집
SELECT emp_name FROM employees WHERE dept_id IN ( SELECT dept_id FROM departments WHERE location = '서울' );

→ 서울에 있는 부서 소속 직원만 조회


✅ 2. BETWEEN – 범위 조건

📌 뜻

WHERE 컬럼 BETWEEN A AND B
→ 컬럼 값이 A 이상, B 이하일 때 참
(포함됨)


✅ 예제: 2500 ~ 4000 사이 급여 직원

sql
복사편집
SELECT emp_name, salary FROM employees WHERE salary BETWEEN 2500 AND 4000;
emp_namesalary
홍길동 2800
이순신 3200
유관순 3000
강감찬 4000
 

✅ BETWEEN은 날짜에도 많이 씀

sql
복사편집
WHERE hire_date BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD')

✅ 3. EXISTS – "값이 있냐?"를 물어봄 (존재 여부 확인)

📌 뜻

WHERE EXISTS (서브쿼리)
→ 서브쿼리 결과가 1건이라도 있으면 TRUE


✅ 예제: 급여 4000 이상인 기록이 있는 부서만 출력

sql
복사편집
SELECT dept_id FROM departments D WHERE EXISTS ( SELECT 1 FROM employees E WHERE E.dept_id = D.dept_id AND E.salary >= 4000 );

설명:
→ employees 테이블에 해당 부서에서 4000 이상 급여가 한 명이라도 있으면 통과


✅ EXISTS vs IN 차이

구분INEXISTS
사용 대상 값 목록 서브쿼리 존재 여부
결과 조건 값이 리스트에 포함되면 참 서브쿼리 결과가 있으면 참
특징 서브쿼리 결과를 비교 서브쿼리가 실행되고 결과 유무만 체크
 

✅ EXISTS 실무 예: 학생이 성적을 가진 경우만 조회

sql
복사편집
SELECT student_id, student_name FROM Students S WHERE EXISTS ( SELECT 1 FROM Grades G WHERE G.student_id = S.student_id );

→ 성적(Grades) 테이블에 한 건이라도 존재하면 조회


✅ 세 가지 요약

문법의미예시
IN 리스트 포함 여부 dept_id IN (10, 20)
BETWEEN 범위 조건 (포함) salary BETWEEN 3000 AND 4000
EXISTS 서브쿼리 결과 존재 여부 WHERE EXISTS (SELECT ... )