2026/07/30

오늘의 이야기

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>Oracle 유사도 검색 방법 정리</title>
  <style>
    body { font-family: Arial, sans-serif; line-height: 1.6; margin: 20px; }
    h1, h2, h3 { color: #2c3e50; }
    code { background: #f4f4f4; padding: 2px 4px; border-radius: 4px; }
    table { border-collapse: collapse; width: 100%; margin-top: 10px; }
    table, th, td { border: 1px solid #ccc; }
    th, td { padding: 8px; text-align: left; }
    th { background: #f9f9f9; }
  </style>
</head>
<body>

<h1>Oracle에서 유사도 검색 방법 정리</h1>

<h2>1. 문자열 기반 검색</h2>

<h3>LIKE 연산자</h3>
<ul>
  <li>패턴 매칭에 사용</li>
  <li><code>%</code> : 0개 이상의 문자 대체</li>
  <li><code>_</code> : 정확히 1개의 문자 대체</li>
</ul>
<pre><code>SELECT * FROM employees WHERE first_name LIKE '%ohn%';
</code></pre>
<p>→ "John", "Johnson" 등 포함된 결과 반환</p>

<h3>INSTR 함수</h3>
<ul>
  <li>특정 문자열 내에서 부분 문자열의 위치를 반환</li>
</ul>
<pre><code>SELECT INSTR('CORPORATE FLOOR', 'OR', 3) FROM dual;
</code></pre>

<hr>

<h2>2. PURGE 명령어</h2>

<h3>DROP TABLE ... PURGE</h3>
<p>테이블을 <strong>Recycle Bin</strong>에 남기지 않고 즉시 삭제</p>
<pre><code>DROP TABLE employees PURGE;
</code></pre>

<h3>PURGE RECYCLEBIN</h3>
<p>현재 사용자 스키마의 Recycle Bin 전체 비움</p>
<pre><code>PURGE RECYCLEBIN;
</code></pre>

<h3>PURGE DBA_RECYCLEBIN</h3>
<p>DBA 권한으로 데이터베이스 전체 Recycle Bin 비움</p>

<hr>

<h2>3. 글자 유사도 검색</h2>

<h3>기본 검색</h3>
<ul>
  <li>LIKE: 단순 패턴 매칭</li>
  <li>INSTR: 문자열 내 위치 반환</li>
</ul>

<h3>고급 검색 (문자열 유사도)</h3>
<p>Oracle 표준 DB에는 <code>FUZZY_MATCH</code> 함수가 없으며, 대신 <strong>UTL_MATCH 패키지</strong>를 사용해야 함.</p>

<h4>주요 함수</h4>
<ul>
  <li><strong>EDIT_DISTANCE</strong> (Levenshtein 거리 기반)</li>
</ul>
<pre><code>SELECT UTL_MATCH.EDIT_DISTANCE('Chris', 'Kris') FROM dual;
-- 결과: 2
</code></pre>

<ul>
  <li><strong>EDIT_SIMILARITY</strong> (0~100 점수 반환)</li>
</ul>
<pre><code>SELECT UTL_MATCH.EDIT_SIMILARITY('Chris', 'Kris') FROM dual;
-- 결과: 80
</code></pre>

<ul>
  <li><strong>JARO_WINKLER</strong> (발음/철자 유사성 기반)</li>
  <li><strong>JARO_WINKLER_SIMILARITY</strong> (유사도 점수 반환)</li>
</ul>

<hr>

<h2>4. 요약 비교</h2>

<table>
  <tr>
    <th>방법</th>
    <th>특징</th>
    <th>적합한 상황</th>
  </tr>
  <tr>
    <td>LIKE</td>
    <td>단순 패턴 매칭</td>
    <td>특정 문자열 포함 여부 확인</td>
  </tr>
  <tr>
    <td>INSTR</td>
    <td>문자열 내 위치 반환</td>
    <td>텍스트 분석, 위치 기반 검색</td>
  </tr>
  <tr>
    <td>UTL_MATCH</td>
    <td>Levenshtein, Jaro-Winkler 지원</td>
    <td>오타 교정, 고객 데이터 중복 제거</td>
  </tr>
  <tr>
    <td>PURGE</td>
    <td>Recycle Bin 비우기/즉시 삭제</td>
    <td>공간 확보, 불필요한 객체 제거</td>
  </tr>
</table>

<hr>

<h2>5. 결론</h2>
<ul>
  <li>단순 검색에는 <strong>LIKE/INSTR</strong> 활용</li>
  <li>철자 오류나 발음 유사성을 고려한 검색에는 <strong>UTL_MATCH 패키지</strong> 사용</li>
  <li><code>FUZZY_MATCH</code>는 표준 Oracle DB에는 없음 → 혼동 주의</li>
  <li>데이터 정제 및 중복 제거 작업에 유용</li>
</ul>

</body>
</html>





댓글 없음:

댓글 쓰기

오늘의 이야기

<!DOCTYPE html> <html lang="ko"> <head>   <meta charset="UTF-8">   <title>Or...