SQL入門 STEP4|WHEREで条件を指定しよう
必要なデータだけ取得したいときは?
STEP3では、SELECTを使ってproductsテーブルからデータを取得しました。
例えば、次のSQLです。
SELECT * FROM products;このSQLを実行すると、テーブルに入っている商品がすべて取得されます。
現在は5件だけなので、全部表示されてもそれほど困りません。
ですが、商品が100件、1000件と増えてきたらどうでしょうか。
「商品IDが3の商品だけ確認したい」
というときに、すべての商品を取得してその中から探すのは大変です。
そんなときに使うのがWHEREです。
WHEREとは?
SELECTでデータを取得するときに、条件を指定するために使います。
例えば、
- 商品IDが3の商品
- 価格が5000円以上の商品
- 商品名が「マウス」の商品
といった条件で、取得するデータを絞り込めます。

SELECTで全部見るだけじゃなくて、欲しいデータを探せるようになるんだね♪
商品IDを指定して取得してみよう
まずは、商品IDが3の商品だけ取得してみます。
Query Toolで次のSQLを実行してください。
SELECT * FROM products
WHERE product_id = 3;実行すると、次のような結果になります。
product_id | product_name | price
-----------+--------------+------
3 | キーボード | 8000商品IDが3のキーボードだけ取得できました。
書き方を確認してみましょう。
WHERE product_id = 3これは、
「product_idが3と等しい」
という条件です。
WHEREの後ろに、どのようなデータを取得したいのかを書いています
「=」は同じ値かを比較する
先ほどのSQLでは、
product_id = 3と書きました。
SQLの=は、左側と右側の値が等しいかを比較するときに使います。
Javaを学んだ方は、
productId == 3のような書き方を思い浮かべるかもしれません。
SQLでは、値が等しいかを比較するときも=を使います。
JavaとSQLでは書き方が違う
Java
productId == 3SQL
product_id = 3どちらも値が等しいかを比較していますが、使う記号が違います。
Javaの感覚で==と書かないように注意しましょう。
価格を条件にしてみよう
WHEREでは、同じ値だけでなく、価格などの大小も条件にできます。
例えば、
「価格が5000円以上の商品」
を取得してみましょう。
SELECT * FROM products
WHERE price >= 5000;実行すると、
product_id | product_name | price
-----------+--------------+-------
1 | ノートPC | 120000
3 | キーボード | 8000
4 | モニター | 30000となります。
マウスは3000円、USBメモリは2000円なので、今回の結果には含まれません。
>=は「以上」を表します。
比較演算子を確認しよう
条件を指定するときに使う=や>=のような記号を、比較演算子と呼びます。
よく使うものを確認しておきましょう。
| 比較演算子 | 意味 | 例 |
|---|---|---|
= | 等しい | price = 3000 |
<> | 等しくない | price <> 3000 |
> | より大きい | price > 3000 |
< | より小さい | price < 3000 |
>= | 以上 | price >= 3000 |
<= | 以下 | price <= 3000 |
例えば、
SELECT * FROM products
WHERE price < 5000;とすると、5000円より安い商品を取得できます。
結果は、
product_id | product_name | price
-----------+--------------+------
2 | マウス | 3000
5 | USBメモリ | 2000となります。

「以上」と「より大きい」は少し違うよ!
5000円を含めたいなら>= 5000だね♪
商品名を条件にしてみよう
数値だけでなく、文字も条件にできます。
今度は「マウス」という商品を探してみましょう。
SELECT * FROM products
WHERE product_name = 'マウス';実行すると、マウスだけが取得されます。
product_id | product_name | price
-----------+--------------+------
2 | マウス | 3000ここで注目したいのが、
'マウス'の部分です。
文字を条件として指定するときは、シングルクォーテーション'で囲みます。
数値の3や5000には付けていなかったので、見比べてみましょう。
WHERE product_id = 3WHERE product_name = 'マウス'数値と文字では書き方が違います。
これは今後のSQLでも何度も出てくるので、実際に書きながら覚えていけば大丈夫です。
複数の条件を指定してみよう
ここまでは条件を1つだけ指定してきました。
WHEREでは、複数の条件を組み合わせることもできます。
例えば、
「価格が3000円以上、かつ10000円以下の商品」
を取得してみます。
SELECT * FROM products
WHERE price >= 3000
AND price <= 10000;実行結果は次のようになります。
product_id | product_name | price
-----------+--------------+------
2 | マウス | 3000
3 | キーボード | 8000ANDは、両方の条件を満たすデータを取得したいときに使います。
今回なら、
3000円以上
かつ
10000円以下の両方を満たす商品が対象です。
ORを使ってみよう
「どちらかの条件を満たせばいい」という場合はORを使います。
例えば、
「商品IDが1、または商品IDが5の商品」
を取得してみましょう。
SELECT * FROM products
WHERE product_id = 1
OR product_id = 5;結果は、
product_id | product_name | price
-----------+--------------+-------
1 | ノートPC | 120000
5 | USBメモリ | 2000となります。
ANDとOR
AND
→ 両方の条件を満たす
OR
→ どちらかの条件を満たす
Javaで条件分岐を学んだ方は、&&と||に近い役割と考えると分かりやすいです。
ただし、SQLではANDとORを使います。
ANDとORを一緒に使うときは?
少しだけ注意しておきたいのが、ANDとORを同じSQLで使う場合です。
条件が増えると、
「どことどこがセットなのか」
が分かりにくくなってきます。
そんなときは、()を使って条件をまとめることができます。
例えば、
WHERE (product_id = 1 OR product_id = 5)
AND price >= 2000のように書けます。
()で囲むことで、
「商品IDが1または5」という条件をひとまとまり
として見ることができます。
複雑な条件を書くようになると、この()がとても大切になります。
今の段階では、ANDとORを組み合わせるときは、分かりやすいように()を使うことがあると覚えておけば十分です。
SELECTするカラムとWHEREのカラムは同じでなくてもいい
ここは最初につまずきやすいところです。
例えば、次のSQLを見てみましょう。
SELECT product_name, price FROM products
WHERE product_id = 3;取得するカラムとして指定しているのは、
product_name, priceです。
一方、WHEREで条件に使っているのは、
product_idです。
実行結果には、
product_name | price
-------------+------
キーボード | 8000と表示されます。
product_idは条件を調べるために使っていますが、取得するカラムには指定していないため結果には表示されません。

探すために使うカラムと、結果に表示するカラムは別々に決められるんだね!
よくある間違い
文字をシングルクォーテーションで囲んでいない
商品名のような文字を指定するときは、
WHERE product_name = 'マウス'のように'で囲みます。
文字をそのまま書かないように注意しましょう。
Javaと同じように「==」を書いてしまう
SQLで等しいことを表すときは、
WHERE product_id = 3と書きます。
==ではなく=です。
「以上」と「より大きい」を間違える
> 5000円より大きい
>= 5000円以上>=なら5000円も条件に含まれますが、>では5000円は含まれません。
境界の値を含めたいのかどうかを確認して使い分けましょう。
STEP4のまとめ
STEP4のポイント
WHEREを使うと取得するデータを絞り込める=で等しい値を条件にできる>や>=などを使って大小を比較できる- 文字は
'で囲んで指定する ANDは両方の条件を満たすデータを取得するORはどちらかの条件を満たすデータを取得する- SELECTするカラムとWHEREで使うカラムは同じでなくてもよい
今回はWHEREを使って、必要な商品だけを取得できるようになりました。
最初は比較演算子をすべて覚えようとしなくても大丈夫です。
「5000円以上ならどう書くんだっけ?」となったら、その都度確認しながら使っていきましょう。
何度かSQLを書いているうちに、自然と使えるようになります。

STEP4クリア!
欲しいデータだけを探せるようになったね♪
次のSTEPへ
WHEREを使えば、条件に合った商品を取得できるようになりました。
ただ、今の状態では取得した商品の並び順までは指定していません。
商品を確認するときには、
「価格が安い順に見たい」
「価格が高い商品から見たい」
ということもあります。
次のSTEPでは、ORDER BYを使って取得結果を好きな順番に並び替えてみましょう。
学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。
