はじめに
データベース操作では、「名前が特定の文字で始まる従業員を探したい」「ある文字列を含む商品をリストアップしたい」など、文字列パターンを指定して検索する場面がよくあります。これを実現するのがWHERE
句とLIKE
句です。本記事では、初心者にも理解しやすいよう、scott
スキーマのEMP
テーブルを使ってLIKE
句の基本から応用までを詳しく解説します。
SQL> SELECT empno,ename,job FROM emp;
EMPNO ENAME JOB
---------- -------------------- --------------------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7839 KING PRESIDENT
7844 TURNER SALESMAN
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
12行が選択されました。
SCOTTスキーマは以下を実行することでインストールが可能です。
SQL> @?/rdbms/admin/utlsampl.sql
1. LIKE句の基礎知識
LIKE
句は、文字列の一部に一致するデータを検索するための便利な句です。LIKE
句で使用できるワイルドカードは以下の2つです。
%
:0文字以上の任意の文字列に一致(例:A%
はAで始まる任意の文字列)_
:任意の1文字にのみ一致(例:_B_
は、2文字目がBの3文字の文字列)
これらを使うことで、柔軟に検索条件を設定できます。
2. 実践:LIKE句の使い方を徹底解説
基本のクエリ例
各クエリの後には、想定される検索結果についても解説を加えます。
例1: 文字列が「S」で始まる従業員を検索
ENAME
が「S」で始まる従業員を検索します。SELECT empno,ename,job FROM emp
WHERE ENAME LIKE 'S%';
このクエリは「S」で始まるすべての従業員を返します。例えば「SMITH」や「SCOTT」などが該当します。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE 'S%';
EMPNO ENAME JOB
---------- -------------------- --------------------
7369 SMITH CLERK
例2: 文字列が「E」で終わる従業員を検索
ENAME
が「E」で終わる従業員を検索します。SELECT empno,ename,job FROM emp
WHERE ENAME LIKE '%E';
このクエリは「E」で終わる従業員(「JONES」や「JAMES」など)を一覧表示します。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE '%E';
EMPNO ENAME JOB
---------- -------------------- --------------------
7698 BLAKE MANAGER
例3: 特定の文字列が含まれる従業員を検索
ENAME
に「AR」が含まれる従業員を検索します。SELECT empno,ename,job FROM emp
WHERE ENAME LIKE '%AR%';
このクエリは、「AR」を含む従業員(「MARTIN」や「WARD」など)を返します。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE '%AR%';
EMPNO ENAME JOB
---------- -------------------- --------------------
7521 WARD SALESMAN
7654 MARTIN SALESMAN
7782 CLARK MANAGER
例4: 特定の位置に文字があるデータを検索
従業員名の2文字目が「A」の従業員を検索します。SELECT empno,ename,job FROM emp
WHERE ENAME LIKE '_A%';
1文字目が任意で、2文字目が「A」の従業員名(「ADAMS」など)が検索されます。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE '_A%';
EMPNO ENAME JOB
---------- -------------------- --------------------
7521 WARD SALESMAN
7654 MARTIN SALESMAN
7900 JAMES CLERK
例5: OR句で複数のパターンを同時に検索
従業員名が「S」で始まるか「N」で終わる従業員を同時に検索します。SELECT empno,ename,job FROM emp
WHERE ENAME LIKE 'S%' OR ENAME LIKE '%N';
これにより、「SMITH」「ALLEN」など、条件に一致するすべての従業員が返されます。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE 'S%' OR ENAME LIKE '%N';
EMPNO ENAME JOB
---------- -------------------- --------------------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7654 MARTIN SALESMAN
3. 応用:LIKE句と他の機能を組み合わせてさらに便利に
大文字・小文字を無視した検索
通常、OracleはLIKE
句で大文字・小文字を区別します。小文字も含めて検索したい場合、LOWER
関数を使用します。SELECT empno,ename,job FROM emp
WHERE LOWER(ENAME) LIKE 's%';
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME LIKE 's%';
レコードが選択されませんでした。 ★小文字 's%' に一致しないのでselectできない
SQL> SELECT empno,ename,job FROM emp
2 WHERE LOWER(ENAME) LIKE 's%';
EMPNO ENAME JOB
---------- -------------------- --------------------
7369 SMITH CLERK
※LOWERは、SQLで文字列をすべて小文字に変換する関数です。
NOT LIKEで特定の文字列を含まないデータを検索
例えば、ENAME
に「S」が含まれない従業員を探す場合は、NOT LIKE
を使用します。SELECT empno,ename,job FROM emp
WHERE ENAME NOT LIKE '%S%';
このクエリは、ENAME
に「S」が含まれない従業員のみを表示します。
SQL> SELECT empno,ename,job FROM emp
2 WHERE ENAME NOT LIKE '%S%';
EMPNO ENAME JOB
---------- -------------------- --------------------
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7839 KING PRESIDENT
7844 TURNER SALESMAN
7902 FORD ANALYST
7934 MILLER CLERK
9行が選択されました。
4. パフォーマンスへの影響とLIKE句の最適な使い方
インデックスの利用に注意
LIKE
句において、「%」を文字列の前方に置くとインデックスが効きません。これによりフルテーブルスキャンが発生し、パフォーマンスが低下することがあります。そのため、必要な検索範囲を絞り、可能な限り先頭に%
を置かないようにすると良いです。
複雑なパターンは正規表現を使用
LIKE
句ではカバーできない複雑なパターンがある場合は、REGEXP_LIKE
を使用した正規表現も検討してください。正規表現を使えば、特定の条件に合致するデータをさらに柔軟に検索できます。
5. 実践的な使用例とヒント
使用例1: 商品名から特定のカテゴリを抽出する
例えば、「プロジェクトに関する商品名」が含まれるレコードを抽出する際、「%プロジェクト%」といったパターンで検索すると効果的です。SELECT * FROM PRODUCTS
WHERE PRODUCT_NAME LIKE '%プロジェクト%';
使用例2: 住所データから都道府県別のレコードを抽出
住所に「東京都」が含まれる顧客データを検索するには、以下のように記述します。SELECT * FROM CUSTOMERS
WHERE ADDRESS LIKE '%東京都%';
ヒント: 目的に合わせてLIKE句と他の条件を組み合わせる
データベースの規模が大きい場合、複数条件で検索範囲を絞ることで、パフォーマンスの向上が期待できます。LIKE
句の他に、AND
やOR
などの条件句を活用すると効果的です。
6. まとめ – LIKE句でデータベース検索をもっと効率化
LIKE
句は、ワイルドカードを使って特定のパターンに一致する文字列を検索する便利なツールです。%
と_
を活用することで、柔軟に条件設定が可能です。- 実用的な検索では、大文字・小文字の区別やパフォーマンスへの配慮も重要です。
- 他の条件句と組み合わせることで、より効率的で高精度な検索が可能になります。
コメント