Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server LIKE 조건 완벽 가이드: 와일드카드 패턴 매칭 사용법

SQL Server(Transact-SQL)의 LIKE 조건은 SELECT, INSERT, UPDATE, DELETE 문의 WHERE 절에서 와일드카드(wildcard)를 사용해 특정 패턴과 일치하는 데이터를 조회할 수 있게 해주는 연산자입니다. 정확한 값이 아니라 패턴으로 문자열을 검색해야 할 때 매우 유용하게 활용됩니다.

LIKE 조건 기본 문법

'표현식' LIKE '패턴' [ ESCAPE '이스케이프_문자' ]

매개변수 설명

expression(표현식): 열(column)이나 필드처럼 문자 데이터를 담고 있는 표현식입니다.

pattern(패턴): 일치 여부를 확인할 문자 패턴입니다. 아래 표의 와일드카드를 조합하여 지정할 수 있습니다.

와일드카드설명
%길이에 상관없는 모든 문자열과 일치 (빈 문자열 포함)
_임의의 한 문자와 일치
[ ]대괄호 안에 지정된 집합에 속한 한 문자와 일치 (예: [abc])
[^]대괄호 안에 지정되지 않은 한 문자와 일치 (예: [^abc]는 a, b, c를 제외한 문자)

ESCAPE 문자(선택 사항): %나 _ 같은 와일드카드를 특수 문자가 아닌 일반 문자(리터럴)로 취급해야 할 때, 해당 문자 앞에 붙여 일시적으로 와일드카드 기능을 해제하는 역할을 합니다.

LIKE 조건 활용 예제

1. % 와일드카드 사용하기

%는 0개 이상의 임의의 문자열을 대체합니다. 예를 들어 성이 'B'로 시작하는 직원을 찾으려면 다음과 같이 작성합니다.

SELECT *
FROM employees
WHERE last_name LIKE 'B%';

%는 문자열 중간에도 사용할 수 있습니다. 아래 쿼리는 이름에 'o'가 포함된 모든 직원을 반환합니다.

SELECT *
FROM employees
WHERE last_name LIKE '%o%';

2. _ 와일드카드 사용하기

_(밑줄)는 정확히 한 글자만 대체합니다. 즉, 길이가 반드시 1인 문자와 일치한다는 점에 유의하세요.

SELECT *
FROM employees
WHERE last_name LIKE 'Ad_m';

이 쿼리는 4글자 이름 중 앞 두 글자가 'Ad'이고 마지막 글자가 'm'인 직원을 찾습니다. 예를 들어 Adam, Adem, Adim, Adom 등이 해당됩니다.

사원번호처럼 숫자 값에도 동일하게 적용할 수 있습니다.

SELECT *
FROM employees
WHERE employee_id LIKE '123_';

이 경우 네 자리 사원번호 중 앞 세 자리가 '123'인 모든 레코드, 즉 1230부터 1239까지 최대 10개의 결과가 반환됩니다.

3. [ ] 와일드카드 사용하기

대괄호 안에는 패턴과 일치시키고 싶은 문자들을 나열합니다.

SELECT *
FROM employees
WHERE first_name LIKE 'Sm[iy]th';

이 쿼리는 5글자 이름 중 앞 두 글자가 'Sm', 마지막 두 글자가 'th'이고 가운데 글자가 'i' 또는 'y'인 직원을 찾습니다. 따라서 Smith나 Smyth가 결과로 나올 수 있습니다.

4. [^] 와일드카드 사용하기

반대로 대괄호 안에 제외할 문자를 지정하면, 그 문자들이 아닌 경우만 일치시킵니다.

SELECT *
FROM employees
WHERE first_name LIKE 'Smy[^iy]th';

앞 두 글자가 'Sm', 마지막 두 글자가 'th'이면서 가운데 글자가 'i'도 'y'도 아닌 5글자 이름을 찾습니다. 예를 들어 Smath, Smeth 등이 해당됩니다.

5. NOT 연산자와 함께 사용하기

NOT 연산자를 LIKE 앞에 붙이면 패턴과 일치하지 않는 데이터를 조회할 수 있습니다. 아래 예제는 성이 'B'로 시작하지 않는 직원을 찾는 방법입니다.

SELECT *
FROM employees
WHERE last_name NOT LIKE 'B%';

6. ESCAPE 문자 사용하기

패턴 비교 시 %나 _를 와일드카드가 아닌 일반 문자로 검색해야 하는 경우가 있습니다. 이때 ESCAPE 절로 이스케이프 문자를 지정하면, 그 뒤에 오는 와일드카드가 리터럴 값으로 처리됩니다. 이스케이프 문자는 반드시 한 글자여야 합니다.

예를 들어 'a%'나 'a_'처럼 % 또는 _가 실제 데이터에 포함된 값을 찾고 싶다면 다음과 같이 작성합니다.

SELECT *
FROM employees
WHERE secret_hint LIKE '123!%455' ESCAPE '!';

이 쿼리는 secret_hint 값이 정확히 '123%455'인 직원을 반환합니다. %가 더 이상 와일드카드로 해석되지 않고 일반 문자로 취급됩니다.

조금 더 복잡한 예제를 살펴보겠습니다.

SELECT *
FROM employees
WHERE secret_hint LIKE 'H%!%' ESCAPE '!';

이 LIKE 조건은 secret_hint가 'H'로 시작하고 '%'로 끝나는 직원을 찾습니다. 예를 들어 'Help%' 같은 값이 해당됩니다.

같은 방식으로 _(밑줄) 문자에도 이스케이프를 적용할 수 있습니다.

SELECT *
FROM employees
WHERE secret_hint LIKE 'H%!_' ESCAPE '!';

이 예제는 secret_hint가 'H'로 시작하고 '_'로 끝나는 직원을 반환합니다. 예를 들어 'Help_' 같은 값이 일치합니다.

정리

LIKE 조건은 %, _, [], [^] 네 가지 와일드카드와 NOT 연산자, ESCAPE 절을 조합하여 다양한 패턴 검색을 가능하게 합니다. 대량의 문자열 데이터에서 원하는 형식의 값을 빠르게 찾아야 할 때 위 예제들을 참고해 LIKE 조건을 적극 활용해 보세요.