SQL練習室
← SQLガイド

SQLのWHERE句とは?条件で残る行を結果表で解説

WHEREは、表から条件に合う行だけを取り出す構文です。「営業の社員」「月給35万円以上の社員」など、見たい人を選べます。元の5行のうち、どの行が残るかを条件ごとに確かめましょう。

例で使う表

employeesの1行が社員1人分です。営業が2人、開発が2人、サポートが1人います。salaryは月給(円)で、恵比寿さんのNULLは月給が未入力であることを表し、0円とは区別します。すべての例でこの5人を使います。結果表の行の並びは一例です。ORDER BYで指定しない限り、表示順は保証されません。

employees:社員5人の一覧(salaryは月給・円)
id(社員ID)name(名前)department(部署)salary(月給)
1青木営業300000
2北野開発400000
3中央営業350000
4大和開発400000
5恵比寿サポートNULL

WHEREの基本構文

sql
SELECT name, department
FROM employees
WHERE department = '営業';

等しい条件で営業の社員を選ぶ

営業の人だけを見るには、WHERE department = '営業'と書きます。=は左右が等しいという条件です。文字列の営業はシングルクォートで囲みます。元の表で営業なのは青木さんと中央さんなので、結果は2行です。

sql
SELECT name, department
FROM employees
WHERE department = '営業';
実行結果
namedepartment
青木営業
中央営業

比較演算子で月給35万円以上を選ぶ

>=は「以上」を表します。350000円の中央さんも含め、北野さん・中央さん・大和さんの3行が残ります。>にすると350000円ちょうどの中央さんは含まれません。月給が未入力の恵比寿さんは、この比較では条件に合うと判定されません。

sql
SELECT name, salary
FROM employees
WHERE salary >= 350000;
実行結果
namesalary
北野400000
中央350000
大和400000

ANDで両方の条件を満たす人を選ぶ

営業で、かつ月給が350000円以上の人を選びます。ANDは両方の条件が成立する場合だけ残します。営業の2人のうち、青木さんは300000円なので外れ、中央さんだけになります。

sql
SELECT name, department, salary
FROM employees
WHERE department = '営業'
  AND salary >= 350000;
実行結果
namedepartmentsalary
中央営業350000

ORでいずれかの条件を満たす人を選ぶ

営業またはサポートの人を選びます。ORはどちらかの条件が成立すれば残します。青木さん・中央さんに加え、サポートの恵比寿さんも表示されます。今回は月給を条件にしていないので、月給がNULLでも残ります。

sql
SELECT name, department
FROM employees
WHERE department = '営業'
  OR department = 'サポート';
実行結果
namedepartment
青木営業
中央営業
恵比寿サポート

INで同じ列の候補をまとめる

同じdepartment列を複数の候補と比べるなら、INで候補を並べられます。下のSQLは前のORの例と同じ3人を返します。候補が増えても、同じ列名を何度も書かずに済みます。

sql
SELECT name, department
FROM employees
WHERE department IN ('営業', 'サポート');
実行結果
namedepartment
青木営業
中央営業
恵比寿サポート

BETWEENで月給の範囲を指定する

BETWEEN 300000 AND 350000は300000円以上、350000円以下です。両端の金額を含むので、青木さんと中央さんが残ります。ここでのANDは範囲の下限と上限をつなぐ書き方です。

sql
SELECT name, salary
FROM employees
WHERE salary BETWEEN 300000 AND 350000;
実行結果
namesalary
青木300000
中央350000

LIKEで名前の一部を使って探す

北で始まる名前はLIKE '北%'で探せます。%は0文字以上の任意の文字列を表すため、北野さんが一致します。完全に同じ名前を探す=と、パターンを指定するLIKEを使い分けます。

sql
SELECT name
FROM employees
WHERE name LIKE '北%';
実行結果
name
北野

IS NULLで月給が未入力の人を探す

NULLは通常の値と同じようには比較できないため、salary = NULLとは書きません。未入力かどうかはIS NULLで判定します。今回の表では恵比寿さんだけが残ります。入力済みの人はIS NOT NULLで選べます。

sql
SELECT name, salary
FROM employees
WHERE salary IS NULL;
実行結果
namesalary
恵比寿NULL

実際に1問解いてみる

=で絞り込む

名前がBobの社員を取得してください。

テーブル

読み込み中…

実行結果

関連構文

WHEREについてよくある質問

「等しくない」はどう書きますか?
<>を使います。department <> '営業'なら営業以外の部署を選べます。ただし比較する値がNULLの場合は、等しくないと確定できないためその行も除外されます。
WHEREとHAVINGはどう違いますか?
WHEREは元の行を絞ります。HAVINGは部署ごとの人数など、集計した結果を条件にするときに使います。

参考文献

内容はPostgreSQL公式ドキュメントを参照し、初めて学ぶ人向けに日本語で整理しています。