※ この記事にはアフィリエイトリンクが含まれます

PostgreSQLでデータを検索する際、WHERE 句を使って特定の条件に一致するデータを取得します。一般的に、複数の値に対して条件を指定する場合は IN を使用することが多いですが、ANY を使うことでより柔軟な検索が可能になります。
例えば、ユーザーが特定の都市のいずれかに住んでいるかを調べる場合、以下のようなクエリが考えられます。
SELECT * FROM users WHERE city IN ('Tokyo', 'Osaka', 'Nagoya');一方で、ANY を使うと配列やサブクエリの結果と比較することができ、動的な検索に対応しやすくなります。
SELECT * FROM users WHERE city = ANY(ARRAY['Tokyo', 'Osaka', 'Nagoya']);本記事では、PostgreSQLのANY を活用した検索方法について詳しく解説し、IN との違いや適用シーンについても紹介します。
これから本格的にプログラミングを学びたい方へ
もしあなたがSQLのスキルだけでなく、「正規表現だけじゃなく、もっと本格的にプログラミングを学びたい」と思っているなら、実務レベルでのスキルが身につく「RareTECH」という学習サービスがおすすめです。
なんくる本気でやってみたい。でも何から始めたらいいか分からない。そんなときこそ、信頼できる学習環境に頼っていいんです。一人で悩む時間を、実務レベルの力に変えられます!
少しでも気になった方は、まずは無料カウンセリングで話を聞いてみるのがおすすめです。
ANYを使った基本的な使い方
ANYを使った活用方法について解説してみます。
配列と組み合わせた検索
ANY を使うと、指定した値のいずれかと一致するデータを取得できます。配列を利用すれば、IN と似た形でシンプルに記述できます。
例:特定の都市に住んでいるユーザーを検索
SELECT * FROM users WHERE city = ANY(ARRAY['Tokyo', 'Osaka', 'Nagoya']);このクエリは、city が 'Tokyo'、'Osaka'、'Nagoya' のいずれかに一致するユーザーを取得します。IN を使った場合と同様の結果になりますが、配列を利用することでプログラムから動的に値を渡しやすくなります。
サブクエリと組み合わせた検索
ANY はサブクエリと組み合わせることで、別テーブルのデータを動的に取得しながら検索することができます。
例:購入履歴があるユーザーを検索
SELECT * FROM users WHERE id = ANY(SELECT user_id FROM orders WHERE total_price > 10000);このクエリは、orders テーブルで合計金額が 10000 を超える注文をしたユーザーを取得します。
サブクエリが返す user_id のリストのいずれかと users.id が一致するデータを抽出するイメージです。
ANYを比較演算子と組み合わせる
ANY は = 以外の比較演算子とも組み合わせることができます。
例:複数の最低価格のいずれかを超える商品を検索
SELECT * FROM products WHERE price > ANY(ARRAY[1000, 2000, 3000]);このクエリでは、price が 1000、2000、3000 のいずれかを超える商品を取得します。ANY は配列内のいずれかの値に対して条件を満たせば TRUE となるため、最も小さい値(1000)さえ超えていれば結果に含まれます。
ANYを使うメリット
ANY を使うことで、以下のようなメリットがあります。
動的な検索がしやすい
ANY は配列やサブクエリと組み合わせて使用できるため、プログラムから動的に検索条件を変更しやすくなります。
たとえば、サブクエリを用いて特定の条件を満たすデータを取得する場合、以下のように記述できます。
SELECT * FROM users WHERE id = ANY(SELECT user_id FROM orders WHERE total_price > 10000);この方法なら、orders テーブルの条件を変えるだけで、users テーブルの検索対象も自動的に変わるため、柔軟なデータ取得が可能になります。
IN よりも比較演算子を自由に使える
ANY は = 以外の比較演算子とも組み合わせて使用できます。
SELECT * FROM products WHERE price > ANY(ARRAY[1000, 2000, 3000]);このクエリは、「価格が 1000、2000、3000 のいずれかを超える商品を取得」します。IN では「一致する値のみ」を検索できますが、ANY を使えば「いずれかを超える」といった条件も指定できます。
サブクエリの結果と比較できる
IN でもサブクエリを使うことは可能ですが、ANY を使うと、より細かい条件指定が可能です。
SELECT * FROM orders WHERE total_price > ANY(SELECT price FROM products WHERE category = 'Electronics');このクエリは、特定カテゴリ(Electronics)の商品価格のうち、いずれかを超える注文を取得します。
このように、動的に取得した値との比較が簡単にできるのが ANY の大きな強みです。
まとめ
本記事では、PostgreSQLのANYを使った検索方法について解説しました。ANYを活用することで、配列やサブクエリと組み合わせた柔軟な検索が可能になり、より動的な条件設定を実現できます。
本記事のポイント
✅ ANY は配列やサブクエリと組み合わせて使用できる
✅ IN よりも比較演算子の自由度が高く、柔軟な条件指定が可能
✅ サブクエリを利用することで、動的なデータ検索を実現できる
特に、ANY を活用するとサブクエリの結果と比較しながら検索できるため、複雑な条件をシンプルに記述できます。ただし、単純なリスト検索なら IN の方が可読性が高い場合もあるため、用途に応じた使い分けが重要です。
今後、PostgreSQLで効率的な検索を行う際には、ぜひ ANY の活用を検討してみてください!
PostgreSQLは、現場でも広く使われている信頼性の高いデータベースです。もしこれから本格的に学び、実務で通用する力をつけたい方には、RareTECHをチェックしてみてください。実案件ベースのカリキュラムで、あなたのスキルを次のステージへ引き上げてくれるはずです。





「本当にエンジニアとしてやっていけるか不安…」という方も、実践的な開発に関わることで、転職後の働き方を事前に体感できますよ。
実務で使えるDBスキルとともに、プログラミングスキルをちゃんと身につけたいなら、
RareTECHの無料カウンセリングで、学ぶ目的やゴールをプロと一緒に明確にしてみましょう。独学では得られない「実践的な成長の道筋」が見えてきます。


もしこの内容を通して、PostgreSQLについてさらに理解を深めたいと感じられたなら、信頼できる講座や書籍を紹介した別記事をご覧いただくのも良いかと思います。ご自身の学びに、きっとお役立ていただけるはずです。











コメント