LIKE 연산자
일부가 비슷한 내용을 검색하는 연산자
사용 방법
WHERE [컬럼명] LIKE '%검%색%어'
%
0개 이상의 문자열과 대치(문자열의 길이는 제한받지 않음)
와일드카드(%) 자리에 어떠한 문자가 있어도 상관 없음
• ab로 시작하는 이름 검색 : ab%
SELECT * FROM employees WHERE name LIKE 'ab%';
• yz으로 끝나 이름 검색 : %yz
SELECT * FROM employees WHERE name LIKE '%yz';
• 문장중에 x 와 y를 포함하는 이름 검색 : %x%y%
(x와 y가 동시에 존재하는 이름을 검색하며 x 다음에 y가 존재해야 함)
SELECT * FROM employees WHERE name LIKE '%x%y%';
_ (언더바)
- 임의의 한개의 문자와 대치
- Z로 끝나는 2자리 이름 검색 : _Z
SELECT * FROM employees WHERE name LIKE '_Z';
' %' 와 ' _' 는 여러개로 조합하여 사용이 가능
NOT LIKE
LIKE 의 반대 의미
사용 방법
WHERE [컬럼명] NOT LIKE '%검%색%어'
다중 LIKE 연산자
1) OR 사용법
WHERE(name LIKE '%한%' OR name LIKE '%은%')
(OR가 3개이상이면 IN을 사용할 수 있지만 LIKE에서 IN을 함께 사용할 수 없어 정규식을 사용)
2) 정규식 사용법
WHERE REGEXP_LIKE( [컬럼명] , 조건)
ex) WHERE REGEXP_LKE( name , '한|김|피');
대소문자 구분 없이 검색
SELECT *
FROM emp
WHERE LOWER(job) LIKE 'sales%'

LIKE는 대소문자를 구분하여 검색하기 때문에
대소문자 구분 없이 검색하기 위해서는 UPPER, LOWER 함수를 사용하여 컬럼의 값을 치환 후, 검색 필요
WHERE LOWER(job) LIKE 'sales%'
WHERE LOWER(job) LIKE LOWER('Sales%')
WHERE UPPER(job) LIKE 'SALES%'
WHERE UPPER(job) LIKE UPPER('Sales%')
언더바 ( _ ) 문자를 조회 시 ESCAPE 문자를 사용
WITH temp AS (
SELECT 'STEVEN_KING' AS ename FROM dual UNION ALL
SELECT 'StevenMarkle' AS ename FROM dual
)
SELECT *
FROM temp
WHERE ename LIKE '%\_%' ESCAPE '\'

ESCAPE 문자는 검색할 문자에 존재하지 않는 임의 문자를 지정하면 된다.
ex) LIKE '%\_%' ESCAPE '\'
LIKE '%#_%' ESCAPE '#'
LIKE '%$_%' ESCAPE '$'
LIKE 사용 시 인덱스 스캔
ename 컬럼에 인덱스 존재 시 LIKE를 사용할 때 오른쪽에 와일드카드(%)가 있으면 인덱스를 태울 수 있다.
ename LIKE 'SC%' (인덱스를 태울 수 있음)
ename LIKE '%SC' (인덱스를 태울 수 없음)
참고
'Database' 카테고리의 다른 글
Redis 명령어 (0) | 2024.07.26 |
---|---|
Redis 설치 및 실행 테스트 (0) | 2024.07.24 |
MySQL -> PostgreSQL (MySQL을 PostgreSQL로 변환) (0) | 2024.07.19 |
[MySQL] LIMIT, OFFSET (0) | 2024.07.13 |
MS SQL, Oracle DB, MySQL 현재 일시 (0) | 2024.07.11 |