【SQL】相関サブクエリとは?わかりやすく解説する!

Web技術
スポンサーリンク

相関サブクエリってなに?

どうやって使うの?

わかりやすく教えてほしい!

こういった疑問にこたえます。

この記事を読めば
  • 相関サブクエリとは何かわかる
  • 相関サブクエリの使い方がわかる

エンジニアの僕がわかりやすく解説します。

サブクエリが不安な方は「【SQL】サブクエリとは?わかりやすく解説する!」の記事からご覧ください。

【SQL】サブクエリとは?わかりやすく解説する!
サブクエリってなに?どうやって使うの?こういった疑問にこたえます。この記事ではサブクエリの使い方やスカラ・サブクエリについてわかりやすく解説しています。サブクエリとは簡単にいうと使い捨てのビューです。使えると便利なのでぜひ覚えておきましょう。

相関サブクエリとは

相関サブクエリは小分けにしたグループ内での比較をするときに使います

例えばこのようなshohinテーブルがあったとします。

このようなデータでshohin_bunruiごとの平均を算出し、shohin_bunruiごとの平均kakaku以上のkakakuを持つshohin_meiを取り出したいとします。

shohin_idshohin_meishohin_bunruikakaku
‘0001’‘鉛筆’‘事務用品’100
‘0002’‘ボールペン’‘事務用品’200
‘0003’‘ホッチキス’‘事務用品’300
‘0004’‘鍋’‘キッチン用品’1000
‘0005‘包丁’‘キッチン用品’1000
‘0006’‘まな板’‘キッチン用品’1300
商品テーブル

事務用品は(100 + 200 + 300) / 3 = 200なのでボールペンとホッチキスが該当します。

キッチン用品は(1000 + 1000 + 1300) / 3 = 1100なのでまな板が該当します。

このような場合、相関サブクエリを使用してこのように記述します。

SELECT shohin_mei, kakaku
  FROM shohin AS S1
WHERE (SELECT AVG(kakaku)
         FROM shohin AS S2
       WHERE S1.shohin_bunrui = S2.shohin_bunrui
       GROUP BY shohin_bunrui) < kakaku;

実行結果

shohin_meikakaku
‘ボールペン’200
‘ホッチキス’300
‘まな板’1300
実行結果

ポイントはサブクエリ内に記述したWHERE句です。

S1とS2はテーブルの別名です。今回の場合は比較対象となるテーブルがshohinテーブルという同じテーブルだったので区別するために必要です。

相関サブクエリの場合、テーブルの別名を列名の前に<テーブル名>.<列名>の形式で記述する必要があります。

結合条件は必ずサブクエリの中に書く!

相関サブクエリ使い方まとめ

解説の内容をまとめます。

  • 相関サブクエリは小分けにしたグループ内での比較をするときに使う
  • 結合条件は必ずサブクエリの中に書く

以上、お疲れ様でした。

コメント

タイトルとURLをコピーしました