SELECT [열]
FROM [테이블]
WHERE [열]
LIKE [조건값]
%로 특정 문자열을 포함하는 데이터 조회하기
- A% : A로 시작하는 모든 문자열
- %A : A로 끝나는 모든 문자열
- %A% : A가 포함된 모든 문자열
customer 테이블의 first_name 열에서 % 사용해보자
# 첫 번째 글자가 A로 시작하는 데이터
SELECT * FROM customer WHERE first_name LIKE 'A%';
# 첫 번째 글자가 AA로 시작하는 데이터
SELECT * FROM customer WHERE first_name LIKE 'AA%';
# A로 끝나는 모든 데이터 조회
SELECT * FROM customer WHERE first_name LIKE '%A';
# A를 포함하는 모든 데이터 조회
SELECT * FROM customer WHERE first_name LIKE '%A%';
# A로 시작하지 않는 데이터 조회
SELECT * FROM customer WHERE first_name NOT LIKE 'A%';
특정 문자열을 제외하고 싶다면 NOT LIKE를 사용하면 된다!
ESCAPE로 특수 문자 포함한 데이터 조회하기
'%'를 포함한 데이터를 조회하고 싶다면 ESCAPE 를 사용해야한다
'%%'를 쓰면 조회가 안된다
먼저 특수기호를 포함한 테이블 생성
# %, _ 같은 특수기호를 포함한 임의의 테이블 생성
WITH CTE(col_1) AS (
SELECT 'A%BC' UNION ALL
SELECT 'A_BC' UNION ALL
SELECT 'ABC'
)
SELECT * FROM CTE;
CTE테이블을 안에 %와 _(언더바) 특수기호가 들어간 데이터가 있는 것을 확인!
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를 사용해야한다
SELECT * FROM CTE WHERE col_1 LIKE '%#%%' ESCAPE '#';
ESCAPE문이 #을 제거해 실제로는 '%$%%'이 아닌 '%%%'로 해석되어 '%'이 포함하는 데이터가 검색되는 것이다
그렇다면 처음부터 '%%%'라고 쓰면 되는 것 아닌가?라는 생각이 들어서 해봤는데
안된다
ESCAPE를 꼭 쓰도록 하자
_로 길이가 정해진 데이터 조회하기
- A_ : A로 시작하면서 뒤의 글자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
- _A : A로 끝나면서 앞의 문자는 무엇이든 상관없으며 전체 글자 수는 2개인 문자열
- _A_ : 세 글자로 된 문자열 중 가운데 글자만 A이며 앞뒤로는 무엇이든 상관없는 문자열
# A로 시작하면서 문자열 길이가 3인 데이터 조회
SELECT * FROM customer WHERE first_name LIKE 'A__';
# A로 시작하고 A로 끝나면서 문자열 길이가 4인 데이터 조회
SELECT * FROM customer WHERE first_name LIKE 'A__A';
# 길이가 5인 데이터 조회
SELECT * FROM customer WHERE first_name LIKE '_____';
원하는 길이 만큼 _ (언더바)를 넣으면 길이를 설정할 수 있다
%와 _ 같이 쓰기
- A와 R사이에 한 글자를 포함하여 시작하면서 이후 문자열은 어떤 문자열이라도 상관없는 데이터 조회
SELECT * FROM customer WHERE first_name LIKE 'A_R%';
- R앞에 두 글자를 포함하여 시작하면서 이후 문자열은 어떤 문자열이라도 상관없는 데이터 조회
SELECT * FROM customer WHERE first_name LIKE '__R%';
- A로 시작하고, 마지막은 R과 함께 마지막 한 글자가 더 있는 문자열 데이터를 조회
SELECT * FROM customer WHERE first_name LIKE 'A%R_';
REGEXP로 데이터 조회하기
REGEXP : 정규표현식, 특정한 패턴의 문자열을 표현하기 위해 사용한다
표현식 | 설명 |
. | 줄 바꿈 문자(\n)를 제외한 임의의 한 문자 |
* | 해당 문자 패턴이 0번 이상 반복한다 |
+ | 해당 문자 패턴이 1번 이상 반복한다 |
^ | 문자열의 처음을 의미한다 |
$ | 문자열의 끝을 의미한다 |
| | OR를 의미한다 |
[...] | 대괄호 안에 있는 어떠한 문자를 의미한다 |
[^...] | 대괄호 안에 있지 않은 어떠한 문자를 의미한다 |
{n} | 반복되는 횟수를 지정한다 |
{m,n} | 반복되는 횟수의 최솟값과 최댓값을 지정한다 |
- K로 시작하거나 R로 N으로 끝나는 데이터 조회 - REGEXP
SELECT * FROM customer WHERE first_name REGEXP '^K|N$';
- K와 함께 L과 N 사이의 글자를 포함한 데이터 조회
SELECT * FROM customer WHERE first_name REGEXP 'K[L-N]';
FRANKLIN : K뒤에 L과 N 사이에 글자가 포함되어 있는 데이터가 조회됨
- K와 함께 L과 N 사이의 글자를 포함하지 않는 데이터 조회
SELECT * FROM customer WHERE first_name REGEXP 'K[^L-N]';
와일드 카드 응용해보기
- S로 시작하는 문자열 데이터 중에 A 뒤에 L과 N 사이의 글자가 있는 데이터를 조회
- 총 7글자이고, A뒤에 L과 N 사이의 글자가 있고, 마지막 글자는 O인 문자열 데이터 조회
# Q1
SELECT * FROM customer WHERE first_name LIKE 'S%' AND first_name REGEXP 'A[L-N]';
#Q2
SELECT * FROM customer WHERE first_name LIKE '_______'
AND first_name REGEXP 'A[L-N]'
AND first_name REGEXP 'O$';
정리
LIKE에는 %와 _만
그 외 나머지는 REGEXP로 조회하기!
참고 : DO it! MySQL로 배우는 SQL 입문(4장 134p ~144p)
'SQL' 카테고리의 다른 글
기초 문법 - 되새김 문제 (0) | 2024.07.26 |
---|---|
기초 문법 - 테이블 생성 및 조작 (0) | 2024.07.21 |
기초 문법 - GROUP BY문으로 데이터 조회하기 (0) | 2024.07.20 |
기초 문법 - SELECT문으로 데이터 조회하기(WHERE, ORDER) (0) | 2024.07.17 |
기초 문법 - DDL과 DML (0) | 2024.07.15 |