0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ProgateでSQLを学習してみた(2)

Posted at

ProgateでSQLを学習してみた(2)

SQL学習の続き

・WHEREで条件設定する(レッスン1)
・比較演算子、LIKE、NOT、NULL・IS NOT NULL,AND・OR(レッスン1)
・ORDER BY、LIMITで加工(レッスン1)
・DISTINCT、四則演算(レッスン2)
・集計関数(SUM、AVG、COUNT,MAX・MIN)(レッスン2)

今回はここから↓
・グループ化(GROUP BY、HAVING) (レッスン2)
・サブクエリ(レッスン3)
・複数テーブルの使用(JOIN、LEFT JOIN)(レッスン3)

グループ化(GROUP BY、HAVING) 

グループ化は苦手・・イメージをつかみにくかったんですが
Progateさんで学習するうちに
イメージがつかめてきた!・・気がします

Progateさんの解説だと
「データベース内の同じ日付のデータをグループとしてみましょう」
というのが非常に「グループ」の例えとしてわかりやすかったです

書籍で学習してたときは「種類」でグループ化っていう例えだったので
いきなり「文具」「台所用品」「洗面道具」って・・わかりにく!

SELECT SUM(price),日付のカラム
FROM purchases
GROUP BY 日付のカラム; ←日付ごとに買い物の合計金額を表示する

家計簿のイメージ!わかりやすい!

実務だと複数のカラムをグループ化しないといけないけど
基本形として覚えておくと後に助かりそうです
あと、必ずグループ化したカラムもSELECTの後に書くっていうのも
表示したいカラムが多い場合は忘れがちなので肝に銘じます

GROUP BYとWHEREを一緒に使う

GROUP BYを使用するときに条件をつけたい場合があります
そのときは「WHERE」と「HAVING」という句がありますが
データをくくるタイミングによって、どちらを使うか変わってきます

①WHERE文でキャラクターが「○○○」であるレコードを検索する
②日付でグループ化する
③集計関数で集計する

上記が「WHERE」を使ったときの処理の流れです
条件で絞りこんだデータをさらにグループで切り分ける、ということですね

SELECT SUM(price),日付のカラム ←③集計する
FROM purchases
WHERE character_name="○○○" ←①条件でデータを絞る
GROUP BY 日付のカラム; ←②日付でグループ化する

対して「HAVING」の場合は

実行順序によって、WHEREとHAVINGは検索対象に違いがあります。
WHEREはグループ化される前のテーブル全体を検索対象とするのに
対し、HAVINGはGROUP BYによってグループ化されたデータを
検索対象とします

なるほど!

HAVINGはグループ化された後のテーブルから検索するため、
条件文で使うカラムは必ずグループ化されたテーブルのカラムを使う

SELECT SUM(price),character_name
FROM purchases
WHERE category="雑費"
GROUP BY character_name
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?