개인정보가 들어있는 데이터를 수정하기위해
in 절로 데이터를 찾고 있었다.
그러나 나오지 않는다. 해당 개인정보가 포함되어있기 때문이다
오라클 like를 in 절처럼 사용할 수 있을까? 조사해 보았다.
오라클 LIKE를 IN절처럼 사용하는 방법 (IN-LIKE 구현 팁)
오라클(Oracle)에서 IN 절은 특정 값 목록을 조회할 때 자주 사용됩니다. 하지만 LIKE 연산자와는 직접 호환되지 않기 때문에, 다음과 같은 구문은 사용할 수 없습니다:
-- 잘못된 문법 예시
WHERE column_name LIKE IN ('%가%', '%나%', '%다%') -- ❌ 오류 발생
그렇다면, LIKE 조건을 다수 적용하여 IN 절과 유사한 효과를 내는 방법은 무엇이 있을까요?
아래에서 SQL 실무에서 유용하게 쓰이는 4가지 방법을 소개합니다.
✅ 1. OR 조건으로 여러 LIKE 사용 (기본 방식)
가장 기본적이고 직관적인 방식입니다. 각 단어에 대해 LIKE 조건을 나열합니다.
SELECT *
FROM your_table
WHERE column_name LIKE '%가%'
OR column_name LIKE '%나%'
OR column_name LIKE '%다%'
- ✅ 장점: 간단하고 이해하기 쉬움
- ⚠️ 단점: 조건이 많아질수록 쿼리가 길어지고 유지보수가 어려움
✅ 2. REGEXP_LIKE로 여러 단어 포함 검색
Oracle의 REGEXP_LIKE는 정규표현식을 사용하여 여러 LIKE를 하나로 처리할 수 있습니다.
SELECT *
FROM your_table
WHERE REGEXP_LIKE(column_name, '가|나|다')
- ✅ 장점: 한 줄로 여러 단어 검색 가능
- ⚠️ 주의: 정규식이 너무 길면
ORA-00936또는ORA-01795오류 발생
👉 해결 팁: 정규식 나누기
WHERE REGEXP_LIKE(column_name, '가|나|다|라|마')
OR REGEXP_LIKE(column_name, '바|사|아|자|차')
✅ 3. 서브쿼리 + LIKE JOIN 방식
키워드를 테이블 형태로 나열한 뒤 조인하여 LIKE 검색을 수행하는 방법입니다.
SELECT DISTINCT t.*
FROM your_table t
JOIN (
SELECT '%가%' AS kw FROM dual UNION ALL
SELECT '%나%' FROM dual UNION ALL
SELECT '%다%' FROM dual
) k
ON t.column_name LIKE k.kw
- ✅ 장점: 정규식 길이 문제 회피
- ⚠️ 단점: 성능 저하 가능, 인덱스 사용 어려움
✅ 4. EXISTS 서브쿼리로 LIKE 처리 (LIKE ANY 효과)
Oracle 12c 이상에서는 EXISTS 서브쿼리를 이용해 LIKE ANY처럼 구현할 수 있습니다.
SELECT *
FROM your_table t
WHERE EXISTS (
SELECT 1
FROM (
SELECT '가' AS kw FROM dual UNION ALL
SELECT '나' FROM dual UNION ALL
SELECT '다' FROM dual
) x
WHERE t.column_name LIKE '%' || x.kw || '%'
)
- ✅ 장점: 유연하고 조건 수 증가 시에도 안정적
- ⚠️ 단점: 서브쿼리 성능 고려 필요
🧠 정리: 상황별 추천 방법
| 조건 개수 | 추천 방식 |
|---|---|
| 10개 이하 | LIKE ... OR ... 방식 |
| 10~30개 | REGEXP_LIKE (단, 길이 초과 시 분할) |
| 30개 이상 | JOIN 또는 EXISTS 방식 |
| 반복 작업 많을 경우 | 동적 쿼리 생성 도구 또는 PL/SQL 사용 고려 |
🔎 결론
LIKE는 IN 절처럼 직접 사용할 수 없지만, 위에서 소개한 방식들을 사용하면 실무에서 유사한 기능을 구현할 수 있습니다.
특히:
- 간단한 경우 →
OR나열 - 중간 규모 →
REGEXP_LIKE - 조건이 많을 경우 →
JOIN또는EXISTS - 쿼리 자동화 필요 → 동적 SQL 또는 PL/SQL
📌 실무 TIP
- 100개 이상 조건이 있다면 정규식 대신 서브쿼리 방식 추천
LIKE '%단어%'는 인덱스를 사용하지 못하므로 성능 주의- 필요하다면 Oracle Text (Full Text Index) 사용도 고려해볼 수 있음
'개발 > DB' 카테고리의 다른 글
| [Oracle Blob Maping] Cause: java.sql.SQLException: 부적합한 열 유형 (0) | 2025.07.16 |
|---|---|
| [Oracle 문법 merge into] 문법, 예제, 활용도에 대해 기록 (0) | 2025.07.09 |
| 오라클 BETWEEN과 LIKE 스캔 범위를 비교 해보자 (0) | 2022.08.31 |
| 오라클(oracle) 등 DB에서 IN절과 '=' 개념 차이 확인 (0) | 2022.08.30 |
| [oracle] 오라클 view 생성 등 기초 알아보기(view, mview) (0) | 2020.06.10 |
| [oracle] synonym(동의어) 생성 및 삭제 (0) | 2020.06.09 |
| [오라클(oracle)] join update 힌트로 해결 (2) | 2020.03.04 |