【PostgreSQL】WHERE句を使ったあいまい検索の方法を解説!

データベースを使った検索では、「完全一致」だけではなく「部分一致」や「パターンマッチング」といった柔軟な検索が必要になる場面がよくあります。例えば、商品名に特定の単語が含まれるデータを探したり、メールアドレスが特定のドメインを含むユーザーを抽出したりする場合です。

本記事では、基本的なLIKEILIKEの使い方をわかりやすく解説します。

ぜひ最後までお付き合いください!

PostgreSQLでよく使われるあいまい検索方法

PostgreSQLでは、あいまい検索を行うために以下の2つの方法がよく使用されます。

LIKE

LIKE は、特定のパターンに一致するデータを検索する際に使用します。大文字と小文字を区別するため、例えば「TEST」と「test」は別のデータとして扱われます。

基本構文

SELECT * FROM テーブル名 WHERE カラム名 LIKE 'パターン';

'パターン' の中には、ワイルドカードを含めます。よく使用されるワイルドカードは下記の2種類です。

  • %:0文字以上の任意の文字列を表します。
  • _:任意の1文字を表します。

使用例

-- 名前に「山」が含まれるデータを検索
SELECT * FROM users WHERE name LIKE '%山%';

ILIKE

ILIKELIKE と同様の機能を持ちながら、大文字と小文字を区別しない検索を実現します。PostgreSQL特有の機能で、データが英語などのアルファベットを含む場合に便利です。

基本構文

SELECT * FROM テーブル名 WHERE カラム名 ILIKE 'パターン';

使用例

-- 名前に「Test」が含まれるデータを、大文字小文字を区別せずに検索
SELECT * FROM users WHERE name ILIKE '%Test%';

これら2つの方法は、あいまい検索を簡単に実現できる便利な構文です。

大文字・小文字を区別しない検索

PostgreSQLで大文字と小文字を区別せずにあいまい検索を行いたい場合、ILIKE演算子を使用するのが便利です。ILIKEは、LIKEと同じようにパターンマッチングを行いますが、大文字・小文字を区別しない点が特徴です。

使用例

以下は、名前に「test」という文字列を含むデータを、大文字小文字を区別せずに検索する例です。

SELECT * FROM users WHERE name ILIKE '%test%';

このクエリでは、「test」「Test」「TEST」など、文字列の大小を問わず一致するデータをすべて取得できます。

大文字小文字の区別が不要な場合は、パフォーマンスを考慮してILIKEを優先的に使用するのがおすすめです。

まとめ

この記事では、PostgreSQLであいまい検索を行う方法について解説しました。

PostgreSQLのあいまい検索は、柔軟性が高く、幅広いニーズに対応可能です。一方で、適切な方法を選択し、効率を意識したクエリ設計を行うことが重要です。ぜひこの記事を参考に、実際のプロジェクトでPostgreSQLのあいまい検索を活用してみてください!

コメント