본문 바로가기
IT 공부/SQL

SQL - (13) WHERE절

by Happy_Bin 2025. 7. 31.

🎯 조건절, 데이터의 날을 세우다

비교연산자와 SQL 조건문의 본질

SQL에서 조건절은 ‘필터’가 아니다.
데이터에 칼을 대는 일이고, 분석 대상의 윤곽을 결정하는 ‘선택의 논리’다.


3.4.1 비교 연산자 — 조건의 가장 낮은 레벨

SQL에서 비교 연산자는 특정 값들이 같은지, 혹은 어느 쪽이 더 크거나 작은지 판단한다.
이를 통해 참(True) 또는 거짓(False)을 반환하고, 조건을 만족하는 행만 연산 대상이 된다.
※ 비교는 단순해 보이지만, 데이터 흐름을 결정하는 매우 결정적인 구조다.

① 단일행 비교 연산자

두 값 간의 1:1 비교. 주로 정제된 컬럼 값 또는 상수 값과 비교할 때 사용.

= 두 값이 같으면 참
< 왼쪽 값이 작으면 참
<= 왼쪽 값이 작거나 같으면 참
> 왼쪽 값이 크면 참
>= 왼쪽 값이 크거나 같으면 참
IS NULL 값이 NULL이면 참
 

❗ NULL은 일반 비교연산자(=, !=)로는 절대 비교할 수 없다.
IS NULL, IS NOT NULL을 사용하지 않으면 의도한 조건이 누락된다.
→ 이로 인해 발생하는 오류는 실무에서 가장 흔한 ‘조용한 버그’ 중 하나다.


② 다중행 비교 연산자

서브쿼리 결과가 여러 행일 때, 그 결과 전체를 비교 대상으로 삼는다.
복잡한 조건 흐름을 처리할 때 반드시 필요한 구조.

IN 리스트 중 하나라도 일치하면 참
EXISTS 서브쿼리 결과가 1건 이상 존재하면 참
ALL 리스트 모든 항목과 비교하여 모두 참이면 참
ANY 리스트 중 하나와 비교하여 하나라도 참이면 참
 

💡 ALL, ANY는 단일 비교 연산자와 조합해서 사용해야 한다.

WHERE price > ALL (SELECT price FROM product WHERE category = 'A')

→ category A의 모든 상품보다 비싼 상품만 조회.


3.4.2 부정 비교 연산자 — 조건을 뒤집는 방식

조건을 부정해야 할 때는 기존 연산자에 NOT을 결합하거나, 별도의 부정형을 사용한다.

① 단일행 부정 연산자

!=, <>, ^= 두 값이 서로 다르면 참
IS NOT NULL NULL이 아니면 참
 

💡 부정형 연산자도 NULL 비교 시에는 반드시 IS NOT NULL을 사용해야 한다.
일반적인 != NULL은 무조건 false로 처리된다.


② 다중행 부정 연산자

NOT IN 리스트 중 일치하는 값이 하나도 없으면
NOT EXISTS 서브쿼리 결과가 0건일 경우
 

📌 ALL, ANY에는 NOT을 바로 붙일 수 없고, 조건 전체를 감싸는 방식으로 부정을 표현한다.

-- 잘못된 예
WHERE NOT ANY (…)

-- 올바른 방식
WHERE NOT (price < ANY (...))

3.4.3 SQL 연산자 — 범위와 패턴을 처리하는 표현들

일정 범위에 속하거나, 특정 패턴에 부합하는 데이터를 필터링할 때 사용한다.

BETWEEN A AND B A 이상 B 이하일 경우 참
LIKE 문자열 패턴 매칭 (%, _ 등 패턴 문자 사용)
 
WHERE name LIKE '김%'

→ ‘김’으로 시작하는 이름만 필터링.


3.4.4 부정 SQL 연산자 — 위 연산의 반대 조건

연산자의미
NOT BETWEEN A AND B A 미만 혹은 B 초과인 경우 참
NOT LIKE 패턴과 일치하지 않을 경우 참
 

LIKE와 NOT LIKE는 문자열 전처리가 중요한 조건이다.
공백, 대소문자, 특수문자 등이 패턴 일치를 방해하는 경우가 많기 때문에 TRIM / LOWER와 함께 쓰는 것이 안전하다.


3.4.5 논리연산자 — 조건 간 연결의 논리

비교나 SQL 연산자들을 조합해 복합적인 조건식을 만들 때 사용한다.

AND 모든 조건이 참일 경우 참
OR 하나라도 참이면 참
NOT 조건의 참/거짓을 반전
 
WHERE age > 30 AND (region = '서울' OR region = '부산')

→ 괄호 사용으로 OR 조건의 우선순위를 명확히 제어할 수 있다.


📮 BeanSight | 해피빈(HappyBin)

데이터의 본질은 식별에서 시작된다.
관계는 흐름을 만들고, 식별자는 구조를 완성한다.

'IT 공부 > SQL' 카테고리의 다른 글

SQL - (15) ORDER BY 절과 조인  (4) 2025.08.04
SQL - (14) GROUP BY, HAVING절  (2) 2025.08.01
SQL - (12) 함수  (2) 2025.07.30
SQLD - (11) SELECT 문  (1) 2025.07.29
SQLD - (10) 관계형 데이터베이스 개요  (1) 2025.07.26