相関サブクエリってなに?
どうやって使うの?
わかりやすく教えてほしい!
こういった疑問にこたえます。
エンジニアの僕がわかりやすく解説します。
サブクエリが不安な方は「【SQL】サブクエリとは?わかりやすく解説する!」の記事からご覧ください。
【SQL】サブクエリとは?わかりやすく解説する!
サブクエリってなに?どうやって使うの?こういった疑問にこたえます。この記事ではサブクエリの使い方やスカラ・サブクエリについてわかりやすく解説しています。サブクエリとは簡単にいうと使い捨てのビューです。使えると便利なのでぜひ覚えておきましょう。
相関サブクエリとは
相関サブクエリは小分けにしたグループ内での比較をするときに使います。
例えばこのようなshohinテーブルがあったとします。
このようなデータでshohin_bunruiごとの平均を算出し、shohin_bunruiごとの平均kakaku以上のkakakuを持つshohin_meiを取り出したいとします。
shohin_id | shohin_mei | shohin_bunrui | kakaku |
‘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_mei | kakaku |
‘ボールペン’ | 200 |
‘ホッチキス’ | 300 |
‘まな板’ | 1300 |
ポイントはサブクエリ内に記述したWHERE句です。
S1とS2はテーブルの別名です。今回の場合は比較対象となるテーブルがshohinテーブルという同じテーブルだったので区別するために必要です。
相関サブクエリの場合、テーブルの別名を列名の前に<テーブル名>.<列名>の形式で記述する必要があります。
相関サブクエリ使い方まとめ
解説の内容をまとめます。
- 相関サブクエリは小分けにしたグループ内での比較をするときに使う
- 結合条件は必ずサブクエリの中に書く
以上、お疲れ様でした。
コメント