MySQL LIKE 演算子
1. MySQL LIKE 演算子の概要
LIKE 演算子は、WHERE 句内で使用され、カラムのテキストデータの中から特定のパターンを検索するために利用されます。
LIKE 演算子では、頻繁に以下の2つのワイルドカードが組み合わせて使用されます:
- パーセント記号 (
%): 0文字、1文字、または複数文字を表します。 - アンダースコア (
_): 単一の文字を表します。
これらパーセント記号とアンダースコアは、組み合わせて使用することも可能です。
1.1 LIKE の構文
SELECT column1, column2, ...
FROM table_name
WHERE columnN LIKE pattern;チップ:AND や OR 演算子を使用して、任意の数の条件を組み合わせることも可能です。
2. ワイルドカードのパターン例
以下は、'%' と '_' ワイルドカードを使用したさまざまなパターンの動作例です。
| LIKE 演算子 | 説明 |
|---|---|
WHERE CustomerName LIKE 'a%' | "a" で始まる任意の値を検索 |
WHERE CustomerName LIKE '%a' | "a" で終わる任意の値を検索 |
WHERE CustomerName LIKE '%or%' | 任意の場所に "or" を含む値を検索 |
WHERE CustomerName LIKE '_r%' | 2番目の文字が "r" である任意の値を検索 |
WHERE CustomerName LIKE 'a_%' | "a" で始まり、少なくとも2文字以上の長さを持つ値を検索 |
WHERE CustomerName LIKE 'a__%' | "a" で始まり、少なくとも3文字以上の長さを持つ値を検索 |
WHERE ContactName LIKE 'a%o' | "a" で始まり、"o" で終わる任意の値を検索 |
3. デモ用データベース
以下は、Northwind サンプルデータベースの「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. SQL LIKE の実践的な使用例
4.1 "a" で始まる顧客を検索
以下のSQLは、CustomerNameが "a" で始まるすべての顧客を選択します。
/* CustomerNameが 'a' で始まる顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName LIKE 'a%';4.2 "a" で終わる顧客を検索
以下のSQLは、CustomerNameが "a" で終わるすべての顧客を選択します。
/* CustomerNameが 'a' で終わる顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName LIKE '%a';4.3 任意の場所に "or" を含む顧客を検索
以下のSQLは、CustomerNameのどの位置にでも "or" を含むすべての顧客を選択します。
/* CustomerNameのどこかに 'or' を含む顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName LIKE '%or%';4.4 2文字目が "r" である顧客を検索
以下のSQLは、CustomerNameの2番目の文字が "r" であるすべての顧客を選択します。
/* 2文字目が 'r' の顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName LIKE '_r%';4.5 "a" で始まり、少なくとも3文字以上の長さを持つ顧客を検索
以下のSQLは、CustomerNameが "a" で始まり、かつ3文字以上の長さを持つすべての顧客を選択します。
/* 'a' で始まり、3文字以上の長さの顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName LIKE 'a__%';4.6 "a" で始まり、"o" で終わる担当者を検索
以下のSQLは、ContactNameが "a" で始まり、かつ "o" で終わるすべての顧客を選択します。
/* ContactNameが 'a' で始まり 'o' で終わる顧客をすべて取得 */
SELECT * FROM Customers
WHERE ContactName LIKE 'a%o';4.7 "a" で始まらない顧客を検索 (NOT LIKE)
以下のSQLは、CustomerNameが "a" で始まらないすべての顧客を選択します。
/* CustomerNameが 'a' で始まらない顧客をすべて取得 */
SELECT * FROM Customers
WHERE CustomerName NOT LIKE 'a%';