SQLのWHERE句とは?条件で絞り込む書き方をPostgreSQLで解説
SQLのWHERE句は、テーブルから条件に合う行だけを抽出するときに使います。PostgreSQLでは条件式の結果がtrueの行だけが残り、falseまたはNULLの行は除外されます。複数条件やNULL判定の基本を順に確認しましょう。
WHEREの基本構文
sql
SELECT columns
FROM table_name
WHERE condition;WHERE句で使う比較演算子
等しい条件は=、等しくない条件は<>、大小の比較は>、>=、<、<=で表します。範囲はBETWEEN、候補の一覧はIN、文字列パターンはLIKEでも書けます。WHEREの条件式は行ごとに評価され、結果がtrueになった行だけが次の処理へ進みます。
| 演算子 | 意味 | 例 |
|---|---|---|
| = | 等しい | salary = 500000 |
| <> または != | 等しくない | department <> 'Sales' |
| < | より小さい | salary < 500000 |
| <= | 以下 | salary <= 500000 |
| > | より大きい | salary > 500000 |
| >= | 以上 | salary >= 500000 |
sql
SELECT name, salary
FROM employees
WHERE salary BETWEEN 400000 AND 600000;AND・OR・NOTで複数条件を組み合わせる
ANDは両方の条件を満たす行、ORはいずれかを満たす行を抽出し、NOTは条件を反転します。PostgreSQLではNOT、AND、ORの順に優先されるため、ANDとORを混ぜる場合は括弧で評価順を明示すると安全です。
sql
SELECT name, department
FROM employees
WHERE active = true
AND (department = 'Sales' OR department = 'Support');SQLのNULLはIS NULLで判定する
NULLは「値がない、または不明」を表し、通常の値ではありません。そのためcolumn = NULLではtrueになりません。NULLかどうかはIS NULL、NULLでないことはIS NOT NULLで判定します。比較結果がNULLになった行もWHEREでは除外されます。
sql
SELECT name, manager_id
FROM employees
WHERE manager_id IS NULL;実際に1問解いてみる
=で絞り込む
名前がBobの社員を取得してください。
⌘ / Ctrl + Enter
テーブル
読み込み中…
実行結果
関連構文
WHEREについてよくある質問
- WHEREとHAVINGの違いは何ですか?
- WHEREはGROUP BYや集約より前の各行を絞り込み、HAVINGは集約後のグループを絞り込みます。通常の列条件はWHERE、COUNTやSUMなどの集約結果の条件はHAVINGに書きます。
- WHEREで複数の値を指定するには?
- 同じ列を複数候補と比較するなら、department IN ('Sales', 'Engineering') のようにINを使うと簡潔に書けます。
参考文献
内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。
- PostgreSQL公式:テーブル式とWHERE句 — WHERE句の評価と行の絞り込み
- PostgreSQL公式:比較関数と演算子 — 比較、BETWEEN、IN、NULL判定の仕様