SQL入門 STEP4|WHEREで条件を指定しよう

karin@taishi@felmia

必要なデータだけ取得したいときは?

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 == 3

SQL

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 = 3
WHERE product_name = 'マウス'

数値と文字では書き方が違います。

これは今後のSQLでも何度も出てくるので、実際に書きながら覚えていけば大丈夫です。

複数の条件を指定してみよう

ここまでは条件を1つだけ指定してきました。

WHEREでは、複数の条件を組み合わせることもできます。

例えば、

「価格が3000円以上、かつ10000円以下の商品」

を取得してみます。

SELECT * FROM products
WHERE price >= 3000
AND price <= 10000;

実行結果は次のようになります。

product_id | product_name | price
-----------+--------------+------
2          | マウス        | 3000
3          | キーボード     | 8000

ANDは、両方の条件を満たすデータを取得したいときに使います。

今回なら、

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を使って取得結果を好きな順番に並び替えてみましょう。

→ STEP5「ORDER BYで並び替えよう」

学習内容を確認したいときは、SQL入門の一覧から各STEPを確認できます。

→ SQL入門|初心者が基礎から学べるSQL学習ガイド

記事URLをコピーしました