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 admin1文字ワイルドカード
_はちょうど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 indexableNOT 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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- LIKEパターンとワイルドカード
- 集合に対するINとNOT IN
- 範囲に対するBETWEEN
- IS NULL、IS NOT NULLとCOALESCE