SQLのWHERE句とは?条件で残る行を結果表で解説
WHEREは、表から条件に合う行だけを取り出す構文です。「営業の社員」「月給35万円以上の社員」など、見たい人を選べます。元の5行のうち、どの行が残るかを条件ごとに確かめましょう。
例で使う表
employeesの1行が社員1人分です。営業が2人、開発が2人、サポートが1人います。salaryは月給(円)で、恵比寿さんのNULLは月給が未入力であることを表し、0円とは区別します。すべての例でこの5人を使います。結果表の行の並びは一例です。ORDER BYで指定しない限り、表示順は保証されません。
| id(社員ID) | name(名前) | department(部署) | salary(月給) |
|---|---|---|---|
| 1 | 青木 | 営業 | 300000 |
| 2 | 北野 | 開発 | 400000 |
| 3 | 中央 | 営業 | 350000 |
| 4 | 大和 | 開発 | 400000 |
| 5 | 恵比寿 | サポート | NULL |
WHEREの基本構文
SELECT name, department
FROM employees
WHERE department = '営業';等しい条件で営業の社員を選ぶ
営業の人だけを見るには、WHERE department = '営業'と書きます。=は左右が等しいという条件です。文字列の営業はシングルクォートで囲みます。元の表で営業なのは青木さんと中央さんなので、結果は2行です。
SELECT name, department
FROM employees
WHERE department = '営業';| name | department |
|---|---|
| 青木 | 営業 |
| 中央 | 営業 |
比較演算子で月給35万円以上を選ぶ
>=は「以上」を表します。350000円の中央さんも含め、北野さん・中央さん・大和さんの3行が残ります。>にすると350000円ちょうどの中央さんは含まれません。月給が未入力の恵比寿さんは、この比較では条件に合うと判定されません。
SELECT name, salary
FROM employees
WHERE salary >= 350000;| name | salary |
|---|---|
| 北野 | 400000 |
| 中央 | 350000 |
| 大和 | 400000 |
ANDで両方の条件を満たす人を選ぶ
営業で、かつ月給が350000円以上の人を選びます。ANDは両方の条件が成立する場合だけ残します。営業の2人のうち、青木さんは300000円なので外れ、中央さんだけになります。
SELECT name, department, salary
FROM employees
WHERE department = '営業'
AND salary >= 350000;| name | department | salary |
|---|---|---|
| 中央 | 営業 | 350000 |
ORでいずれかの条件を満たす人を選ぶ
営業またはサポートの人を選びます。ORはどちらかの条件が成立すれば残します。青木さん・中央さんに加え、サポートの恵比寿さんも表示されます。今回は月給を条件にしていないので、月給がNULLでも残ります。
SELECT name, department
FROM employees
WHERE department = '営業'
OR department = 'サポート';| name | department |
|---|---|
| 青木 | 営業 |
| 中央 | 営業 |
| 恵比寿 | サポート |
INで同じ列の候補をまとめる
同じdepartment列を複数の候補と比べるなら、INで候補を並べられます。下のSQLは前のORの例と同じ3人を返します。候補が増えても、同じ列名を何度も書かずに済みます。
SELECT name, department
FROM employees
WHERE department IN ('営業', 'サポート');| name | department |
|---|---|
| 青木 | 営業 |
| 中央 | 営業 |
| 恵比寿 | サポート |
BETWEENで月給の範囲を指定する
BETWEEN 300000 AND 350000は300000円以上、350000円以下です。両端の金額を含むので、青木さんと中央さんが残ります。ここでのANDは範囲の下限と上限をつなぐ書き方です。
SELECT name, salary
FROM employees
WHERE salary BETWEEN 300000 AND 350000;| name | salary |
|---|---|
| 青木 | 300000 |
| 中央 | 350000 |
LIKEで名前の一部を使って探す
北で始まる名前はLIKE '北%'で探せます。%は0文字以上の任意の文字列を表すため、北野さんが一致します。完全に同じ名前を探す=と、パターンを指定するLIKEを使い分けます。
SELECT name
FROM employees
WHERE name LIKE '北%';| name |
|---|
| 北野 |
IS NULLで月給が未入力の人を探す
NULLは通常の値と同じようには比較できないため、salary = NULLとは書きません。未入力かどうかはIS NULLで判定します。今回の表では恵比寿さんだけが残ります。入力済みの人はIS NOT NULLで選べます。
SELECT name, salary
FROM employees
WHERE salary IS NULL;| name | salary |
|---|---|
| 恵比寿 | NULL |
実際に1問解いてみる
=で絞り込む
名前がBobの社員を取得してください。
テーブル
読み込み中…
実行結果
関連構文
WHEREについてよくある質問
- 「等しくない」はどう書きますか?
- <>を使います。department <> '営業'なら営業以外の部署を選べます。ただし比較する値がNULLの場合は、等しくないと確定できないためその行も除外されます。
- WHEREとHAVINGはどう違いますか?
- WHEREは元の行を絞ります。HAVINGは部署ごとの人数など、集計した結果を条件にするときに使います。
参考文献
内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。
- PostgreSQL公式:WHERE句 — WHERE句の仕様と使用例
- PostgreSQL公式:比較とNULL判定 — 比較とNULL判定の仕様と使用例
- PostgreSQL公式:LIKE — LIKEの仕様と使用例
- PostgreSQL公式:論理演算子 — 論理演算子の仕様と使用例