🧚 お知らせ!Beekeeper Studio は高速でモダンなオープンソースのデータベース GUI です ダウンロード
2026年1月13日 著者: Matthew Rathbone

LIKE は、テキストがパターンに一致するかどうかを判定します。% は任意の長さの文字列、_ はちょうど1文字を表します。あるテキストを含む値、で始まる値、で終わる値を探すときに使います。例は PostgreSQL、MySQL、SQLite、SQL Server で動作します。

LIKE の使い方

LIKE は値をパターンと比較します。パターンは値全体に一致する必要があり、隙間を埋めるために2つのワイルドカードを使います。% は任意の数の文字(0文字を含む)に、_ はちょうど1文字に一致します。NOT LIKE はその逆を返します。

expression [NOT] LIKE pattern [ESCAPE escape_character]
-- In SQL Server, LIKE only works in a condition, such as a WHERE clause
SELECT 'Joe Bloggs' LIKE 'Jo%';
-- Output: true

SELECT 'Joe Bloggs' LIKE 'J_e%';
-- Output: true

SELECT 'Joe Bloggs' LIKE 'Bloggs';
-- Output: false

最後の例が false になるのは、ワイルドカードがない場合、パターンが値全体と等しくなければならないからです。クエリでは、LIKE は通常 WHERE 句に書きます。

-- Input: customers
-- id | name
-- ---+-------------
-- 1  | Joe Bloggs
-- 2  | Jane Doe
-- 3  | Joanna Smith
-- 4  | Bob Jones

SELECT name
FROM customers
WHERE name LIKE 'Jo%';

-- Output:
-- name
-- ------------
-- Joe Bloggs
-- Joanna Smith

知っておくべきルール

  • PostgreSQL の LIKE は大文字と小文字を区別します。他のデータベースはデフォルトで大文字・小文字を区別しませんが、PostgreSQL では 'Smith' LIKE 'smith' は false になります。区別したくない場合は、LOWER(name) LIKE '%smith%' のように両辺を小文字にしてください。
  • NULL は決して一致しません。NULL LIKE '%' は true ではなく NULL になるため、列が NULL の行は LIKE でも NOT LIKE でも除外されます。それらの行も含めたい場合は OR column IS NULL を追加してください。
SELECT NULL LIKE '%';
-- Output: NULL
  • % や _ を文字どおりに一致させるにはエスケープします。ワイルドカードの前にエスケープ文字を置き、ESCAPE でその文字を指定します。
-- Input: discounts
-- id | description
-- ---+---------------------
-- 1  | 50% off winter coats
-- 2  | Spend 50, save 10
-- 3  | Up to 25% off shoes

-- Without escaping, the % after 50 is a wildcard
SELECT * FROM discounts
WHERE description LIKE '%50%%';

-- Output:
-- id | description
-- ---+---------------------
-- 1  | 50% off winter coats
-- 2  | Spend 50, save 10

-- With ESCAPE '\', the \% matches a real percent sign
-- (in MySQL, write ESCAPE '\\': a single backslash escapes the quote)
SELECT * FROM discounts
WHERE description LIKE '%50\%%' ESCAPE '\';

-- Output:
-- id | description
-- ---+---------------------
-- 1  | 50% off winter coats
  • 先頭の % ではインデックスが使えません。LIKE 'INV-2026-%' のような前方一致検索は列のインデックスを使えますが、LIKE '%widget%' はすべての行を調べる必要があります。大量のテキストから単語を検索するなら、代わりにデータベースの全文検索を使ってください。

代替構文

データベース固有の次のような拡張もよく見かけます。

-- PostgreSQL: ILIKE ignores case
SELECT 'SMITH' ILIKE 'smith';
-- Output: true

-- SQL Server: [ ] in a LIKE pattern matches one character from a set or range
SELECT CASE WHEN 'B12' LIKE '[A-C]%' THEN 'match' ELSE 'no match' END;
-- Output: match

-- MySQL: REGEXP for regular expressions (PostgreSQL uses ~)
SELECT 'A12-345' REGEXP '^A[0-9]{2}-[0-9]{3}$';
-- Output: 1

パターンを使わずに、テキストが固定の文字列を含むかどうかを調べるには、その位置を求めます。文字列が含まれない場合、結果は 0 になります。

SELECT INSTR('FinTech Corp', 'Tech');
-- Output: 4

-- PostgreSQL: POSITION('Tech' IN 'FinTech Corp')
-- SQL Server: CHARINDEX('Tech', 'FinTech Corp')

SQL Server の CONTAINS() は部分文字列の判定ではありません。全文インデックスを必要とする全文検索の述語です。

LIKE はいつ使うべきか?

値の一部はわかっているけれど全体はわからない、というときに LIKE を使います。ほとんどの用途は次の4つのいずれかに当てはまります。

単語を含むテキストを探す

単語の両側に % を付けます。'%Tech%' は長い単語の中にも一致するため、「Tech Solutions Inc」「FinTech Corp」「Technology Partners」のいずれにも一致します。

値の先頭または末尾に一致させる

前方一致には 'INV-2026-%' のように末尾だけに、後方一致には '%.pdf' や '%@gmail.com' のように先頭だけに % を付けます。インデックスで高速化できるのは前方一致検索です。

固定の形式に一致させる

_ はちょうど1文字を表すので、パターンで値の形を表現できます。電話番号なら '___-___-____'、製品コードなら 'A__-___' です。NOT LIKE を使えば、同じパターンで形式に合わない値を見つけられます。

大文字・小文字を気にせず検索する

ユーザーは「smith」と入力しても、データは「Smith」かもしれません。LOWER() で両辺を小文字にすれば、PostgreSQL でも大文字・小文字を区別せずに検索できます。

LIKE の実例

複数の単語のいずれかを検索する

OR でパターンを組み合わせると、いずれかに一致する製品を探せます。

-- Input: products
-- id | name
-- ---+-----------------
-- 1  | Gaming laptop
-- 2  | Spiral notebook
-- 3  | Desk lamp
-- 4  | Desktop computer

SELECT * FROM products
WHERE name LIKE '%laptop%'
   OR name LIKE '%notebook%'
   OR name LIKE '%computer%';

-- Output:
-- id | name
-- ---+-----------------
-- 1  | Gaming laptop
-- 2  | Spiral notebook
-- 4  | Desktop computer

今年の請求書を探す

請求書番号は種別と年で始まるため、前方一致パターンで2026年の請求書を抽出し、クレジットノートを除外できます。

-- Input: invoices
-- invoice_no    | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2025-0981 | Contoso
-- CN-2026-0003  | Northwind
-- INV-2026-0040 | Fabrikam

SELECT * FROM invoices
WHERE invoice_no LIKE 'INV-2026-%';

-- Output:
-- invoice_no    | customer
-- --------------+----------
-- INV-2026-0012 | Northwind
-- INV-2026-0040 | Fabrikam

形式が誤っている電話番号を探す

1文字ごとに _ を1つ使って期待する形式を表し、NOT LIKE で修正が必要な行を一覧にします。

-- Input: customers
-- name      | phone
-- ----------+---------------
-- Ana Lima  | 555-010-1234
-- Ben Ode   | (555) 010-9876
-- Cara Diaz | 5550104321
-- Dev Rao   | 555-010-5555

SELECT name, phone FROM customers
WHERE phone NOT LIKE '___-___-____';

-- Output:
-- name      | phone
-- ----------+---------------
-- Ben Ode   | (555) 010-9876
-- Cara Diaz | 5550104321

大文字・小文字を問わず姓を探す

両辺を小文字にすれば、大文字や小文字で入力された名前も見つかります。

-- Input: customers
-- id | name
-- ---+------------
-- 1  | Anna Smith
-- 2  | BEN SMITH
-- 3  | Dana Jones
-- 4  | carla smith

SELECT * FROM customers
WHERE LOWER(name) LIKE '%smith%';

-- Output:
-- id | name
-- ---+------------
-- 1  | Anna Smith
-- 2  | BEN SMITH
-- 4  | carla smith

LIKE についてさらに学ぶ

このブログの記事:

公式ドキュメント:

Beekeeper Studioは無料のオープンソースのデータベースGUIです

これまで使った中で最高のSQLクエリ&エディタツールです。データベースの管理に必要なものがすべて揃っています。 - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studioは高速で直感的、そして使いやすいツールです。多数のデータベースに対応し、Windows、Mac、Linuxで快適に動作します。

BeekeeperのLinux版は100%フル機能。手抜きも機能の妥協も一切ありません。

Beekeeper Studio 利用者の声

★★★★★
「Beekeeper Studio は以前の SQL ワークフローを完全に置き換えてくれました。高速で直感的で、データベース作業がまた楽しくなりました。」
— Alex K.、データベース開発者
★★★★★
「多くのデータベース GUI を試しましたが、Beekeeper は機能とシンプルさのバランスが絶妙です。とにかくちゃんと動きます。」
— Sarah M.、フルスタックエンジニア