LIKE는 텍스트가 패턴과 일치하는지 확인해요. 여기서 %는 임의 길이의 문자열을, _는 정확히 한 글자를 나타내요. 특정 텍스트를 포함하거나, 그 텍스트로 시작하거나 끝나는 값을 찾을 때 사용해요. 예제는 PostgreSQL, MySQL, SQLite, SQL Server에서 동작해요.
LIKE 사용법
LIKE는 값을 패턴과 비교해요. 패턴은 값 전체와 일치해야 하고, 빈 부분은 두 가지 와일드카드로 채워요. %는 0개 이상의 문자와, _는 정확히 한 글자와 일치해요. NOT LIKE는 반대 결과를 반환해요.
expression [NOT] LIKE pattern [ESCAPE escape_character]
-- In SQL Server, LIKE only works in a condition, such as a WHERE clause
SELECT 'Joe Bloggs' LIKE 'Jo%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'J_e%';
-- Output: true
SELECT 'Joe Bloggs' LIKE 'Bloggs';
-- Output: false
마지막 결과가 false인 이유는 와일드카드가 없으면 패턴이 값 전체와 같아야 하기 때문이에요. 쿼리에서 LIKE는 보통 WHERE 절에 들어가요:
-- Input: customers
-- id | name
-- ---+-------------
-- 1 | Joe Bloggs
-- 2 | Jane Doe
-- 3 | Joanna Smith
-- 4 | Bob Jones
SELECT name
FROM customers
WHERE name LIKE 'Jo%';
-- Output:
-- name
-- ------------
-- Joe Bloggs
-- Joanna Smith
알아 둘 규칙
-
PostgreSQL의 LIKE는 대소문자를 구분해요. 다른 데이터베이스는 기본적으로 대소문자를 무시하지만, PostgreSQL에서는
'Smith' LIKE 'smith'가 false예요. 대소문자를 구분하지 않으려면LOWER(name) LIKE '%smith%'처럼 양쪽을 소문자로 바꾸세요. -
NULL은 절대 일치하지 않아요.
NULL LIKE '%'는 true가 아니라 NULL이라서, 컬럼이 NULL인 행은 LIKE와 NOT LIKE 모두에서 빠져요. 이런 행도 포함하려면OR column IS NULL을 추가하세요.
SELECT NULL LIKE '%';
-- Output: NULL
-
%와_를 문자 그대로 찾으려면 이스케이프하세요. 와일드카드 앞에 이스케이프 문자를 붙이고ESCAPE로 지정하세요:
-- Input: discounts
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- 3 | Up to 25% off shoes
-- Without escaping, the % after 50 is a wildcard
SELECT * FROM discounts
WHERE description LIKE '%50%%';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-- 2 | Spend 50, save 10
-- With ESCAPE '\', the \% matches a real percent sign
-- (in MySQL, write ESCAPE '\\': a single backslash escapes the quote)
SELECT * FROM discounts
WHERE description LIKE '%50\%%' ESCAPE '\';
-- Output:
-- id | description
-- ---+---------------------
-- 1 | 50% off winter coats
-
앞에
%가 오면 인덱스를 쓸 수 없어요.LIKE 'INV-2026-%'같은 접두사 검색은 컬럼의 인덱스를 활용할 수 있지만,LIKE '%widget%'는 모든 행을 확인해야 해요. 대량의 텍스트에서 단어를 검색하려면 대신 데이터베이스의 전문 검색(full-text search)을 사용하세요.
대체 문법
다음과 같은 데이터베이스별 추가 기능도 볼 수 있어요:
-- PostgreSQL: ILIKE ignores case
SELECT 'SMITH' ILIKE 'smith';
-- Output: true
-- SQL Server: [ ] in a LIKE pattern matches one character from a set or range
SELECT CASE WHEN 'B12' LIKE '[A-C]%' THEN 'match' ELSE 'no match' END;
-- Output: match
-- MySQL: REGEXP for regular expressions (PostgreSQL uses ~)
SELECT 'A12-345' REGEXP '^A[0-9]{2}-[0-9]{3}$';
-- Output: 1
패턴 없이 텍스트에 특정 문자열이 포함되어 있는지 확인하려면 그 위치를 찾으세요. 문자열이 없으면 결과는 0이에요:
SELECT INSTR('FinTech Corp', 'Tech');
-- Output: 4
-- PostgreSQL: POSITION('Tech' IN 'FinTech Corp')
-- SQL Server: CHARINDEX('Tech', 'FinTech Corp')
SQL Server의 CONTAINS()는 부분 문자열 검사가 아니에요. 전문 인덱스가 필요한 전문 검색 조건자예요.
LIKE는 언제 사용해야 할까요?
값의 일부만 알고 전체는 모를 때 LIKE를 사용하세요. 대부분의 용도는 다음 네 가지 중 하나에 해당해요.
특정 단어가 포함된 텍스트 찾기
단어 양쪽에 %를 붙이세요. '%Tech%'는 더 긴 단어 안에서도 일치하기 때문에 “Tech Solutions Inc”, “FinTech Corp”, “Technology Partners”와 모두 일치해요.
값의 시작이나 끝 일치시키기
접두사를 찾으려면 'INV-2026-%'처럼 끝에만, 접미사를 찾으려면 '%.pdf'나 '%@gmail.com'처럼 앞에만 %를 붙이세요. 인덱스로 속도를 높일 수 있는 건 접두사 검색이에요.
고정된 형식 일치시키기
_는 정확히 한 글자를 나타내므로 패턴으로 값의 형태를 표현할 수 있어요. 전화번호는 '___-___-____', 제품 코드는 'A__-___'처럼요. NOT LIKE와 함께 쓰면 같은 패턴으로 형식에 맞지 않는 값을 찾을 수 있어요.
대소문자 상관없이 검색하기
사용자는 “smith”라고 입력하는데 데이터에는 “Smith”로 저장되어 있죠. LOWER()로 양쪽을 소문자로 바꾸면 PostgreSQL에서도 대소문자를 무시하고 검색해요.
LIKE 실전 예제
여러 단어 중 하나로 검색하기
OR로 패턴을 조합하면 그중 하나라도 일치하는 제품을 찾을 수 있어요:
-- Input: products
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 3 | Desk lamp
-- 4 | Desktop computer
SELECT * FROM products
WHERE name LIKE '%laptop%'
OR name LIKE '%notebook%'
OR name LIKE '%computer%';
-- Output:
-- id | name
-- ---+-----------------
-- 1 | Gaming laptop
-- 2 | Spiral notebook
-- 4 | Desktop computer
올해 송장 찾기
송장 번호는 유형과 연도로 시작하므로, 접두사 패턴으로 2026년 송장만 골라내고 대변표(credit note)는 건너뛸 수 있어요:
-- Input: invoices
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2025-0981 | Contoso
-- CN-2026-0003 | Northwind
-- INV-2026-0040 | Fabrikam
SELECT * FROM invoices
WHERE invoice_no LIKE 'INV-2026-%';
-- Output:
-- invoice_no | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2026-0040 | Fabrikam
형식이 잘못된 전화번호 찾기
글자마다 _를 하나씩 써서 기대하는 형식을 표현하고, NOT LIKE로 정리해야 할 행을 찾아요:
-- Input: customers
-- name | phone
-- ----------+---------------
-- Ana Lima | 555-010-1234
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
-- Dev Rao | 555-010-5555
SELECT name, phone FROM customers
WHERE phone NOT LIKE '___-___-____';
-- Output:
-- name | phone
-- ----------+---------------
-- Ben Ode | (555) 010-9876
-- Cara Diaz | 5550104321
대소문자 상관없이 성 찾기
양쪽을 소문자로 바꾸면 대문자나 소문자로 입력된 이름도 모두 찾을 수 있어요:
-- Input: customers
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 3 | Dana Jones
-- 4 | carla smith
SELECT * FROM customers
WHERE LOWER(name) LIKE '%smith%';
-- Output:
-- id | name
-- ---+------------
-- 1 | Anna Smith
-- 2 | BEN SMITH
-- 4 | carla smith
LIKE 관련 추가 자료
이 블로그의 글:
- SQL SUBSTRING 가이드: 찾은 문자열에서 일부를 추출하기
- SQL 같지 않음 가이드: NOT LIKE와 행을 제외하는 다른 방법들
- SQL CASE 문 가이드: LIKE 패턴을 포함한 조건으로 행에 라벨 붙이기
- PostgreSQL에서 인덱스 만들기: 접두사 검색을 빠르게 해 주는 인덱스
- MySQL CREATE INDEX 튜토리얼: MySQL에서 같은 작업 하기
공식 문서:
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 기존 SQL 작업 방식을 완전히 바꿔 놓았어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 돼요."