📘꼬부기의 성장서재/이기적SQLD 기출문제

WHERE절

서화 2026. 3. 29. 15:07

✔️ 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