SQLの勉強をして、自分が困ったことをまとめます。良ければ参考にしてください。
個人的な解釈なので、間違っている可能性もありますが、ご容赦ください。

久々にMac使ったら、キーボードが使いにくいぃぃぃぃ

慣れだよ!
SQLの環境をMacに構築!大きく分けて2Step!
brew
でSQLをインストール- MySQL Workbenchのインストール
まず、brew
でSQLをインストールしたら、mysql.server start
まで実行
次に、Workbenchの設定を行う
これで動いた。
※細かい設定は需要があれば追記します。
ビュー、サブクエリ、スカラ・サブクエリ、相関サブクエリの特徴
ビュー
CREATE VIEW ShohinSum (shohin_bunrui, cnt_shohin) AS SELECT shohin_bunrui, COUNT(*) FROM Shohin GROUP BY shohin_bunrui;
ビューの実行結果は以下、
shohin_bunrui | cnt_shohin |
衣服 | 2 |
事務用品 | 2 |
キッチン用品 | 4 |
サブクエリ
SELECT shohin_bunrui, cnt_shohin
FROM
(SELECT shohin_bunrui, COUNT(*) AS cnt_shohin
FROM Shohin
GROUP BY shohin_bunrui) AS ShohinSum;
サブ・クエリだけを実行すると、
SELECT shohin_bunrui, COUNT(*) AS cnt_shohin FROM Shohin GROUP BY shohin_bunrui;
shohin_bunrui | cnt_shohin |
衣服 | 2 |
事務用品 | 2 |
キッチン用品 | 4 |

ビューと同じ結果が出力された。なんでだろう〜〜〜〜?

それもそのはず!サブクエリはビューをFROM句にそのまま書いただけなのだから!
スカラ・サブクエリ
SELECT shohin_id, shohin_mei, hanbai_tanka
FROM Shohin
WHERE hanbai_tanka > (SELECT AVG(hanbai_tanka) FROM Shohin);
ちなみに、スカラ・サブクエリ単体で実行すると以下のように出力される
SELECT AVG(hanbai_tanka) FROM Shohin;
AVG(hanbai_tanka) |
2097.5000 |

1行1列の値が返ってきているので、スカラ・サブクエリである。
相関サブクエリ
SELECT shohin_bunrui, shohin_mei, hanbai_tanka
FROM Shohin AS S1
WHERE hanbai_tanka > (SELECT AVG (hanbai_tanka) FROM Shohin AS S2
WHERE S1.shohin_bunrui = S2.shohin_bunrui
GROUP BY shohin_bunrui);
一つ一つの処理についてわかりやすいかもしれないサイト:

相関サブクエリは魔法の言葉「WHERE S1.shohin_bunrui = S2.shohin_bunrui」を書いとけばいいんだ!
まとめ
現在の時刻は1時14分。明日起きれるかな。
復習頑張りました。
おやすみ。