MYSQL サブクエリ
サブクエリ
SELECT文の中に、SELECT文を作れるよ!!って事です。
二段階でSQLが叩けるので、一発で「グループごとの平均値」などが出せます。
※この記事は、私の忘備録として残しています。動画は、とても分かりやすかった方の動画を紹介しています。 ぜひ、参考にしてください。 |
■サブクエリについて
【まとめ】
・クエリを叩いた結果に、さらにクエリを叩ける
・サブクエリ=クエリの中のクエリ
・使わなくて良いなら、使うな!
・相関サブクエリについても知ろう!!
以下の動画では、サブクエリの動きについて分かる事ができます。
基本について
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); |
(SELECT column1 FROM t2) |
(SELECT column1 FROM t2)がサブクエリです。
SELECT * FROM t1 WHERE column1 =が外部クエリ、外部ステートメント呼ばれています。
・構造化されたクエリを使える
・複雑な集計ができる
・読みやすい
などの利点があります。
【相関サブクエリ】
サブクエリは外部クエリを参照することが可能。
サブクエリ内にないテーブルを参照すると、外部クエリを見に行く。
これを利用してるのが相関サブクエリです。
■カテゴリごとに、平均価格以上の商品を選びたい
【itemsテーブル】
name |
category | price |
iphone15 |
スマホ |
100,000 |
iphone13 |
スマホ |
80,000 |
iphone14 |
スマホ |
90,000 |
ルンバ980 |
掃除機 |
50,000 |
ダイソン V10 |
掃除機 |
40,000 |
バルミューダ |
掃除機 |
60,000 |
■サブクエリ
SELECT * FROM items AS i1 WHERE price >= (SELECT AVG(price) FROM items AS i2 WHERE i1.category=i2.category GROUP BY category); |
(SELECT AVG(price) FROM items AS i2 WHERE i1.category=i2.category GROUP BY category);
の部分が先に計算されます。(内部クエリ)
すると平均値が「90,000」「50,000」と出ます。
category | AVG(price) |
①スマホ |
90,000 |
②掃除機 |
50,000 |
次に外側のSQL文が実行されます。
【スマホの時】
SELECT * FROM items AS items WHERE price >= 90,000 |
【掃除機の時】
SELECT * FROM items AS items WHERE price >= 50,000 |
が1行づつ、上から実行されていきます。
iphone15から、順にSELECT文が実行していくイメージです。
①SELECT * FROM items AS items WHERE 100,000 >= 90,000(スマホ)
①SELECT * FROM items AS items WHERE 100,000 >= 90,000(スマホ)
①SELECT * FROM items AS items WHERE 100,000 >= 90,000(スマホ)
終わったら
②SELECT * FROM items AS items WHERE 50,000 >= 50,000(掃除機)
②SELECT * FROM items AS items WHERE 40,000 >= 50,000(掃除機)
②SELECT * FROM items AS items WHERE 60,000 >= 50,000(掃除機)
内部のクエリにより、カテゴリごとの平均値が出たあと、それぞれに外部クエリが実行されていく感じです。
どうでしょうか?分かりますか??
カテゴリは
GROUP BY category で「スマホ」と「掃除機」がある事がわかります。
category | AVG(price) |
①スマホ |
90,000 |
②掃除機 |
50,000 |
この2つのカテゴリの平均値を基に、外部のセレクト文が実行されていく。
という訳です。
分かりますか??
【参照】
まとめ
COUNT関数など、集計関数とセットで使われたりします。
わたしは、順位付けの部分でサブクリエにでくわしました。ランキングを作る時などに利用します。
mysql8.0ではRANKIG()関数などがあり、これを使った方が速いです。
しかし、この「サブクエリ」を理解する事で、SQLの勉強になった事はいなめません。
ぜひ、サブクエリ、相関サブクエリを学び。SQLライフを充実させてください。
MYSQLの学習
MYSQLの学習
DBに格納、取り出しをしてくれる部分。データの型を決めるところがまずハマル。この順番で学習できます。
■ 基本編 ■
■基本操作■
データを追加する(INSERT)
更新する (UPDATE)
削除について(DALETE)
CURDについて
■基本の操作02■
NOT NULL設定
ビューとは何か?
アップデートについて
■ 設計について■
エンティティの抽出
正規化をしよう
UMLとは何か?
ER図を覚えよう
■アンチパターン
論理削除
ジェイウォーク(交差テーブルを作らない)
1文字エイリアス
全部小文字
複数列属性(マルチカラムアトリビュート)
パスワード
フラグの闇
マッチングアプリ関連情報
ER図について。中間テーブルを作る事が必要。
正規化する=縦と横の繰り返しをなくす。
■ 基本編 ■
マッチングアプリの作り方
テーブルの設計
ER図を作る
テーブルの定義
開発費用は200万~500万が相場です。
Glide
Google のスプレッドシートを利用して PWAアプリ開発をすることができる
本
データベース・リファクタンリグ
理論から学ぶデーターベース実践入門
はまるところ
・データの型()が分からない
・適切な長さが分からない
・外部キーの設定
・交差テーブル
参照サイト
大変申し訳ありませんが、当社ではサービスの質を落とさないために、月の契約は5件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。