WHERE 절은 행을 필터링하여 조건에 맞는 행만 반환합니다. 전체 테이블이 아니라 특정 데이터를 가져오는 데 근본적이며, 풍부한 연산자와 조건을 지원합니다.
연산자를 이용한 기본 필터링
users age ;
users country ;
users age active ;
users country country ;
users active;
WHERE 절은 행을 필터링하여 조건에 맞는 행만 반환합니다. 전체 테이블이 아니라 특정 데이터를 가져오는 데 근본적이며, 풍부한 연산자와 조건을 지원합니다.
users age ;
users country ;
users age active ;
users country country ;
users active;
조건은 비교 연산자를 사용하며 AND/OR/NOT으로 결합합니다(복잡한 조건에서는 괄호로 우선순위를 제어).
-- BETWEEN — 범위 (양 끝 포함)
WHERE age BETWEEN 18 AND 65
-- IN — 목록의 값 중 하나와 매칭
WHERE country IN ('US', 'CA', 'UK')
-- LIKE — 패턴 매칭 (% = 임의 문자열, _ = 한 글자)
WHERE name LIKE 'A%' -- A로 시작
WHERE email LIKE '%@gmail.com' -- @gmail.com으로 끝남
WHERE code LIKE '_X_' -- 가운데가 X인 정확히 3글자
BETWEEN(범위), IN(값 목록), LIKE(%/_ 와일드카드를 이용한 패턴 매칭)는 흔한 필터링 요구를 간결하게 처리합니다.
-- ❌ 틀림 — =로는 NULL과 비교할 수 없음 (NULL은 "알 수 없음")
WHERE email = NULL -- 아무것도 반환하지 않음 (절대 참이 아님)
-- ✅ IS NULL / IS NOT NULL 사용
WHERE email IS NULL
WHERE email IS NOT NULL
결정적: NULL은 "알 수 없음"을 나타내며, =로 비교할 수 없습니다(email = NULL은 결코 참이 아님). 반드시 **IS NULL/IS NOT NULL**을 사용해야 합니다 — 흔한 실수입니다.
index가 걸린 컬럼에 대한 WHERE 조건은 빠름; index가 없는 컬럼은 데이터베이스가
모든 행을 스캔해야 함. 자주 필터링되는 컬럼에는 index를 추가할 것.
또한: 컬럼에 함수를 적용하면 (WHERE UPPER(name) = 'X') index 사용을 막을 수 있음.
WHERE 절은 조회에 근본적입니다. 전체 테이블이 아니라 특정 데이터를 가져오는 방법이며, 사실상 모든 실제 쿼리에 필요하므로, 이해하는 것은 필수적인 일상 지식입니다.
연산자(비교, 적절한 우선순위의 AND/OR/NOT)와 유용한 특수 연산자(범위용 BETWEEN, 값 목록용 IN, 패턴 매칭용 LIKE)를 아는 것은 필터링 요구의 전 영역을 다룹니다.
특히 중요하고 자주 틀리는 점은 NULL 처리입니다: NULL은 "알 수 없음"을 의미하므로 =로 비교할 수 없고(WHERE col = NULL이 조용히 아무것도 반환하지 않는 빈번한 버그), IS NULL/IS NOT NULL을 써야 합니다 — 이를 이해하면 흔하고 혼란스러운 오류를 예방합니다.
또한 성능 연결을 아는 것도 가치 있습니다: index가 걸린 컬럼 필터링은 빠른 반면 index가 없는 컬럼은 모든 행 스캔이 필요하고(따라서 자주 필터링되는 컬럼은 index의 이득을 봄), WHERE에서 컬럼에 함수를 적용하면 index 사용이 막힐 수 있습니다.
WHERE로 데이터를 필터링하는 것은 가장 흔한 데이터베이스 작업 중 하나이고, 연산자, NULL 처리(빈번한 함정), index/성능 영향을 이해하는 것이 올바르고 효율적인 쿼리 작성의 기초이므로, WHERE 절을 숙달하는 것은 SQL 작업에 핵심적이고 반드시 알아야 할 지식입니다.