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で文字列検索を行う際に非常に便利な機能です。ワイルドカードの%や_をうまく活用することで、部分一致検索や特定のパターンマッチングが簡単に行えます。

