English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL LIKE 演算子

このチュートリアルでは、部分一致に基づいてデータを検索する方法を学びます。

パターンマッチング

今まで、特定の文字列を識別する条件、例えばWHERE name='Lois Lane'のようなものを見てきましたが、SQLではLIKE演算子を使用して、部分またはパターンマッチングを実行することもできます。

LIKE演算子は、1つまたは複数の文字にワイルドカードを指定して、パターンマッチングの基準を提供することができます。以下の2つのワイルドカードを使用できます:

  • パーセント記号(%) - 任意数の文字、またはゼロ文字を一致させる。

  • 下線(_) - 完全に一致する文字

LIKE演算子とワイルドカードを一緒に使用する方法を示すいくつかの例です。

宣言意味返り値
WHERE name LIKE 'Da%'

で始まる名前を検索します

David, Davidson
WHERE name LIKE '%th'で始まる名前を検索しますthで終わる名前を検索しますElizabeth, Smith
WHERE name LIKE '%on%'

onを含む名前を検索します

Davidson, Toni
WHERE name LIKE 'Sa_'

Saで始まり、1文字以内を含む名前を検索します

Sa
WHERE name LIKE '_oy'

oyで終わり、1文字以内を含む名前を検索します

Joy, Roy
WHERE name LIKE '_an_'を含む名前を検索しますanの名前は、1文字で始まり、終わりますDana, Hans
WHERE name LIKE '%ar_'を含む名前を検索しますarの名前は、任意の文字数で始まり、1文字以内で終わりますRichard, Karl
WHERE name LIKE '_ar%'を含む名前を検索しますarの名前は、1文字以内で始まり、任意の文字数で終わりますKarl, Mariya

いくつかの記録を検索することで、先ほど議論した文を実際のアプリケーションに投入してみましょう。

私たちのemployeesデータベースには以下の記録を含むテーブルがあります:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 | NULL |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

今度は、S文字で始まるすべての従業員を探したいと仮定します。

SELECT * FROM employees 
WHERE emp_name LIKE 'S%';

クエリを実行した後、以下のような出力を取得します:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
|      6 | simons bistro | 2009-04-01 |   6000 |       1 |
+--------+------------------+------------+--------+---------+

MySQLでは、非二進位文字列(CHAR、VARCHAR、TEXT)の比較はデフォルトで大文字と小文字を区別しませんが、二進位文字列(BINARY、VARBINARY、BLOB)の比較は大文字と小文字を区別します。

これは、検索WHERE name LIKE 'S%'を使用すると、Sまたはsで始まるすべての列値を取得することを意味します(ご覧の通り、「Sarah」と「simons」の両方を持っています)。しかし、この検索を大文字と小文字で区別するには、BINARY演算子を使用して以下のように使用することができます:

-- MySQLデータベースの構文 
SELECT * FROM employees 
WHERE BINARY emp_name LIKE 'S%';

今、このクエリは名前が大文字のSで始まる従業員のみを返します:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      3 | Sarah Connor     | 2005-10-18 |   8000 |       5 |
+--------+------------------+------------+--------+---------+

注意:列を常に大文字小文字を区別して扱いたい場合は、区別大小文字またはバイナリソートルールを使用して宣言し、性能問題を避けるためにしてください。

ヒント:検索する文字列の正確な形式がわからない場合、部分一致が非常に有用です。部分一致を使用して、列に似た文字列を含む複数の行を検索することもできます。