rejoice at good news

出来るだけ楽に健康に過ごすために睡眠・食事・運動の情報をまとめる

SQLの環境をMacに構築!ビュー、サブクエリ、スカラ・サブクエリ、相関サブクエリについても解説!

SQLの勉強をして、自分が困ったことをまとめます。良ければ参考にしてください。

個人的な解釈なので、間違っている可能性もありますが、ご容赦ください。

f:id:tureduresann:20220201222055p:plain

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

f:id:tureduresann:20220127163649p:plain
Mac民

慣れだよ!

SQLの環境をMacに構築!大きく分けて2Step!

 

  1. brew でSQLをインストール
  2. MySQL Workbenchのインストール

まず、brew でSQLをインストールしたら、mysql.server startまで実行

次に、Workbenchの設定を行う

これで動いた。

※細かい設定は需要があれば追記します。

 

ビュー、サブクエリ、スカラ・サブクエリ、相関サブクエリの特徴

ビュー SELECT文を保存
サブクエリ FROM句に入れる、ビューの使い捨てバージョン
スカラ・サブクエリ 必ず1行1列だけの戻り値を返す。定数で書き換え可。「10」「東京都」など
相関サブクエリ 「小分け」の状態の比較に役に立つ。スカラ・サブクエリでは無理な時

 

 

ビュー

 

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

 

f:id:tureduresann:20220201222055p:plain

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

f:id:tureduresann:20220127163649p:plain
知らん人

それもそのはず!サブクエリはビューを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

f:id:tureduresann:20220127163649p:plain
知らん人

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);

一つ一つの処理についてわかりやすいかもしれないサイト:

【SQL基礎】相関副問い合わせ | TECH PROjin

f:id:tureduresann:20220127163649p:plain
知らん人

相関サブクエリは魔法の言葉「WHERE S1.shohin_bunrui = S2.shohin_bunrui」を書いとけばいいんだ!

 

まとめ

現在の時刻は1時14分。明日起きれるかな。

復習頑張りました。

おやすみ。