충분히 쌓여가는
07 와일드카드로 문자열 검색 본문
쿼리는 정확하게 조건을 입력해 사용한다.
어떤 경우에는 자신이 검색할 대상을 몰라서 일부만 검색하기도 한다.
이때 LIKE를 사용한다.
LIKE
와일드 카드로 지정한 패턴과 일치하는 문자열, 날짜, 시간 등을 검색할 수 있다.
LIKE의 기본 형식
SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]
LIKE와 %로 특정 문자열을 포함하는 문자열 검색
특정 문자열을 포함하는 문자열을 검색할 때는 %를 사용한다.
%의 위치에 따라 특정 문자열이 포함된 문자열을 검색할 수 있다.
A% | A로 시작하는 모든 문자열 |
%A | A로 끝나는 모든 문자열 |
%A% | A를 포함하는 모든 문자열 |
symbol 열에서 A로 시작하는 문자열을 검색하는 쿼리
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%';
symbol 열에서 AA로 시작하는 문자열을 검색하는 쿼리
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'AA%';
symbol 열에서 A로 끝나는 모든 문자열을 검색한 쿼리
SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A';
symbol 열에서 AA로 끝나는 모든 문자열을 검색한 쿼리
SELECT * FROM nasdaq_company
WHERE symbol LIKE '%AA';
symbol 열에서 A를 포함하는 문자열 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A%';
특정 문자열을 제외한 데이터 검색
특정 문자열을 제외하고 데이터를 검색하면 NOT과 LIKE를 조합해 사용한다.
symbol 열에서 첫 번째 글자가 A로 시작하지 않는 문자열 검색
SELECT * FROM nasdaq_company
WHERE symbol NOT LIKE 'A%';
특수 문자를 포함한 문자열 검색
LIKE를 사용해 문자열에 %가 포함된 데이터를 검색할 경우
%는 예약어이므로 '%'와 같이 입력하는 방법으로는 검색할 수 없다.
이럴 경우 ESCAPE를 사용한다.
%을 포함한 임시 테이블 생성
WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE
%를 포함한 임시 테이블에서 A%BC만 검색
% 기호는 검색할 수 있는 값이 아닌, 0개 이상의 문자를 의미하는 예약어라서 ESCAPE를 이용해야 한다.
WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE
WHERE col_1 LIKE '%#%%' ESCAPE '#';
ESCAPE 문이 쿼리를 실행할 때 #을 제거해 쿼리 명령 단계에서 '%#%%'이 호출되고
실제 실행할 때는 '%%%'로 해석되어, %를 포함하는 앞뒤 어떠한 문자가 와도 상관없는 데이터가 검색된다.
ESCAPE에 사용할 문자는 #, &, !, / 등 다른 것도 쓸 수 있다.
다만 해당 문자가 실제 문자열에 쓰이지 않는 것이어야 한다.
%를 포함한 임시 테이블에서 A%BC만 검색: ESCAPE와 ! 사용
WITH CTE (col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE
WHERE col_1 LIKE '%!%%' ESCAPE '1';
_로 특정 문자열을 포함하는 특정 길이의 문자열 검색
%는 해당 문자열을 포함하는 모든 데이터를 출력한다.( %를 사용하다보면 가끔 검색된 데이터 양이 매우 많아 원하는 데이터를 빠르게 찾지 못하는 경우가 있다.)
만약 해당 문자열을 포함하는 특정 길이의 문자열을 검색하려면 _를 사용하면 된다.
_의 사용 방법
A_ | A로 시작하면서 뒤의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열 |
_A | A로 끝나면서 앞의 문자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열 |
_A_ | 세 글자 중 가운데 글자만 A이며 앞뒤로는 무엇이든 상관없는 문자열 |
A로 시작하면서 어떠한 문자열이든 1개만 추가로 허용하는 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_';
A로 끝나면서 문자열의 길이가 2인 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE '_A';
A로 시작하고 C로 끝나면서 문자열이 4개인 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A__C';
_와 %를 조합해 문자열 검색
특정 문자열로 시작하면서 특정 범위에는 사용자가 원하는 문자열을 포함하는 데이터를 검색하려면 _와 %를 조합한다
A_C로 시작하면서 이후로는 어떤 문자열이 오더라도 상관없는 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_C%';
__F로 시작하면서 이후로는 어떤 문자열이라도 상관없는 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE '__F%';
A로 시작하고, 마지막은 L_이기만 하면 되는 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%L_';
[]로 문자나 문자 범위를 지정해 문자열 검색하기
%나 _를 사용한 검색은 모든 문자열을 대상으로 한다.
만약 모든 문자열이 아닌 A나 B를 포함한 문자열을 검색하고 싶다면?
그럴 때는 문자나 문자 범위를 지정해 문자열을 검색할 수 있는 []를 사용한다.
[]의 사용 방법
[A, B, C] 또는 [A-C]% | 첫 글자가 A 또는 B 또는 C로 시작하는 모든 문자열 검색 |
%[A, B, C] 또는 %[A-C] | 마지막 글자가 A 또는 B 또는 C로 끝나는 모든 문자열 검색 |
1번째 문자가 A, 2번째 문자가 A 또는 B 또는 C인 symbol을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A, B, C]';
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]';
,와 -를 조합하는 방법
첫 글자가 A이고 2번째 문자가 A-C 또는 G 또는 M-R인 symbol 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C, G, M-R]';
문자나 문자 범위를 제외한 문자열 검색
특정 문자열을 제외해 검색할 때는 NOT을 사용했다.
하지만 []는 NOT이 아니라 ^를 사용해야 한다.
[^A]%는 첫 번째 글자가 A가 아닌 모든 문자열을 검색한다.
첫 글자가 A이고 2번째 문자가 A, B, C가 아닌 symbol 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[^A, ^B, ^C]';
첫 글자가 A이고 2번째 문자가 A, B, C가 아닌 symbol 검색: 연속 범위 미포함
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[^A-C]';
다양한 방법으로 와일드카드 사용하기
와일드카드 조합을 사용하면 원하는 데이터를 잘 검색할 수 있다.
A로 시작하면서 2번째 문자는 C, P를 포함하고 3번째 문자는 T를 포함하지 않으면서 마지막 문자는 W로 끝나는 문자열 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[C,P ][^T]%W';
1번째 문자는 A, 2번째 문자는 A-C, 3번째 문자는 아무거나, 4번째 문자는 O인 문자열 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]_O%';
'MSSQL > SQL 시작하기' 카테고리의 다른 글
09 테이블 생성하고 삭제하기 (1) | 2024.10.01 |
---|---|
08 데이터 그룹화 다루기 (2) | 2024.10.01 |
06 ORDER BY 문으로 데이터 정렬하기 (1) | 2024.09.30 |
05 NULL 데이터 검색 (0) | 2024.09.29 |
04 WHERE 문에서 논리 연산자 사용 (0) | 2024.09.29 |