개발/DB

[oracle Like In 절] 오라클 LIKE를 IN절처럼 사용하는 방법 (IN-LIKE 구현 팁)

Mr.Lee 하루 2025. 8. 10. 10:49

개인정보가 들어있는 데이터를 수정하기위해
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 사용 고려


🔎 결론

LIKEIN 절처럼 직접 사용할 수 없지만, 위에서 소개한 방식들을 사용하면 실무에서 유사한 기능을 구현할 수 있습니다.

특히:

  • 간단한 경우 → OR 나열
  • 중간 규모 → REGEXP_LIKE
  • 조건이 많을 경우 → JOIN 또는 EXISTS
  • 쿼리 자동화 필요 → 동적 SQL 또는 PL/SQL


📌 실무 TIP

  • 100개 이상 조건이 있다면 정규식 대신 서브쿼리 방식 추천
  • LIKE '%단어%'는 인덱스를 사용하지 못하므로 성능 주의
  • 필요하다면 Oracle Text (Full Text Index) 사용도 고려해볼 수 있음