IN ( 値1, 値2, 値3… )
はじめに
IN は WHERE句の中で使われ
文字どおり カッコ () の「中に」探したい複数の値をコンマで区切って並べるだけ!
INを使わないと
WHERE 商品名='”ドリップコーヒー” OR 商品名=”カフェミスト” OR 商品名=”アイスコーヒー”
とひとつひとつカラム名と値を書いていかなければなりません。面倒ですね。
INを使うと
WHERE 商品名 IN (“ドリップコーヒー”, “カフェミスト”,”アイスコーヒー”)
こんなにすっきり!
テーブル名: 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 |
便利な例
否定形
NOT INの前にをつけると渡した値以外を探してきて、と言う意味になります
たとえば下記の例だと
商品名が ドリップコーヒー, カフェミスト, アイスコーヒー以外を探して
と言うコマンドになります
実践
実務で使うケースとして、IN の中にさらにクエリを入れる方法があります
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 ) のようにそろえてあげましょう
クイズ
下記のテーブルから商品番号が、P1001、P1003、P10010、P10012で価格が¥300以上の商品名をINを使って探してみてください
|
||||||||
テーブル名: 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 |