SQL Wildcards
SQL 와일드카드 (Wildcards): 패턴 매칭을 위한 특수 문자
- *SQL 와일드카드(Wildcards)**는 LIKE 연산자와 함께 사용하여 문자열에서 특정 패턴을 검색할 때 유용하게 쓰입니다. 와일드카드는 SQL 쿼리에서 하나 이상의 문자를 대체하는 특수 문자로, 데이터 검색 시 매우 유연하게 사용할 수 있습니다. 이를 통해 문자열의 시작, 끝, 또는 중간에 특정 패턴이 있는 값을 찾을 수 있습니다.
1. 주요 SQL 와일드카드
SQL 와일드카드는 주로 두 가지가 있습니다:
- %: 0개 이상의 임의의 문자와 일치합니다.
- _: 정확히 1개의 임의의 문자와 일치합니다.
이 와일드카드들은 주로 LIKE 연산자와 함께 사용됩니다.
2. % 와일드카드
% 와일드카드는 0개 이상의 임의의 문자를 대체합니다. 즉, 특정 문자열의 시작, 중간, 끝에 위치한 패턴을 찾을 수 있습니다.
예제:
'A%'
: 'A'로 시작하는 모든 값을 찾습니다.'%B'
: 'B'로 끝나는 모든 값을 찾습니다.'%C%'
: 'C'가 포함된 모든 값을 찾습니다.
예제 1: 'J'로 시작하는 이름 찾기
SELECT name
FROM employees
WHERE name LIKE 'J%';
이 쿼리는 이름이 'J'로 시작하는 모든 직원을 반환합니다.
결과 예시:
name
John
Jane
Jack
예제 2: 'e'로 끝나는 이름 찾기
SELECT name
FROM employees
WHERE name LIKE '%e';
이 쿼리는 이름이 'e'로 끝나는 모든 직원을 반환합니다.
결과 예시:
name
Jane
Alice
Steve
예제 3: 'an'이 포함된 이름 찾기
SELECT name
FROM employees
WHERE name LIKE '%an%';
이 쿼리는 이름에 'an'이 포함된 모든 직원을 반환합니다.
결과 예시:
name
Jane
Andrew
Hannah
3. _ 와일드카드
_ 와일드카드는 정확히 1개의 임의의 문자를 대체합니다. 이 와일드카드를 사용하여 특정 길이의 패턴을 찾을 수 있습니다.
예제:
'A_'
: 'A'로 시작하고 뒤에 1개의 문자가 있는 값을 찾습니다.'B__'
: 'B'로 시작하고 뒤에 2개의 문자가 있는 값을 찾습니다.
예제 1: 정확히 3글자인 이름 찾기
SELECT name
FROM employees
WHERE name LIKE '___';
이 쿼리는 정확히 3글자로 이루어진 이름을 가진 모든 직원을 반환합니다.
결과 예시:
name
Tom
Jim
Ann
예제 2: 'J'로 시작하고 두 번째 문자가 'o'인 이름 찾기
SELECT name
FROM employees
WHERE name LIKE 'Jo_';
이 쿼리는 이름이 'Jo'로 시작하고, 세 번째 문자가 1개 더 있는 모든 직원을 반환합니다.
결과 예시:
name
John
Joel
4. NOT LIKE와 와일드카드 결합
NOT LIKE 연산자는 특정 패턴과 일치하지 않는 데이터를 검색할 때 사용됩니다.
예제: 'J'로 시작하지 않는 이름 찾기
SELECT name
FROM employees
WHERE name NOT LIKE 'J%';
이 쿼리는 이름이 'J'로 시작하지 않는 모든 직원을 반환합니다.
결과 예시:
name
Alice
Bob
Charlie
5. 숫자 데이터와 와일드카드 사용
LIKE 연산자와 와일드카드는 숫자형 데이터가 문자열로 저장된 경우에도 사용할 수 있습니다. 예를 들어, 전화번호나 우편번호가 문자열로 저장되어 있다면 와일드카드를 사용해 검색할 수 있습니다.
예제: '2'로 시작하는 전화번호 찾기
SELECT phone
FROM employees
WHERE phone LIKE '2%';
이 쿼리는 전화번호가 '2'로 시작하는 모든 직원을 반환합니다.
결과 예시:
phone
202-555-1234
213-555-9876
6. 특수 문자를 포함한 검색 (ESCAPE 사용)
ESCAPE 문법을 사용하면 **%**나 _ 같은 와일드카드를 문자 그대로 검색할 수 있습니다.
예제: '%' 문자를 포함한 값을 검색
SELECT comment
FROM feedback
WHERE comment LIKE '%\\\\%%' ESCAPE '\\\\';
이 쿼리는 문자열에 실제 % 문자가 포함된 모든 피드백을 반환합니다.
7. SQL 와일드카드와 대소문자 구분
SQL에서 LIKE 연산자는 기본적으로 대소문자를 구분하지 않습니다(대부분의 SQL 구현에서). 즉, **'A%'**는 'A'와 'a'로 시작하는 값을 모두 찾습니다.
예제: 'a' 또는 'A'로 시작하는 이름 찾기
SELECT name
FROM employees
WHERE name LIKE 'a%';
이 쿼리는 'a'나 'A'로 시작하는 모든 직원을 반환합니다.
결과 예시:
name
Alice
Andrew
8. 실전 예제
예제 1: 'S'로 시작하고 'e'로 끝나는 부서명 찾기
SELECT department
FROM departments
WHERE department LIKE 'S%e';
이 쿼리는 부서명이 'S'로 시작하고 'e'로 끝나는 부서를 반환합니다.
예제 2: 전화번호가 '-' 문자를 포함하는 값 찾기
SELECT phone
FROM employees
WHERE phone LIKE '%-%';
이 쿼리는 전화번호에 '-' 문자가 포함된 값을 반환합니다.
예제 3: 정확히 4글자인 이름 찾기
SELECT name
FROM employees
WHERE name LIKE '____';
이 쿼리는 정확히 4글자로 구성된 이름을 반환합니다.
9. 요약
SQL 와일드카드는 LIKE 연산자와 함께 문자열에서 특정 패턴을 찾는 데 매우 유용합니다. % 와일드카드는 0개 이상의 문자를 대체하고, _ 와일드카드는 정확히 1개의 문자를 대체합니다. 이 두 와일드카드는 문자열 검색을 보다 유연하게 만들어, 문자열의 시작, 중간, 끝에 특정 패턴이 있는 값을 찾는 데 자주 사용됩니다. NOT LIKE와 ESCAPE 키워드와 결합하여 더욱 복잡한 검색을 수행할 수 있습니다.