728x90
03 - 4 와일드카드로 문자열 검색하기
LIKE를 사용하면 와일드 카드로 지정한 패턴과 일치하는 문자열, 날짜, 시간등을 검색할 수 있습니다.
-- LIKE의 기본 형식
SELECT [열] FROM [테이블] WHERE [열] LIKE [조건값]
-- 1 2
- [열] : 조건을 적용할 열 이름을 입력한다.
- [조건값] : 조건값을 입력한다.
LIKE와 %로 특정 문자열을 포함하는 문자열 검색하기
특정 문자열을 포함하는 문자열을 검색할 때는 %를 사용합니다. %는 0개 이상의 문자열과 대치합니다. %의 위치에 따라 특정 문자열이 포함된 문자열을 검색할 수 있습니다.
- %의 사용 방법
- 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%'
특정 문자열을 제외한 데이터 검색하기
-- symbol 열에서 첫 번쨰 글자가 A로 시작하지 않는 문자열 검색
SELECT * FROM nasdaq_company
WHERE symbol NOT LIKE 'A%'
특수 문자를 포함한 문자열 검색하기
-- 임시 테이블에서 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 '#'
-- 임시 테이블에서 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 '!'
ESCAPE 문이 쿼리를 실행할 때 #을 제거해 쿼리 명령 단계에서는 '%#%%'이 호출되고 실제 실행할 때는 '%%%'로 해석되어, %를 포함하는 앞뒤 어떠한 문자가 와도 상관없는 데이터가 검색되는 것입니다. ESCAPE에 사용할 문자는 #, ! 외에 &, / 등 다른 것도 쓸 수 있습니다. 다만 해당 문자가 실제 문자열에 쓰이지 않는 것이어야 합니다. 그래야 의도하지 않은 데이터 오류를 방지할 수 있습니다.
_로 특정 문자열을 포함하는 특정 길이의 문자열 검색하기
해당 문자열을 포함하는 특정 길이의 문자열을 검색하려면 _를 사용합니다.
- _의 사용방법
- A_ : A로 시작하면서 뒤의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
- _A : A로 끝나면서 앞의 문자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
- _A_ : 세 글자 중 가운데 글자만 A 이며 앞뒤로는 무엇이든 상관없는 문자열
-- 문자열의 길이가 2인 symbol 검색 : A를 포함
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A_'
-- 문자열의 길이가 2인 symbol 검색 : A로 끝남
SELECT * FROM nasdaq_company
WHERE symbol LIKE '_A'
-- 문자열의 길이가 4인 symbol 검색 : A로 시작하고 C로 끝남
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로 시작하는 symbol 검색 : 마지막 문자열만 L_이면 무엇이든 가능
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로 끝나는 모든 문자열 검색
-- 첫 글자가 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번째 문자가 A-C 또는 G 또는 M-R인 symbol 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C, G, M-R]'
문자나 문자 범위를 제외한 문자열 검색하기
-- 첫 글자가 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번째 문자는 0인 문자열을 검색
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'A[A-C]_0%'
실전 SQL
퀴즈 5. nasdaq_company 테이블에서 company_name이 apple이라는 글자를 포함하는 목록을 출력하세요.
더보기
SELECT * FROM nasdaq_company
WHERE company_name LIEK '%apple%'
퀴즈 6. nasdaq_company 테이블에서 symbol이 AA로 시작하면서 L, Q를 포함하는 목록을 출력하세요.
더보기
SELECT * FROM nasdaq_company
WHERE symbol LIKE 'AA%[L, Q]%'
퀴즈 7. nasdaq_company 테이블에서 close_price가 $10 이상, $20 이하이면서, company_name이 A를 포함하지 않으면서, ipo_year가 2017년 이상인 목록을 출력하세요. 이때 close_price 내림차순, ipo_year 오름차순으로 출력하세요.
더보기
SELECT * FROM nasdaq_company
WHERE close_price >= 10 AND close_price <= 20 AND company_name NOT LIKE '%A%' AND ipo_year >= 2017
ORDER BY close_price DESC, ipo_year ASC
728x90