본문 바로가기
Database

[Oracle DB] LIKE / ESCAPE

by diaryDev 2024. 7. 14.
728x90

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' (인덱스를 태울 수 없음)

 

 


 

 

참고

https://mine-it-record.tistory.com/34

https://dmsehd.tistory.com/46

https://gent.tistory.com/401

728x90

'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