|
ネストされたクエリとも呼ぶサブクエリは、以下のうちの 1 つの中に含まれている SELECT ステートメントです。
サブクエリを使用すると、ネストされた SELECT ステートメントの出力に SELECT、UPDATE または DELETE ステートメントの結果の基準を置くことができます。
相関関係を持つサブクエリ以外のサブクエリを発行すると、Pervasive PSQL はステートメント全体を構文解析し、最も内側のサブクエリを最初に実行します。Pervasive PSQL は、最も内側のサブクエリの結果を次のレベルのサブクエリに対する入力として使用します。以下同様に行います。
サブクエリで使用できる式の詳細については、『SQL Engine Reference』を参照してください。
WHERE 句のサブクエリは、検索基準の一部になります。SELECT、UPDATE および DELETE ステートメントでサブクエリを使用する場合は、以下の制限が適用されます。
ステートメントにいくつかのレベルのサブクエリをネストできます。ネストできるサブクエリ数は、Pervasive PSQL が使用できるメモリ量で決定されます。
相関サブクエリには、外側のクエリの FROM 句のテーブルから列を参照する WHERE または HAVING 句が含まれています。この列を相関列と呼びます。外側のクエリからの結果と比較してサブクエリからの結果をテストするか、クエリの中の特定値の有無をテストするには、相関サブクエリを使用しなければなりません。
相関列は外側のクエリから発するので、その値は外側のクエリがフェッチされるたびに変化します。次に Pervasive PSQL はこの変化した値に基づいて内側のクエリの式を評価します。
以下の例に、教室で実際に使用される時間より多い履修単位時間を持つコースの名前を示します。
SELECT c.Name, c.Credit_Hours FROM Course c WHERE c.Name IN (SELECT c1.Name FROM Class cl WHERE c.Name = cl.Name AND c.Credit_Hours > (HOUR (Finish_Time - Start_Time) + 1))#
上記のステートメントは、パフォーマンスを向上させるために簡単なクエリに書き換えることができます。
SELECT c.Name, c.Credit_Hours FROM Class c1, Course c WHERE c1.Name = c.Name AND c.Credit_Hours > (HOUR (Finish_Time - Start_Time) + 1)#
|