PostgreSQLのIN・NOT IN完全入門|WHERE句で複数条件をやさしく検索する方法
生徒
「PostgreSQLでデータを探すとき、たくさんの条件をまとめて指定できるって聞いたんですが、本当ですか?」
先生
「できますよ。INやNOT INという書き方を使うと、複数の値を一気に指定して検索できます。」
生徒
「パソコンをほとんど触ったことがなくても理解できますか?」
先生
「大丈夫です。名簿から特定の人をまとめて探すイメージで、順番に説明します。」
1. PostgreSQLとSQLの基本的な考え方
PostgreSQLは、データベースと呼ばれる仕組みの一つです。データベースとは、たくさんの情報を表の形で整理して保存する大きな箱のようなものです。SQLは、その箱に対して「この条件に合うデータを見せてください」とお願いするための言葉です。
例えば、学校の名簿から「20歳以上の人だけを見たい」と思ったとき、人の目で一人ずつ確認するのは大変です。SQLを使うと、その条件を文章のように書くだけで、コンピューターが一瞬で探してくれます。
2. WHERE句とは何かをやさしく理解しよう
WHERE句は、SQLで条件を指定するときに使う部分です。「この条件に合う行だけを表示してください」という意味になります。日本語で言うと「〜だけ」という表現に近いです。
例えば「年齢が20歳の人だけ」という条件を指定したい場合、WHERE句を使います。ここで重要なのは、条件は一つだけでなく、複数指定できるという点です。
3. IN演算子で複数の値をまとめて検索する
INは「この中に含まれているかどうか」を確認するための書き方です。名簿で「山田さん、佐藤さん、鈴木さんをまとめて探したい」というときに使えます。
usersテーブル(SQL実行前)
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
2 | 佐藤花子 | 19 | hanako@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4 | 高橋次郎 | 22 | jiro@example.com
5 | 伊藤美咲 | 28 | misaki@example.com
SELECT *
FROM users
WHERE name IN ('山田太郎', '鈴木一郎');
このSQLは、「名前が山田太郎、または鈴木一郎の人を表示してください」という意味になります。
実行結果
id | name | age | email
---+------------+-----+-------------------
1 | 山田太郎 | 25 | taro@example.com
3 | 鈴木一郎 | 30 | ichiro@example.com
4. 数字のリストでもINは使える
INは文字だけでなく、数字にも使えます。例えば「年齢が19歳、22歳、28歳の人を探したい」といった場合です。
SELECT *
FROM users
WHERE age IN (19, 22, 28);
これは「年齢が19か22か28のどれかに当てはまる人」をまとめて探しています。紙の名簿で特定の年齢に丸を付けていく作業を、コンピューターが代わりにしてくれるイメージです。
5. NOT INで条件から除外する検索
NOT INは、INの逆の意味です。「この中に含まれていないもの」を探します。例えば「この人たち以外を表示したい」という場合に便利です。
SELECT *
FROM users
WHERE name NOT IN ('佐藤花子', '高橋次郎');
このSQLは、「佐藤花子さんと高橋次郎さん以外の人を表示してください」という意味になります。苦手な食べ物を避ける感覚に近い考え方です。
6. INとWHERE句を組み合わせると何が便利か
INを使うことで、条件を何度もORで書かなくて済みます。初心者の方がよく書いてしまうのが「AまたはBまたはC」という長い条件です。INを使うと、条件が短くなり、読みやすくなります。
読みやすいSQLは、後から見直したときにも理解しやすく、間違いも減らせます。これはデータベース操作ではとても大切な考え方です。
7. NULLがあるときのINとNOT INの注意点
データベースには、まだ値が入っていない状態を表すNULLという特別な値があります。NOT INを使うとき、NULLが含まれていると、思った通りの結果にならないことがあります。
初心者のうちは「空白のデータがあると、結果が変わることがある」という点だけ覚えておけば十分です。慣れてきたら、少しずつ仕組みを理解していきましょう。
8. IN検索は名簿探しの近道
PostgreSQLのINとNOT INは、たくさんの条件を一度に指定したいときの強い味方です。人の目で一つずつ探す代わりに、「このリストにあるかどうか」をコンピューターに判断してもらう仕組みです。
最初はSQLの書き方に戸惑うかもしれませんが、名簿や表を探すイメージで考えると、少しずつ理解できるようになります。