메모장

03-4 와일드카드로 문자열 검색하기 본문

DB/[SQL 입문]

03-4 와일드카드로 문자열 검색하기

Itchild 2024. 4. 11. 12:56
728x90
반응형

 

자신이 검색할 대상을 몰라서 일부만 검색하기도 한다. 그럴때 사용하는 것이 LIKE이다 . LIKE 를 사용하면 와일드 카드로 지정한 패턴과 일치하는 문자열, 날짜 , 시간등을 검색할 수 있다.

 

  • LIKE의 기본 형식
SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]
                                 1          2
 
  1. [열] : 조건을 적용할 열 이름을 입력한다.
  2. [조건값] : 조건값을 입력한다.

 

LIKE와 %로 특정 문자열을 포함하는 문자열 검색하기

특정 문자열을 포함하는 문자열을 검색할때는 %를 사용한다. %는 0개 이상의 문자열과 대치한다. 
%의 위치에 따라 특정 문자열이 포함된 문자열을 검색할 수 있다. 

- %의 사용방법 
1. A% : A로 시작하는 모든 문자열 
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%'

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'AA%' ---> AA로 시작하는 문자열 검색


2. %A : A로 끝나는 모든 문자열 
SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A'

SELECT * FROM nasdaq_company
WHERE symbol LIKE '%AA'


3. %A% : A를 포함하는 모든 문자열 
SELECT * FROM nasdaq_company
WHERE symbol LIKE '%A%'

4. 특정 문자열 제외한 데이터 검색하기 
SELECT * FROM nasdaq_company
WHERE symbol NOT LIKE 'A%'

5. 특수문자를 포함한 문자열 검색하기 
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를 이용
- 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에 사용할 문자는 # 외에 &,!,/ 등 다른것도 사용할 수 있다. 다만 !! 해당 문자가 실제 문자열에 
쓰이지 않는 것 이어야 한다. 그래야 의도하지 않은 데이터 오류를 방지 할 수 있다 .

▶ 명령어가 SQL로 전달 될때 
SELECT * FROM CTE
WHERE col_1 LIKE '%#%%' ESCAPE '#'

▶ 데이터베이스 엔진이 SQL 명령을 수행할 때 
SELECT * FROM CTE
WHERE col_1 LIKE '%%%' <----- ESCAPE 로 # 가 제거되고 실행 

6. _ 로 특정 문자열을 포함하는 특정 길이의 문자열 검색하기 
해당 문자열을 포함하는 특정 길이의 문자열을 검색하려면 어떻게 해야 할까 ? 그럴때는 _ 를 사용한다.
_ 의 사용방법 
▶ A_: A로 시작하면서 뒤의 글자는 무엇이든 상관 없으며 전체 글자 수는 2개인 문자열 
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_' ---> 문자열의 길이가 2인 symbol 검색

▶ _A: A로 끝나면서 앞의 문자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
SELECT * FROM nasdaq_company
WHERE symbol LIKE '_A'

▶ _A_: 세글자 중 가운데 글자만 A 이며 앞뒤로는 무엇이든 상관없는 문자열 

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A__C' ---> 문자열의 길이가 4인 symbol 검색(A로 시작하고 C로 끝남)

▶ _와 %를 조합해 문자열 검색 
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_C%' --> A_C로 시작하는 symbol검색: 이후 문자열은 무엇이든 가능 

SELECT * FROM nasdaq_company
WHERE symbol LIKE '__F%' --> __F로 시작하는 symbol검색: 이후 문자열은 무엇이든 가능

SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A%L_' --> A로 시작하는 symbol검색: 마지막 문자열만 L_이면 무엇이든 가능
---> A로 시작하고 , 마지막은 L_이기만 하면 되는 symbol 을 검색

7. [] 로 문자나 문자 범위를 지정해 문자열 검색하기 
[] 사용방법
- [A,B,C]% 또는 [A-C]% : 첫 글자가 A또는 B또는 C로 시작하는 모든 문자열 검색
- %[A,B,C] 또는 %[A-C] : 마지막 글자가 A또는 B또는 C로 끝나는 모든 문자열 검색

▶ 첫번째가 A, 2번째문자가 A 또는 B 또는 C인 symbol 을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A, B, C]'

▶ 첫글자가 A 이고 2번째 문자가 A-C 또는 G 또는 M-R인 symbol 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C, G, M-R]'

8. 문자나 문자 범위를 제외한 문자열 검색하기 
▶ 첫 글자가 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]'

9. 다양한 방법으로 와일드 카드 사용하기 
▶ 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번째 문자는 0 인 문자열을 검색 
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]_0%'

 

 

 

728x90
반응형