LIKE 패턴 검색으로 부분 일치 조건을 작성하고, IS NULL / IS NOT NULL로 빈 값을 정확히 처리합니다.
🎯 학습 목표
이 강을 마치면 문자열의 일부만 알고 있을 때 LIKE와 와일드카드로 패턴 검색을 수행할 수 있습니다. 또한 SQL에서 가장 오해하기 쉬운 개념인 NULL을 정확히 이해하고, IS NULL과 IS NOT NULL로 빈 값을 올바르게 처리할 수 있게 됩니다. 5강의 WHERE 조건과 결합하면 실무에서 필요한 거의 모든 필터링 조건을 표현할 수 있습니다.
🔍 LIKE — 패턴으로 검색하기
이 섹션에서는 문자열의 일부와 일치하는 행을 찾는 LIKE 연산자를 살펴보겠습니다.
WHERE grade = 'VIP'처럼 정확한 값을 비교하는 것과 달리, "이름에 '김'이 들어가는 회원", "이메일이 'gmail'로 끝나는 회원"처럼 부분적인 패턴으로 검색할 때 LIKE를 사용합니다.
LIKE에서 사용하는 와일드카드(Wildcard)는 두 가지입니다.
| 와일드카드 | 의미 | 예시 |
|---|---|---|
| % | 0개 이상의 임의 문자 | '김%' → 김으로 시작하는 모든 값 |
| _ | 정확히 1개의 임의 문자 | '김_준' → 김◯준 (가운데 한 글자) |
이름이 '김'으로 시작하는 회원을 찾아봅니다.
SELECT name, email
FROM members
WHERE name LIKE '김%';
결과에 '김민준'이 나타납니다. '김%'는 '김' 뒤에 어떤 문자가 몇 개든 상관없다는 의미입니다. '김', '김민준', '김씨입니다'도 모두 해당됩니다.
이번에는 이메일 주소에 'example'이 포함된 회원을 찾습니다.
SELECT name, email
FROM members
WHERE email LIKE '%example%';
%example%는 앞뒤 어디에든 'example'이 포함되어 있으면 됩니다. 샘플 데이터의 이메일이 모두 example.com 도메인이므로 5명 전원이 나타납니다.
도서 제목에 '데이터'가 들어간 책을 찾아봅니다.
SELECT title, category
FROM books
WHERE title LIKE '%데이터%';
'SQL 첫걸음'—제목에 '데이터'가 없으니 해당 없고, 실제 결과는 없거나 다를 수 있습니다. 저자에 패턴 검색을 적용해 봅니다.
SELECT title, author
FROM books
WHERE author LIKE '한%';
'한강'이 저자인 '채식주의자'가 나타납니다.
밑줄(_) 와일드카드는 정확히 한 글자를 대체합니다. 이름이 세 글자이고 '민'이 가운데 들어가는 회원을 찾으려면 다음과 같이 씁니다.
SELECT name
FROM members
WHERE name LIKE '_민_';
'김민준'이 해당됩니다. 첫 번째 _는 '김', 두 번째 _는 '준'을 대체합니다.
LIKE는 대소문자를 구분하는지 여부가 DBMS마다 다릅니다. SQLite는 기본적으로 ASCII 문자(a-z)에 대해 대소문자를 구분하지 않지만, 한글에서는 구분합니다. MySQL은 기본적으로 대소문자를 구분하지 않습니다. PostgreSQL은 대소문자를 구분하는 LIKE와 구분하지 않는 ILIKE를 별도로 제공합니다.
⚠️ LIKE 사용 시 주의사항
이 섹션에서는 LIKE 사용 시 성능과 정확성 관련 주의사항을 살펴보겠습니다.
LIKE는 강력하지만 성능 면에서 주의가 필요합니다. LIKE '%값%'처럼 앞에 %가 붙으면 인덱스를 사용할 수 없습니다. 인덱스는 22강에서 자세히 다루지만, 간단히 말해 "책의 색인"처럼 검색 속도를 높여주는 장치입니다. %로 시작하는 패턴은 처음부터 끝까지 모든 행을 검사해야 하므로, 행 수가 많을수록 매우 느려집니다.
실무에서는 LIKE '값%'(뒤에만 %)처럼 시작 패턴을 쓰거나, 전문 검색(Full-text search) 기능을 활용하는 것이 권장됩니다. 입문 단계에서는 패턴 검색의 개념을 익히고, 성능 이슈는 규모가 커질 때 고민하면 됩니다.
또한 LIKE에서 실제로 %나 _ 문자 자체를 검색하고 싶다면 이스케이프가 필요합니다. LIKE '50%' ESCAPE ''처럼 ESCAPE 절을 사용하면 됩니다. 하지만 이런 상황은 흔하지 않으므로 존재한다는 것만 알아두면 됩니다.
🚫 NULL — 빈 값의 진실
이 섹션에서는 SQL에서 가장 오해하기 쉬운 개념인 NULL을 살펴보겠습니다.
NULL은 "값이 없음" 또는 "알 수 없음"을 나타냅니다. 빈 문자열(''), 숫자 0과는 완전히 다릅니다. NULL은 어떤 값인지 모르기 때문에, 어떤 비교 연산을 해도 결과가 TRUE가 되지 않습니다.
NULL의 가장 중요한 특성은 NULL = NULL이 TRUE가 아니라는 점입니다. "알 수 없는 값"과 "알 수 없는 값"이 같은지 알 수 없기 때문입니다. 이 때문에 NULL을 비교할 때는 = 대신 특별한 키워드를 써야 합니다.
샘플 데이터에 NULL을 포함한 행을 추가해 실습해 보겠습니다.
INSERT INTO members VALUES
(6, '홍길동', 'gildong@example.com', NULL, '2024-06-10');
6번 회원 홍길동은 grade가 NULL입니다(등급 미설정 상태). 이제 NULL 처리를 실습합니다.
grade가 NULL인 회원을 찾으려면 IS NULL을 씁니다.
SELECT name, grade
FROM members
WHERE grade IS NULL;
홍길동 한 명이 나타납니다. WHERE grade = NULL이라고 쓰면 아무것도 나타나지 않습니다. =로는 NULL을 비교할 수 없기 때문입니다.
반대로 grade가 설정된(NULL이 아닌) 회원을 찾으려면 IS NOT NULL을 씁니다.
SELECT name, grade
FROM members
WHERE grade IS NOT NULL;
NULL인 홍길동을 제외한 5명이 나타납니다.
NULL을 다른 값으로 대체해서 보여주고 싶을 때는 COALESCE() 함수를 사용합니다. COALESCE는 나열한 값 중 첫 번째로 NULL이 아닌 값을 반환합니다.
SELECT name,
COALESCE(grade, '등급 미설정') AS 등급
FROM members;
홍길동의 등급이 NULL 대신 '등급 미설정'으로 표시됩니다. 나머지 회원들은 원래 등급이 그대로 나타납니다. COALESCE는 보고서 출력이나 화면 표시에서 NULL을 기본값으로 대체할 때 매우 자주 사용됩니다.
🔗 패턴·NULL과 AND/OR 조합
이 섹션에서는 LIKE와 IS NULL을 5강의 AND/OR와 결합한 실전 조건을 살펴보겠습니다.
VIP 등급이면서 이름에 '김'이 포함된 회원을 찾습니다.
SELECT name, grade, email
FROM members
WHERE grade = 'VIP'
AND name LIKE '김%';
'김민준' 한 명이 나타납니다.
이메일이 'example.com'으로 끝나거나 등급이 설정되지 않은 회원을 찾습니다.
SELECT name, grade, email
FROM members
WHERE email LIKE '%example.com'
OR grade IS NULL;
example.com 이메일을 가진 회원(기존 5명)과 grade가 NULL인 홍길동이 나타납니다. 홍길동은 example.com 이메일이기도 하므로 중복 없이 나타납니다(OR은 한 번만 포함).
📝 핵심 요약
이번 강에서 배운 내용을 정리하겠습니다.
| 문법 | 역할 | 예시 |
|---|---|---|
| LIKE '패턴' | 문자열 패턴 검색 | WHERE name LIKE '김%' |
| % 와일드카드 | 0개 이상 임의 문자 대체 | '%example%' → example 포함 |
| _ 와일드카드 | 정확히 1개 임의 문자 대체 | '_민_' → 3글자 가운데 민 |
| IS NULL | NULL인 행 조회 | WHERE grade IS NULL |
| IS NOT NULL | NULL이 아닌 행 조회 | WHERE grade IS NOT NULL |
| COALESCE(열, 기본값) | NULL을 다른 값으로 대체 | COALESCE(grade, '미설정') |
LIKE와 NULL 처리는 실무 쿼리에서 빠질 수 없는 핵심 기술입니다. 특히 NULL은 초보자가 자주 실수하는 부분이므로 IS NULL / IS NOT NULL 사용법을 확실히 익혀두세요. 다음 7강에서는 결과를 원하는 순서로 정렬하는 ORDER BY와 행 수를 제한하는 LIMIT를 배웁니다. "가격이 비싼 순서대로 상위 3개 도서", "최근 주문 5건"처럼 실용적인 결과를 만들 수 있게 됩니다.
관련 주제
- LIKE 패턴 검색
- 와일드카드 % _
- IS NULL
- IS NOT NULL
- 부분 일치 조건
- 개발·프로그래밍
- 개발·프로그래밍 강의
- SQL·데이터베이스 입문 24강
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
SQL·데이터베이스 입문 24강
이 강의가 속한 시리즈는 총 8강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
