쿼리는 정확하게 조건을 입력해 사용한다.
어떤 경우에는 자신이 검색할 대상을 몰라서 일부만 검색하기도 한다.
이때 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 |