[Oracle] 오라클 LIKE 사용법 완벽 정리 (여러개, 패턴, 대소문자)
- 데이터베이스/오라클
- 2021. 4. 15.
오라클 SQL에서 LIKE 연산자는 자주 사용하는 구문 중 하나이다. 문자열에서 와일드카드(%)를 사용하여 원하는 문자가 포함된 자료를 쉽게 검색할 수 있다. 단순 검색 외에도 대문자 소문자 구분 없이 검색, NOT 연산자 사용, 여러 개의 문자를 검색, 언더바(_)를 사용하여 자릿수 검색 등 다양한 사용법이 있으니 아래를 참고하기 바란다.
기본 사용법
"SC"로 시작하는 이름 검색
SELECT *
FROM emp
WHERE ename LIKE 'SC%'
"SC"로 시작하는 이름을 검색한다. 와일드카드(%) 자리에는 어떠한 문자가 존재해도 상관없다.
"ER"로 끝나는 이름 검색
SELECT *
FROM emp
WHERE ename LIKE '%ER'
"ER"로 끝나는 이름을 검색한다.
"AM"을 포함하고 있는 이름 검색
SELECT *
FROM emp
WHERE ename LIKE '%AM%'
"AM"이 이름은 앞, 뒤, 중간 어딘가에 존재하면 검색한다.
"M"과 "I"를 포함하고 있는 이름 검색
SELECT *
FROM emp
WHERE ename LIKE '%M%I%'
"M"과 "I"가 동시에 존재하는 이름을 검색한다. 단, "M" 다음에 "I"가 존재해야 한다.
고급 사용법
대소문자 구분 없이 검색
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%')
"SALES"로 시작하는 직군 제외하고 검색 (반대로 검색)
SELECT *
FROM emp
WHERE deptno = 30
AND job NOT LIKE 'SALES%'
LIKE는 해당 문자를 포함한 자료를 검색하지만, NOT LIKE를 사용하면 해당 문자를 포함하지 않는 데이터를 조회할 수 있다.
LIKE를 여러 개 사용하여 검색
SELECT *
FROM emp
WHERE deptno IN (20, 30)
AND (job LIKE 'SALES%' OR
job LIKE 'MAN%' OR
job LIKE 'ANAL%')
LIKE를 사용하여 여러 개의 문자를 검색하기 위해서는 OR 연산자를 사용하여 여러 개의 LIKE 조건을 부여해야 한다. 조금 더 간편하게 사용하기 위해서는 오라클 10g부터 사용 가능한 REGEXP_LIKE 정규식 함수를 사용하면 된다.
<알아두면 유용한 팁>
특정 조건을 전체 조회 또는 특정 코드만 조회 시 LIKE 연산자를 사용하면 편리함 |
언더바( _ ) 사용법
다섯 자리 이름만 검색
SELECT *
FROM emp
WHERE ename LIKE '_____'
언더바(_)를 사용하여 검색할 문자열의 자릿수를 결정하여 검색이 가능하다. 위의 예제는 다섯 자리의 이름만 검색한다.
다섯 자리 이름 중 마자막 문자가 "S"인 이름 검색
SELECT *
FROM emp
WHERE ename LIKE '____S'
이름의 앞 네 자리는 임의 문자가 존재(자릿수 중요)하고, 마지막 다섯 번째는 "S"가 존재하는 이름만 검색한다.
세째자리가 "A"인 이름 검색 사용법
SELECT *
FROM emp
WHERE ename LIKE '__A%'
이름 앞의 두 자리는 임의 문자가 존재하고, 세 번째 자리는 "A"이며 이후는 어떠한 문자가 존재해도 상관없이 검색된다.
언더바( _ )가 포함된 이름을 조회 시 엉뚱한 결과가 조회 (주의!!)
WITH temp AS (
SELECT 'STEVEN_KING' AS ename FROM dual UNION ALL
SELECT 'StevenMarkle' AS ename FROM dual
)
SELECT *
FROM temp
WHERE ename LIKE '%_%'
언더바(_)는 LIKE에서 사용하는 패턴 문자이기 때문에 해당 문자를 직접 조회할 수가 없다. 언더바(_)가 존재하는 이름만 검색하였지만 결과는 언더 바가 존재하지 않는 이름까지 검색된다.
언더바 ( _ ) 문자를 조회 시 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 문자를 언더바(_)에 붙여서 사용해야 한다. LIKE 문에 ESCAPE 문자를 넣고 뒤에 ESCAPE 문자를 선언하면 된다.
ESCAPE 문자는 검색할 문자에 존재하지 않는 임의 문자를 지정하면 된다.
예) LIKE '%\_%' ESCAPE '\'
LIKE '%#_%' ESCAPE '#'
LIKE '%$_%' ESCAPE '$'
LIKE 사용 시 인덱스 스캔
ename 컬럼에 인덱스 존재 시 LIKE를 사용할 때 오른쪽에 와일드카드(%)가 있으면 인덱스를 태울 수 있음
ename LIKE 'SC%' (인덱스를 태울 수 있음)
ename LIKE '%SC' (인덱스를 태울 수 없음)