SQL LIKE 演算子
1. SQL LIKE 演算子
LIKE 演算子は、WHERE 句内で使用され、カラムのテキストデータの中から指定されたパターンを検索するために使用されます。
LIKE 演算子と組み合わせてよく使用されるワイルドカードは 2 つあります:
- パーセント記号 (%):0 文字、1 文字、または複数文字のいずれかを表します。
- アンダースコア記号 (_):単一の文字を表します。
次の SQL は、名前が "a" で始まるすべての顧客(Customers)を選択します。
1.1 例(自分専用の SQL Server を取得)
"a" で始まるすべての顧客を選択:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';2. シンタックス
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;3. デモ用データベース
以下は、例題で使用する Customers テーブルの抜粋です。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
4. % ワイルドカード
% ワイルドカードは、任意の数の文字を表します(0 文字の場合も含みます)。
4.1 例
City(都市名)に 'on' という文字の並びが含まれているすべての顧客をリターンします:
SELECT * FROM Customers
WHERE city LIKE '%on%';5. _ ワイルドカード
_ ワイルドカードは、単一の文字を表します。任意の文字や数字を指すことができますが、1 つの _ は必ず 1 つの文字に対応します。
5.1 例
City が 'l' で始まり、次に 1 つのワイルドカード文字、その後に 'nd'、そして最後に 2 つのワイルドカード文字が続くすべての顧客をリターンします:
SELECT * FROM Customers
WHERE city LIKE 'l_nd__';6. 前方一致(Starts With)
特定の文字やフレーズで始まるレコードをリターンするには、その文字やフレーズの最後に % を付けます。
6.1 例
'La' で始まるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE 'La%';ヒント:AND や OR 演算子を使用して、任意の数の条件を組み合わせることも可能です。
6.2 例
'a' で始まる、または 'b' で始まるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%' OR CustomerName LIKE 'b%';7. 後方一致(Ends With)
特定の文字やフレーズで終わるレコードをリターンするには、その文字やフレーズの先頭に % を付けます。
7.1 例
'a' で終わるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';ヒント: 「前方一致」と「後方一致」を組み合わせることもできます。
7.2 例
'b' で始まり 's' で終わるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE 'b%s';8. 部分一致(Contains)
特定の文字やフレーズが含まれているレコードをリターンするには、その文字やフレーズの前後の両方に % を付けます。
8.1 例
'or' というフレーズが含まれているすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';9. ワイルドカードの組み合わせ
% や _ などのワイルドカードは、他のワイルドカードと組み合わせて使用できます。
9.1 例
'a' で始まり、かつ長さが少なくとも 3 文字以上あるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';9.2 例
2 文字目に "r" があるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';10. ワイルドカードなしの場合
ワイルドカードが指定されていない場合、検索フレーズは完全に一致(完全一致)する必要があります。
10.1 例
Country(国)が Spain であるすべての顧客をリターンします:
SELECT * FROM Customers
WHERE Country LIKE 'Spain';