言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. SQL辞典
  3. LIKE

LIKE

対応: SQL-92(1992)

文字列の部分一致や前方一致・後方一致などのパターンマッチング検索を行う演算子です。

構文

パターンに一致する行を取得します。

SELECT 列名 FROM テーブル名 WHERE 列名 LIKE 'パターン';

パターンに一致しない行を取得します。

SELECT 列名 FROM テーブル名 WHERE 列名 NOT LIKE 'パターン';

ESCAPEでワイルドカード文字をエスケープします。

SELECT 列名 FROM テーブル名 WHERE 列名 LIKE 'パターン' ESCAPE 'エスケープ文字';

ワイルドカード一覧

ワイルドカード概要
%0文字以上の任意の文字列に一致します。前方一致・後方一致・部分一致のすべてに使用できます。
_(アンダースコア)任意の1文字に一致します。文字数が決まっている場合に使用します。
NOT LIKEパターンに一致しない行を取得します。
ESCAPE '文字'指定した文字をエスケープ文字として扱い、ワイルドカードをリテラル文字として検索できます。

サンプルコード

以下の『employees』テーブルを例に説明します。

employees id name email 1 user_a user_a@wp-p.info 2 user_c user_b@wp-p.info 3 user_e user_c@wp-p.info 4 user_b user_d@wp-p.info 4 rows in set

メールアドレスが「user_a」で始まる社員を取得します(前方一致)。

sample_like.sql
SELECT name FROM employees WHERE email LIKE 'user_a%';
+--------+
| name   |
+--------+
| user_a |
+--------+
1 row in set

メールアドレスが「info」で終わる社員を取得します(後方一致)。

sample_like.sql
SELECT name FROM employees WHERE email LIKE '%info';
+--------+
| name   |
+--------+
| user_a |
| user_c |
| user_e |
| user_b |
+--------+
4 rows in set

メールアドレスに「user_c」を含む社員を取得します(部分一致)。

sample_like.sql
SELECT name FROM employees WHERE email LIKE '%user_c%';
+--------+
| name   |
+--------+
| user_e |
+--------+
1 row in set

名前がちょうど6文字の社員を取得します(_は1文字に一致)。

sample_like.sql
SELECT name FROM employees WHERE name LIKE '______';
+--------+
| name   |
+--------+
| user_a |
| user_c |
| user_e |
| user_b |
+--------+
4 rows in set

メールアドレスのユーザー名部分に「user_b」を含む社員を除外します(NOT LIKEで除外)。

sample_like.sql
SELECT name, email FROM employees WHERE email NOT LIKE 'user_b%';
+--------+------------------+
| name   | email            |
+--------+------------------+
| user_a | user_a@wp-p.info |
| user_e | user_c@wp-p.info |
| user_b | user_d@wp-p.info |
+--------+------------------+
3 rows in set

メールアドレスに「_」(アンダースコア)そのものを含む行を検索します(_をリテラルとして扱います)。

sample_like.sql
SELECT name FROM employees WHERE email LIKE '%\_%' ESCAPE '\';
+--------+
| name   |
+--------+
| user_a |
| user_c |
| user_e |
| user_b |
+--------+
4 rows in set

データベース別の書き方

『LIKE』の基本構文(『%』『_』ワイルドカード)は主要なデータベースで共通して使用できます。

SELECT name FROM employees WHERE email LIKE 'user_a%';

大文字・小文字の区別はデータベースによって異なります。MySQLはデフォルトで区別しません(照合順序が ci の場合)。PostgreSQLは区別するため、区別しない検索には『ILIKE』を使用します。

-- PostgreSQL(大文字・小文字を区別しないLIKE)
SELECT name, email FROM employees WHERE email ILIKE '%@EXAMPLE.COM';

正規表現による高度なパターンマッチングは、データベースごとに異なる構文を使用します。

-- MySQL(REGEXP演算子)
SELECT name FROM employees WHERE name REGEXP '^user_[ab]';

-- PostgreSQL(~演算子)
SELECT name FROM employees WHERE name ~ '^user_[ab]';

概要

『LIKE』はテキスト検索でよく使用される演算子です。『%』は任意の長さの文字列、『_』は任意の1文字に一致します。

『LIKE』を前方一致(例:『user_a%』)で使用した場合はインデックスが有効に機能しますが、中間一致(例:『%user%』)や後方一致(例:『%info』)ではインデックスが使用されずテーブルフルスキャンが発生します。大量データのあるテーブルでの使用には注意してください。

MySQLでは大文字・小文字を区別しない照合順序(ci: case insensitive)がデフォルトのため、『LIKE 'abc%'』と『LIKE 'ABC%'』は同じ結果になります。大文字・小文字を区別したい場合は『BINARY』キーワードを使用します。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。