WHERE
はじめに
WHERE は検索条件をフィルタするための便利なコマンドで
基本形4パターンの検索、更新、削除、挿入の全てと一緒に使えます
Excelで言うとフィルターボタンでカラムの値をフィルタできます
WHEREコマンドはこれを文字で書くイメージです
WHEREのサンプル
が基本の形です
下記の例では
SELECT * FROM product WHERE 商品名 =”ドリップコーヒー”
productテーブルから
「商品名カラムの値が “ドリップコーヒー” のデータを探して」
というコマンドになります
Excelでフィルターで”ドリップコーヒー”を選んでフィルタしてるのと同じです
SQLは文字で打つだけの違いでそんなに難しくはないですよね
テーブル名: product | ||||||||
商品番号 | カテゴリー | 商品名 | サイズ | 価格 | 販売日 | |||
1 | P1001 | コーヒー | ドリップコーヒー | ショート | 290 | 2021/01/01 | ||
2 | P1002 | コーヒー | ドリップコーヒー | トール | 330 | 2021/02/01 | ||
3 | P1003 | コーヒー | ドリップコーヒー | グランデ | 370 | 2021/03/01 | ||
4 | P1004 | コーヒー | ドリップコーヒー | ベンティ | 410 | 2021/04/01 |
もう一歩
複数条件
複数の条件を組み合わせるには
AND A「かつ」B 前後の条件を両方含む
OR A「もしくは」B 前後の条件のどちらかを含む
の接続詞でつなぎます
商品名=”ドリップコーヒー” AND 価格=330 商品名=”ドリップコーヒー” かつ 価格=330 を探してきて
商品名=”ドリップコーヒー” OR 価格=330 商品名=”ドリップコーヒー” もしくは 価格=330 を探してきて
となります
ANDの例では、両方条件を満たした、¥330のドリップコーヒーのデータが
ORの例では、ドリップコーヒー(価格は関係ない)と価格が330(商品名は問わない)データが返ってきます
演算子
= の他にも
> < >= <=
などの演算子も使えます
例: 価格>= 330
実践
INのページでも紹介してますが
WHEREの中にさらにもう一つ SELECT のクエリ(サブクエリ)を入れる方法があります
IN ( SELECT 商品名 FROM sales WHERE 売上 >= 500 )
productとsalesの2つのテーブルから「500円以上の売上げがあった商品情報を探して」というコマンドになります
2つ構文があって難しそうにみえますが、ひとつずつみていきましょう
まずは IN カッコの中から
SELECT 商品名 FROM sales WHERE 売上 >= 500
sales テーブルから売上が500円以上の商品名を探してきてというコマンドになります
「商品名」が返ってくるので、“ドリップコーヒー”, “カフェミスト”, ”アイスコーヒー” のような結果になります
これって最初にやった IN の中身と同じですよね
続いて外側をみていきましょう
SELECT * FROM product WHERE 商品名 IN
なので、返ってきた商品名をpruductテーブルから検索して、という事になり
チェックポイント
IN の内側のクエリで返す値は1種類 & 外側のカラムと一致する必要があります
IN ( SELECT * FROM sales WHERE 売上 >= 500 ) としてしまうとデータベースがどのカラムと一致させたらよいか分からなくなってしまうので
商品名 IN ( SELECT 商品名 FROM sales WHERE 売上 >= 500 ) のようにそろえてあげましょう
クイズ
下記のテーブルからサイズがショートで価格が¥300以下、もしく価格が¥450以上の商品番号を探してみてください
|
||||||||
テーブル名: product | ||||||||
商品番号 | カテゴリー | 商品名 | サイズ | 価格(円) | 販売日 | |||
1 | P1001 | コーヒー | ドリップコーヒー – ダークロースト | ショート | 290 | 2021/01/01 | ||
2 | P1002 | コーヒー | ドリップコーヒー – ダークロースト | トール | 330 | 2021/02/01 | ||
3 | P1003 | コーヒー | ドリップコーヒー – ダークロースト | グランデ | 370 | 2021/03/01 | ||
4 | P1004 | コーヒー | ドリップコーヒー – ダークロースト | ベンティ | 410 | 2021/04/01 | ||
5 | P1010 | コーヒー | カフェミスト | ショート | 340 | 2021/01/01 | ||
6 |
P1011
|
コーヒー | カフェミスト | トール |
380
|
2021/02/01 | ||
7 | P1012 | コーヒー | カフェミスト | グランデ | 420 | 2021/03/01 | ||
8 | P1013 | コーヒー | カフェミスト | ベンティ | 460 | 2021/04/01 |