0Pricing
SQL Academy · レッスン

LIKEパターンとワイルドカード

%と_のワイルドカードをLIKEとともに使い、大文字と小文字の区別を理解し、PostgreSQLでは大文字・小文字を区別しない検索にILIKEを優先します。

「LIKEパターンとワイルドカード」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

LIKEの動作

LIKEは文字列をパターンと照合します。ワイルドカードは2種類あります。

  • % — 空を含む任意の連続した文字列
  • _ — ちょうど1文字

基本的な例

接頭辞、接尾辞、部分文字列で一致させます。

SELECT email FROM users WHERE email LIKE 'a%';        -- starts with a
SELECT email FROM users WHERE email LIKE '%@gmail.com'; -- ends with @gmail.com
SELECT email FROM users WHERE email LIKE '%admin%';     -- contains admin

1文字ワイルドカード

_はちょうど1文字にマッチします。固定幅のコードに適しています。

-- 6-char SKU starting with A:
SELECT * FROM products WHERE sku LIKE 'A_____';

-- US zip+4:
SELECT * FROM addresses WHERE zip LIKE '_____-____';

大文字と小文字の区別

PostgreSQLでは、デフォルトでLIKEは大文字と小文字を区別します。区別しない照合にはILIKEを使用してください。

SELECT * FROM users WHERE email LIKE  '%@gmail.com';  -- ✗ misses @GMAIL.com
SELECT * FROM users WHERE email ILIKE '%@gmail.com';  -- ✓

ワイルドカードのエスケープ

リテラルの%または_にマッチさせるには、バックスラッシュでエスケープします(または独自のESCAPE文字を定義します)。

-- Match strings that contain '50%':
SELECT * FROM coupons WHERE code LIKE '%50\%%';

-- Custom escape character:
SELECT * FROM coupons WHERE code LIKE '%50!%%' ESCAPE '!';

LIKEとインデックス

B-treeインデックスが役立つのは接頭辞パターンだけです。

-- Uses index (prefix is fixed):
SELECT * FROM users WHERE email LIKE 'alice%';

-- Does NOT use a normal index (leading wildcard):
SELECT * FROM users WHERE email LIKE '%example.com';

先頭ワイルドカード検索の改善

「%example%」の検索には、トライグラム(pg_trgm)GINインデックスを使用します。詳しくは「高度なインデックス」で説明します。

CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX users_email_trgm_idx ON users USING GIN (email gin_trgm_ops);

SELECT * FROM users WHERE email LIKE '%example%';  -- now indexable

NOT LIKE

一致条件を否定します。

SELECT * FROM emails WHERE subject NOT LIKE 'RE:%';

SIMILAR TOと正規表現(PostgreSQL)

より高度なパターンマッチングには、次を使用します。

-- SIMILAR TO — SQL regex (rarely used)
SELECT 'abc' SIMILAR TO '%(a|b)%';      -- TRUE

-- POSIX regex:
SELECT 'abc123' ~ '^[a-z]+[0-9]+$';     -- TRUE
SELECT 'ABC'    ~* 'abc';                -- TRUE (case insensitive)

検索ボックスの構築

ユーザー検索ボックスを接続する場合は、予期しない動作を避けるため、まず入力値に含まれるワイルドカードをサニタイズしてください。

-- Escape user input's special chars before concatenating to LIKE pattern,
-- or use to_tsquery for word-level search.

SELECT * FROM products
WHERE LOWER(name) LIKE LOWER('%' || $1 || '%');

全文検索を自作しない

文書を対象に、順位付けされた言語対応の検索を行う場合は、LIKEではなくtsvector + GINを使用してください。詳しくは後の「高度なインデックス」で説明します。

まとめ

LIKEは単純なパターンマッチングに適しています。

  • % = 任意の文字列、_ = 1文字
  • 大文字と小文字を区別しない場合はILIKEを使用する
  • 接頭辞検索にはB-treeを使用し、部分文字列検索にはトライグラムが必要

クイックチェック

.comで終わる文字列にマッチするパターンはどれですか。

よくある質問

「LIKEパターンとワイルドカード」レッスンは無料ですか?

はい。「LIKEパターンとワイルドカード」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「LIKEパターンとワイルドカード」で何を学びますか?

%と_のワイルドカードをLIKEとともに使い、大文字と小文字の区別を理解し、PostgreSQLでは大文字・小文字を区別しない検索にILIKEを優先します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「LIKEパターンとワイルドカード」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. LIKEパターンとワイルドカード
  2. 集合に対するINとNOT IN
  3. 範囲に対するBETWEEN
  4. IS NULL、IS NOT NULLとCOALESCE
← SQL Academyに戻る