概要: このチュートリアルでは、SQL LIKE 演算子を使用して、値がパターンと一致するかどうかをテストする方法を学習します。
SQL LIKE 演算子の概要
LIKE 演算子は、SQL 論理演算子の1つです。 LIKE 演算子は、値がパターンと一致する場合は true を返し、そうでない場合は false を返します。
LIKE 演算子の構文は次のとおりです。
expression LIKE patternCode language: SQL (Structured Query Language) (sql)この構文では、LIKE 演算子は式がパターンと一致するかどうかをテストします。 SQL 標準では、パターンを作成するための2つのワイルドカード文字が提供されています。
-
%パーセント記号のワイルドカードは、ゼロ個、1個、または複数の文字と一致します。 -
_アンダーバーのワイルドカードは、単一の文字と一致します。
以下は、%および_ワイルドカード文字の使用例を示しています。
| 式 | 意味 |
|---|---|
LIKE 'Kim%' | Kim で始まる文字列と一致します。 |
LIKE '%er' | er で終わる文字列と一致します。 |
LIKE '%ch%' | ch を含む文字列と一致します。 |
LIKE 'Le_' | Le で始まり、1文字が続く文字列と一致します(例:Les、Lenなど)。 |
LIKE '_uy' | uy で終わり、1文字が前にある文字列と一致します(例:guy)。 |
LIKE '%are_' | are を含み、1文字で終わる文字列と一致します。 |
LIKE '_are%' | are を含み、1文字で始まり、任意の数の文字で終わる文字列と一致します。 |
%および_ワイルドカードに加えて、一部のデータベースシステムには、それらのデータベースに固有の他のワイルドカード文字がある場合があります。
NOT LIKE
LIKE 演算子を否定するには、NOT 演算子を使用します。
expression NOT LIKE patternNOT LIKE 演算子は、式がパターンと一致しない場合は true を返し、そうでない場合は false を返します。
エスケープ文字
たとえば、10% のようなワイルドカードを含む文字列と一致させるには、LIKE 演算子に 10% の % を通常の文字として扱うように指示する必要があります。
そのためには、ESCAPE 句の後にエスケープ文字を明示的に指定する必要があります。
expression LIKE pattern ESCAPE escape_characterCode language: SQL (Structured Query Language) (sql)例えば
value LIKE '%10!%%' ESCAPE '!'Code language: JavaScript (javascript)この例では、!はエスケープ文字です。 LIKE 演算子に 10% の % を通常の文字として扱うように指示します。
実際には、LIKE 演算子は、WHERE 句、SELECT、UPDATE、および DELETE ステートメントでよく使用されます。
SQL LIKE 演算子の例
デモには、サンプルデータベースの employees テーブルを使用します。

次の例では、LIKE 演算子を使用して、名(first_name)が Da で始まるすべての従業員を検索します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Da%';Code language: SQL (Structured Query Language) (sql)+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 105 | David | Austin |
| 109 | Daniel | Faviet |
+-------------+------------+-----------+Code language: plaintext (plaintext)次の例では、LIKE 演算子を使用して、名(first_name)が er で終わるすべての従業員を検索します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%er';Code language: SQL (Structured Query Language) (sql)+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 103 | Alexander | Hunold |
| 115 | Alexander | Khoo |
| 200 | Jennifer | Whalen |
+-------------+------------+-----------+Code language: plaintext (plaintext)次の例では、LIKE 演算子を使用して、姓(last_name)に an という単語が含まれる従業員を検索します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
last_name LIKE '%an%';Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-----------+
| employee_id | first_name | last_name |
+-------------+-------------+-----------+
| 102 | Lex | De Haan |
| 112 | Jose Manuel | Urman |
| 123 | Shanta | Vollman |
| 178 | Kimberely | Grant |
+-------------+-------------+-----------+Code language: plaintext (plaintext)次のステートメントは、名(first_name)が Jo で始まり、最大2文字が続く従業員を取得します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'Jo__';Code language: SQL (Structured Query Language) (sql)+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 110 | John | Chen |
| 145 | John | Russell |
+-------------+------------+-----------+Code language: plaintext (plaintext)次のステートメントは、LIKE 演算子と%および_ワイルドカードを使用して、名(first_name)が任意の数の文字で始まり、最大1文字が続く従業員を検索します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE '%are_';Code language: SQL (Structured Query Language) (sql)+-------------+------------+------------+
| employee_id | first_name | last_name |
+-------------+------------+------------+
| 119 | Karen | Colmenares |
| 146 | Karen | Partners |
+-------------+------------+------------+SQL NOT LIKE 演算子の例
次の例では、NOT LIKE 演算子を使用して、名(first_name)が文字 S で始まるが、Sh で始まらないすべての従業員を検索します。
SELECT
employee_id,
first_name,
last_name
FROM
employees
WHERE
first_name LIKE 'S%'
AND first_name NOT LIKE 'Sh%'
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)+-------------+------------+-----------+
| employee_id | first_name | last_name |
+-------------+------------+-----------+
| 192 | Sarah | Bell |
| 117 | Sigal | Tobias |
| 100 | Steven | King |
| 203 | Susan | Mavris |
+-------------+------------+-----------+Code language: plaintext (plaintext)まとめ
LIKE演算子は、値がパターンと一致する場合は true を返し、そうでない場合は false を返します。- LIK 演算子を否定するには、
NOT演算子を使用します。 - 1つ以上の文字と一致させるには、
%ワイルドカードを使用します。 - 単一の文字と一致させるには、
_ワイルドカードを使用します。