SQL의 LIKE 절은 데이터베이스에서 문자열 패턴 매칭을 수행하는 데 사용되는 조건절입니다. WHERE 절과 함께 사용하여 특정 패턴과 일치하는 데이터를 검색할 수 있습니다. 주로 부분 문자열 검색에 활용되며, 와일드카드(wildcard) 문자를 사용하여 유연한 패턴 매칭이 가능합니다.
LIKE 절의 기본 구조
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
- column_name: 패턴 매칭을 수행할 열의 이름입니다.
- pattern: 일치 여부를 확인할 문자열 패턴입니다. 와일드카드 문자를 포함할 수 있습니다.
와일드카드 문자
LIKE 절에서 사용할 수 있는 주요 와일드카드 문자는 다음과 같습니다.
- % (퍼센트 기호)
- 0개 이상의 임의의 문자와 일치합니다.
- 예:
- 'a%': a로 시작하는 모든 문자열
- '%a': a로 끝나는 모든 문자열
- '%a%': a를 포함하는 모든 문자열
- _ (언더스코어)
- 임의의 단일 문자와 일치합니다.
- 예:
- 'a_': a로 시작하고 뒤에 하나의 문자가 있는 문자열
- '_a': 두 번째 문자가 a인 문자열
- '_a_': 두 번째 문자가 a이고 총 3개의 문자를 가진 문자열
- 이외의 문자
- 데이터베이스마다 다를 수 있으나, 특정 DBMS에서는 대괄호([])나 캐럿(^) 등을 사용할 수 있습니다. 예를 들어 SQL Server는 특정 범위나 목록을 정의할 수 있습니다.
- [a-c]: a, b, c 중 하나의 문자와 일치
- [^a-c]: a, b, c를 제외한 문자와 일치
- 데이터베이스마다 다를 수 있으나, 특정 DBMS에서는 대괄호([])나 캐럿(^) 등을 사용할 수 있습니다. 예를 들어 SQL Server는 특정 범위나 목록을 정의할 수 있습니다.
실습 예제
1. 이름 검색
다음 테이블이 있다고 가정합니다.
ID Name City
1 | Alice | New York |
2 | Bob | Boston |
3 | Charlie | Chicago |
4 | Dave | Dallas |
5 | Alicea | Denver |
특정 문자로 시작하는 이름 검색
SELECT * FROM users
WHERE Name LIKE 'A%';
- 결과:
| ID | Name | City | |-----|------------|------------| | 1 | Alice | New York | | 5 | Alicea | Denver |
특정 문자로 끝나는 이름 검색
SELECT * FROM users
WHERE Name LIKE '%e';
- 결과:
| ID | Name | City | |-----|------------|------------| | 1 | Alice | New York | | 4 | Dave | Dallas |
특정 문자열을 포함하는 이름 검색
SELECT * FROM users
WHERE Name LIKE '%li%';
- 결과:
| ID | Name | City | |-----|------------|------------| | 1 | Alice | New York | | 3 | Charlie | Chicago |
2. 도시 이름 패턴 매칭
SELECT * FROM users
WHERE City LIKE 'B%';
- 결과:
| ID | Name | City | |-----|------------|------------| | 2 | Bob | Boston |
대소문자 구분
SQL의 LIKE 절은 대소문자를 구분하는지 여부가 데이터베이스에 따라 다릅니다.
- 대소문자 구분하지 않는 경우
- MySQL과 같은 일부 데이터베이스는 기본적으로 대소문자를 구분하지 않습니다.
- 예: 'a%'는 A로 시작하는 문자열도 포함합니다.
- 대소문자 구분하는 경우
- Oracle에서는 기본적으로 대소문자를 구분합니다. 대소문자 구분을 피하려면 UPPER() 또는 LOWER() 함수를 활용해야 합니다.
- 예:
SELECT * FROM users WHERE UPPER(Name) LIKE 'A%';
특수 문자 검색
특수 문자(예: %, _)를 검색하려면 이스케이프 문자를 사용해야 합니다.
이스케이프 예제
테이블 데이터:
ID Note
1 | 50% Off |
2 | 100% Satisfaction |
3 | _Underscore |
% 문자 포함 검색
SELECT * FROM notes
WHERE Note LIKE '%50\%%' ESCAPE '\';
- 결과:
| ID | Note | |-----|------------| | 1 | 50% Off |
_ 문자 포함 검색
SELECT * FROM notes
WHERE Note LIKE '%\_%' ESCAPE '\';
- 결과:
| ID | Note | |-----|------------------| | 3 | _Underscore |
NOT LIKE 절
NOT LIKE를 사용하면 특정 패턴과 일치하지 않는 데이터를 검색할 수 있습니다.
SELECT * FROM users
WHERE Name NOT LIKE 'A%';
- 결과:
| ID | Name | City | |-----|------------|------------| | 2 | Bob | Boston | | 3 | Charlie | Chicago | | 4 | Dave | Dallas |
복합 조건
LIKE 절은 다른 조건과 결합하여 사용할 수 있습니다.
SELECT * FROM users
WHERE Name LIKE 'A%' AND City LIKE '%New%';
- 결과:
| ID | Name | City | |-----|------------|------------| | 1 | Alice | New York |
성능 고려 사항
LIKE 절은 대량의 데이터에서 성능에 영향을 미칠 수 있습니다.
- 와일드카드 위치
- %가 앞에 오는 경우('%text'), 인덱스를 사용하지 못하는 경우가 많아 성능이 저하될 수 있습니다.
- 대체 방법
- 전체 텍스트 검색(Full-Text Search)을 사용하는 것이 더 효율적일 수 있습니다.
- 인덱스 활용
- LIKE 'text%'와 같이 문자열 시작 패턴은 인덱스를 사용할 수 있습니다.
'게으른 개발자의 끄적거림' 카테고리의 다른 글
WAS란 무엇인가? (구조와 기능에 대해서) (0) | 2025.01.05 |
---|---|
Java 스프링 어노테이션이란? (개념 및 정리) (1) | 2024.12.04 |
울트라에디트(UltraEdit) vs 노트패드(Notepad++) (0) | 2024.11.26 |
파일별 용량 줄이는 방법(pdf, 이미지파일, 동영상파일 등) (0) | 2024.11.25 |
HTTP 404 error 해결 방법 (1) | 2024.11.20 |