SQLのLIKE
句は、文字列のパターンマッチングを行う際に使用する便利な条件式です。
文字列の一部が一致しているデータを検索したいときや、特定のパターンに合う文字列を絞り込むときに活用されます。
基本的なLIKEの構文
LIKE
句は、WHERE
条件式で使用され、パターンに合う文字列を検索します。構文は次の通りです。
SELECT 列名 FROM テーブル名
WHERE 列名 LIKE 'パターン';
LIKE
句では、以下の2つのワイルドカードを使用してパターンを指定します。
%
:0文字以上の任意の文字列にマッチします。
_
:任意の1文字にマッチします。
ワイルドカードの使い方
%を使った検索
%
は0文字以上の任意の文字列にマッチするため、部分一致検索に適しています。
“a”で始まるすべての名前を検索する場合、以下のように記述します。
SELECT name FROM users
WHERE name LIKE 'a%';
このクエリは、name
列で”a”から始まる全ての名前を返します。
例えば、alice
やandrew
などが該当します。
_を使った検索
_
は任意の1文字にマッチするため、特定の文字位置に制限を設けた検索に使えます。
2文字目が”o”の名前を検索する場合、以下のように記述します。
SELECT name FROM users
WHERE name LIKE '_o%';
このクエリは、name
列で2文字目が”o”である全ての名前を返します。例えば、john
やtom
などが該当します。
特殊文字の検索
LIKE
句でワイルドカードと同じ文字(例えば%
や_
)を検索したい場合、それらはエスケープする必要があります。
通常、エスケープ文字はデータベースシステムに応じて異なりますが、SQL標準ではバックスラッシュ\\
を使うことができます。
名前に%
を含む行を検索する場合、以下のように記述します。
SELECT name FROM users
WHERE name LIKE '%\%%' ESCAPE '\';
このクエリでは、%
を含むすべての名前を検索します。
ESCAPE '\'
を指定することで、%
はワイルドカードとしてではなく、文字として扱われます。
複数の条件を組み合わせたLIKEの使い方
LIKE
句を他の条件と組み合わせて、詳細な検索を行うことが可能です。
例えば、AND
やOR
を使って複数のパターンに合致する行を探すことができます。
“a”で始まるが、”b”で終わる名前を検索する場合、以下のように記述します。
SELECT name FROM users
WHERE name LIKE 'a%' AND name LIKE '%b';
このクエリでは、name
列で”a”で始まり、かつ”b”で終わるすべての名前を返します。例えば、alexb
が該当します。
大文字小文字の区別
SQLのLIKE
句の大文字小文字の扱いは、データベースシステムに依存します。
例えば、MySQLではデフォルトで大文字小文字を区別しない検索が行われますが、PostgreSQLなど他のシステムでは区別する場合もあります。
大文字小文字を区別せずに検索する例(PostgreSQLの場合)
SELECT name FROM users
WHERE name ILIKE 'a%';
ILIKE
はLIKE
と同様の機能を持ちますが、大文字小文字を区別しない検索を行います。
まとめ
LIKE
句は、SQLで文字列検索を行う際に非常に便利な機能です。ワイルドカードの%
や_
をうまく活用することで、部分一致検索や特定のパターンマッチングが簡単に行えます。