SQL LIKE 演算子

概要: このチュートリアルでは、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 pattern

NOT 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 句、SELECTUPDATE、および DELETE ステートメントでよく使用されます。

SQL LIKE 演算子の例

デモには、サンプルデータベースemployees テーブルを使用します。

employees_table

次の例では、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つ以上の文字と一致させるには、% ワイルドカードを使用します。
  • 単一の文字と一致させるには、_ ワイルドカードを使用します。
このチュートリアルは役に立ちましたか?