9. 相関サブクエリ
- 相関サブクエリは小分けにしたグループ内での比較をするときに使います。
- 句と同様に相関サブクエリも集合の「カット」機能を持っている。
- 相関サブクエリの結合条件はサブクエリ内に書かないとエラーを起こす。
9.1 相関サブクエリとは
たとえばサブクエリの場合のように、特定のグループごとに集計値を算出し比較抽出する場合、通常のサブクエリ(スカラ・サブクエリ)は利用できない。この場合を用いることになるが、その結果、1行1列にならないためである。これを解消するのに相関サブクエリを用いる。
-- 相関サブクエリのイメージ SELECT Y1, Y2, Y3 FROM TABLE1 AS TBL1 WHERE Y3 > (SELECT AVG(Y3) FROM TABLE AS TBL2 WHERE TBL1.Y2 = TBL2.Y2 GROUP BY TBL.Y2) -- 以下はエラーを起こす: SELECT Y1, Y2, Y3 FROM TABLE1 AS TBL1 WHERE TBL1.Y2 = TBL2.Y2 -- WHERE句をサブクエリからクエリに移した WHERE Y3 > (SELECT AVG(Y3) FROM TABLE AS TBL2 GROUP BY TBL.Y2)
上記の句によりの分類内で比較を行うようにしたことが通常のサブクエリと相違する。
このように相関サブクエリもまた句のように集合を分割していることに他ならない。
9.2 相関サブクエリの注意点
相関サブクエリは句を加えたことで通常のサブクエリとは違う条件を付けることが可能になった。この句による制約条件はスコープの問題でメインのクエリ側に移すことはできない。すなわち相関名はサブクエリ内で定義した以上、サブクエリ外では適用できない*1。