✔️ WHERE절이란?
WHERE절은 테이블에서 내가 원하는 행만 조건에 맞게 걸러서 조회할 수 있게 해주는 SQL 문법이다.
SELECT, FROM과 함께 자주 사용되고, 실무에서도 정말 많이 쓰이는 기본 문법이다. 결국 전체 데이터를 다 보는 게 아니라, 필요한 데이터만 골라서 가져오기 위해 사용하는 절이라고 보면 된다.
✔️ WHERE절이 필요한 이유
WHERE절이 필요한 이유는 불필요한 데이터를 줄이고, 원하는 결과만 빠르게 조회하기 위해서다.
예를 들어 유저 정보가 100만 건 있는 테이블에서 특정 한 사람의 정보만 찾고 싶다면, WHERE 없이 전체를 다 보는 방식은 비효율적이다. 반면 WHERE를 사용하면 조건에 맞는 데이터만 바로 추출할 수 있다
✔️ SQL 실행 순서와 WHERE절
SQL은 작성 순서와 실제 실행 순서가 다르다.
보통 우리는 SELECT → FROM → WHERE 순서로 적지만, 실제 실행은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 진행된다.
이 부분이 중요한 이유는 WHERE절이 먼저 조건에 맞는 행을 걸러낸 뒤, 마지막에 SELECT가 필요한 컬럼만 보여준다 따라서 SQL은 먼저 테이블을 가져오고, 그 다음 조건으로 데이터를 줄이고, 마지막에 보여줄 컬럼을 선택하는 흐름이다
✔️ WHERE절 기본 사용 방식
SELECT 컬럼명
FROM 테이블명
WHERE 조건식;
예시로 개발팀 소속 직원만 조회하고 싶다면
SELECT EMP_ID, EMP_NAME, DEPT
FROM EMPLOYEE
WHERE DEPT = '개발팀';
이렇게 작성할수 있다 이 쿼리는 EMPLOYEE 테이블에서 전체 데이터를 가져오는 것이 아니라, DEPT가 '개발팀'인 행만 먼저 찾고, 그중에서 EMP_ID, EMP_NAME, DEPT 컬럼만 보여준다.
✔️ 비교 연산자
WHERE절에서는 비교 연산자를 사용해서 조건을 줄 수 있다.
=, !=, >, <, >=, <= 같은 기호를 사용한다. 이 연산자들은 값이 조건에 맞는지 비교할 때 사용한다.
예시) 급여가 5000이상인 직원만 조회하기
SELECT EMP_ID, EMP_NAME, SALARY
FROM EMPLOYEE
WHERE SALARY >= 5000;
SALARY가 5000 이상인 데이터만 먼저 걸러지고, 그 결과에 맞는 값이 출력된다 여기서도 핵심은 WHERE가 먼저 조건에 맞는 행을 고른 뒤, SELECT가 보여줄 컬럼을 정한다
✔️ 논리 연산자 AND, OR
AND는 앞의 조건과 뒤의 조건이 모두 참일 때만 결과를 반환한다
AND
예시) 개발팀이면서 여성인 직원만 조회하기
SELECT EMP_ID, EMP_NAME, DEPT, SALARY
FROM EMPLOYEE
WHERE DEPT = '개발팀'
AND GENDER = '여';
개발팀이면서 여성인 사람의 결과만 출력된다
OR
OR는 여러 조건 중 하나라도 참이면 결과를 반환한다
예시) 영업팀 또는 마케팅팀 직원 조회하기
SELECT EMP_ID, EMP_NAME, DEPT
FROM EMPLOYEE
WHERE DEPT = '영업팀'
OR DEPT = '마케팅팀';
영업팀과 마케팅팀에 속한 직원이 모두 출력된다
📌 AND와 OR의 우선순위
AND는 OR보다 우선순위가 높다. 그래서 괄호 없이 같이 쓰면 AND가 먼저 실행된다.
예시)
SELECT EMP_ID, DEPT, SALARY
FROM EMPLOYEE
WHERE DEPT = '인사팀'
OR DEPT = '개발팀'
AND SALARY >= 4000;
이 쿼리는 “인사팀 또는 개발팀이면서 급여가 4000 이상”처럼 보일 수 있지만, 실제로는 AND가 먼저 실행된다
해석하기
WHERE DEPT = '인사팀'
OR (DEPT = '개발팀' AND SALARY >= 4000)
그래서 개발팀이면서 급여 4000 이상인 직원과, 인사팀 전체가 같이 조회된다. 이 때문에 인사팀인데 급여가 4000 미만인 직원도 포함될 수 있다.
내가 원하는 조건이 “인사팀 또는 개발팀 중에서, 급여가 4000 이상인 사람”이라면 괄호로 먼저 묶어줘야 한다.
SELECT EMP_ID, DEPT, SALARY
FROM EMPLOYEE
WHERE (DEPT = '인사팀' OR DEPT = '개발팀')
AND SALARY >= 4000;
조건이 여러 개 섞이면 SQL이 어떤 순서로 해석하는지 확인해야 하고 괄호를 써서 명확하게 표현하는 게 좋다
✔️ 부정 연산자 NOT
부정 연산자는 조건의 참과 거짓을 반대로 바꿔주는 역할을 한다
예시) 개발팀 직원이 아닌 사람을 조회하기
SELECT EMP_ID, EMP_NAME, DEPT
FROM EMPLOYEE
WHERE DEPT != '개발팀';
이렇게하면 개발팀을 제외한 모든 팀의 직원들이 조회된다
WHERE DEPT != '개발팀'
WHERE DEPT <> '개발팀'
WHERE DEPT ^= '개발팀'
WHERE NOT DEPT = '개발팀'
표시는 달라도 결국 다 다같지 않다는 의미다
✔️ NULL 연산자
NULL은 값이 비어 있는 상태를 의미한다.
NULL은 일반 값처럼 =으로 비교할 수 없다. 그래서 NULL 전용 연산자인 IS NULL, IS NOT NULL을 사용해야 한다.
IS NULL
값이 비어 있는 데이터를 조회할 때 사용한다.
예시) 퇴사일이 없는 아직 재직 중인 직원을 조회하기
SELECT EMP_ID, EMP_NAME, RETIRE_DATE
FROM EMPLOYEE
WHERE RETIRE_DATE IS NULL;
IS NOT NULL
값이 들어 있는 데이터를 조회할 때 사용한다.
예시) 퇴사한 직원만 보기
SELECT EMP_ID, EMP_NAME, RETIRE_DATE
FROM EMPLOYEE
WHERE RETIRE_DATE IS NOT NULL;
NULL 조건과 다른 조건 함께 사용하기
NULL 조건도 다른 조건과 함께 사용할 수 있다.
예시) 재직 중이면서 급여가 5000 이상인 직원을 조회하기
SELECT EMP_ID, EMP_NAME, RETIRE_DATE, SALARY
FROM EMPLOYEE
WHERE RETIRE_DATE IS NULL
AND SALARY >= 5000;'📘꼬부기의 성장서재 > 이기적SQLD 기출문제' 카테고리의 다른 글
| ORDER BY절 (0) | 2026.03.31 |
|---|---|
| GROUP BY, HAVING절 (0) | 2026.03.30 |
| 함수(Function) (0) | 2026.03.28 |
| 본질식별자 VS 인조식별자 (0) | 2026.03.24 |
| 서브쿼리 (0) | 2026.03.06 |