dポイントプレゼントキャンペーン実施中!

いつもお世話になります。

相関サブクエリについて、教えて頂きたいことがあります。

以下のサイトに相関サブクエリについての説明がされています。
http://gihyo.jp/dev/serial/01/sql_academy2/000902

このサイトによると、

-----------------------------------------------------------------
「行われている動作

リスト2の2つ目のSELECT文においても,最初に評価,実行されるのがサブクエリであるという点は変わりません。・・・」

※リスト2  相関サブクエリ(性別による集合カット)
SELECT *
FROM Employees E1
WHERE age = (SELECT MAX(age)
FROM Employees E2
WHERE E1.sex = E2.sex);
-----------------------------------------------------------------

と説明があります。
理解できないのが、「最初に評価,実行されるのがサブクエリ」という内容です。
私の理解では、相関サブクエリは、内側のクエリが外側のクエリを参照するクエリのことで、まず外側のクエリが実行される。
その後、その結果の各レコードに対してサブクエリを実行していく、というように理解しています。
しかし、上記サイトでは先にサブクエリが実行されるという説明がされており、ちょっと混乱しています。

相関サブクエリは正しくはどういう挙動をするものなのでしょうか、また正しい説明がされているサイトなども教えて頂けないでしょうか。

宜しくお願いします。

A 回答 (1件)

参照先のページにもある通り、ほとんどのSQLの実行実装では相関副問合せは


「ループ処理隠し」です。
外側のテーブルのレコードを順に参照し、それに対して相関副問合せを実行しています。
ORACLEやPostgreSQLなどでEXPLAINを行えばそれは確認できます。

ただ、意味論的には「集合の切り分け」でも間違いではありません。例示されたSQLでは
副問合せの側から「性別が同一で最大の年齢を求め、等しいレコードを抽出している」
ともとれます。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す