SQL LIKE演算子の使い方

文字列が部分一致する行を問い合わせるには、LIKE句を使用します。ワイルドカードを使用した比較には、等号 (=) ではなくLIKE句を使用します。

LIKEの使い方

expr1 [NOT] LIKE expr2 [ESCAPE expr3]
expr1

比較元の文字列式を指定する。

expr2

比較先の文字列式を指定する。任意の文字を表すアンダースコア(_)や任意の文字列を表すパーセント記号(%)といったワイルドカードを使用することができる。

expr3

エスケープ文字として使用する文字を指定する。

ワイルドカード

ワイルドカードとは、任意の1文字あるいは任意の複数文字を表わす記号である。

ワイルドカード
ワイルドカード 説明
_ 任意の1文字
% 任意の複数文字(0文字以上)
* 任意の複数文字(Microsoft Accessの場合)

任意の1文字

1文字の任意の文字は「_」で表す。

任意の複数文字

0文字以上の任意の文字列を表すワイルドカードはパーセント記号(%)で表します。

LIKEの使用例

select * from 従業員表 where 部署名 like '%営業%'

上記のSQL文の場合、部署名に「営業」という文字列を含むものが該当します(例えば、「営業3課」や「企画営業課」など)。

エスケープ

パーセント(%)をワイルドカードとして使用するのではなく、ただの文字として扱いたい場合は、ESCAPE節に指定したエスケープ文字を前に付ける。

ESCAPEに指定する文字は何でもよいが、慣習的に「\」が使われることが多い。

たとえば、「FOO」の部分一致ではなく、「%FOO」の前方一致で検索したい場合には、次のようにする。

SELECT id FROM exsample WHERE id LIKE '\%FOO%' ESCAPE '\';

アンダースコア(_)をワイルドカードとして使用するのではなく、ただの文字として扱いたい場合は、ESCAPE節に指定したエスケープ文字を前に付ける。

たとえば、「FOO」の前方一致ではなく、「FOO_」の前方一致を検索したい場合には、次のようにする。

SELECT id FROM exsample WHERE id LIKE 'FOO\_%' ESCAPE '\';

否定

指定した文字列パターンに一致するのではなく、一致しないものを検索したい場合には、否定演算子(NOT)をLIKEの前に付ける。

SELECT * FROM example WHERE id NOT LIKE 'TEST%'

正規表現

SQLのLIKE演算子で正規表現が使えるかどうかは、リレーショナルデータベース管理システムによって異なる。

データベースの正規表現サポート
DBMS LIKEで正規表現が使えるか 正規表現を使える演算子
MySQL No REGEXP
Oracle No なし
PostgreSQL No SIMILAR TO
SQLSever Yes LIKE

OracleデータベースではLIKE演算子に正規表現は使えない。また、LIKEの代わりに正規表現を使える演算子も存在しない。

Oracleで正規表現によるパターンマッチングを行うには、正規表現関数を使用する。

Oracleの正規表現関数
関数 説明
REGEXP_LIKE 正規表現と一致すればTRUE、一致しなければFALSEが戻される。
REGEXP_COUNT 正規表現と一致する出現回数が戻される。
REGEXP_INSTR 正規表現と一致する開始位置を示す整数が戻される。
REGEXP_REPLACE 正規表現と一致する部分を置換文字列で置き換えた文字列が戻される。
REGEXP_SUBSTR 正規表現と一致する部分文字列が戻される。

REGEXP_LIKE関数の使い方を示す。

SELECT * FROM emp WHERE REGEXP_LIKE(emp.first_name, '^Ste(v|ph)en$')

この例では、empテーブルのfirst_nameカラムがStevenまたはStephenのレコードを検索している。

OR

複数条件のうちいずれかを満たすものはOR使う。

SELECT * FROM dept WHERE dname LIKE '営業%' OR dname LIKE '業務%'

複数条件

複数条件の場合、ANDを使う。