乗員が7人だけならひと目で選べますが、これが7000人だったら? ある条件に合う人だけを見つけたいとき、SQLはどう書けばいいでしょう?
これまでのSELECTは「全部の行」を取り出すものでした。今回は「条件に合う行だけ」を取り出す方法を学びます。少し考えてから読み進めてください。
WHERE句の位置と役割
SQLで行を絞り込むには、WHERE句を使います。書く位置はいつも同じで、FROM句のすぐあとです。
SELECT 列名
FROM テーブル名
WHERE 条件;
宇宙ステーション「アマテラス」の乗員名簿、crewテーブルで試してみましょう。
crew テーブル:
| id | name | role | age | home | salary |
|---|---|---|---|---|---|
| 1 | ユミ | エンジニア | 24 | 地球 | 320000 |
| 2 | ケンジ | パイロット | 35 | 火星 | 400000 |
| 3 | サクラ | 医師 | 41 | 地球 | 520000 |
| 4 | ハルト | 医師 | 33 | 月 | 450000 |
| 5 | レイ | 研究員 | 29 | 火星 | 380000 |
| 6 | ミドリ | パイロット | 27 | 地球 | 360000 |
| 7 | ソラ | エンジニア | 45 | 月 | 470000 |
| 8 | トウマ | 研究員 | 24 | NULL | 270000 |
| 9 | アカリ | エンジニア | 31 | 火星 | 350000 |
| 10 | リョウ | パイロット | 38 | NULL | 440000 |
「パイロットだけを見たい」なら、こう書きます。
SELECT name, role
FROM crew
WHERE role = 'パイロット';
結果:
| name | role |
|---|---|
| ケンジ | パイロット |
| ミドリ | パイロット |
| リョウ | パイロット |
FROM句で「どのテーブルから」を指定したあと、WHERE句が「その中のどの行を残すか」をふるいにかけている、とイメージすると分かりやすいです。WHEREがなければ全ての行が対象、WHEREがあれば条件に一致した行だけが残ります。
比較演算子(= != <> < > <= >=)
条件を作るときによく使う比較演算子は、次の7つです。
=― 等しい!=または<>― 等しくない<― より小さい>― より大きい<=― 以下>=― 以上
年齢が30より大きい乗員を探してみましょう。
SELECT name, age
FROM crew
WHERE age > 30;
結果:
| name | age |
|---|---|
| ケンジ | 35 |
| サクラ | 41 |
| ハルト | 33 |
| ソラ | 45 |
| アカリ | 31 |
| リョウ | 38 |
「地球出身ではない」乗員を探すなら、!=(または<>)を使います。
SELECT name, home
FROM crew
WHERE home != '地球';
結果:
| name | home |
|---|---|
| ケンジ | 火星 |
| ハルト | 月 |
| レイ | 火星 |
| ソラ | 月 |
| アカリ | 火星 |
文字列条件のクォート
ここで気づいた方もいるかもしれません。role = 'パイロット'やhome != '地球'は文字列をシングルクォート(')で囲んでいますが、age > 30の30は囲んでいません。
これはSQLのルールです。文字列はクォートで囲み、数値は囲まない。クォートを忘れると、SQLは「パイロット」を文字の並びではなく列名か何かと誤解し、エラーになってしまいます。
-- ○ 正しい:文字列はクォートで囲む
WHERE role = 'エンジニア'
-- × エラーになりやすい:文字列なのにクォートがない
WHERE role = エンジニア
文字列はクォートあり、数値はクォートなし——このルールを、まずは手で覚えてしまいましょう。
salaryが350000以上の乗員を取り出すWHERE句は、次のうちどちらでしょう? WHERE salary => 350000 か WHERE salary >= 350000
答えを見る
正解はWHERE salary >= 350000です。「以上」を表す演算子は>=の順番で書きます。=>のように順番を逆にするとエラーになるので注意しましょう。
WHERE句が使えると、SQLは一気に実用的になります。次回は「複数の条件を同時に満たす行」を探す方法を学びます。
/sql/game/ の SQL DIVER で、実際にタイプして試してみましょう。WHERE句を自分の手で書く感覚を、ぜひ体に覚え込ませてください。
WHEREはSQLの主役級の存在。「文字列はクォート、数値は裸」——これだけ覚えれば、もう条件文でつまずかないよ!