オプティマイザは次のような場合のみ、EXISTS キーワードに続くサブクエリを変換します。
メイン・クエリが GROUP BY 句を含んでおらず、集計クエリでない。または、サブクエリが 1 つの値を返す。
'EXISTS (subquery)' の部分が否定されていない。
サブクエリが相関である。つまり、外部参照を含んでいる。
「どの顧客が 2001 年 7 月 13 日以降に発注したか」という要求は、外部参照 Customers.ID = SalesOrders.CustomerID を含む否定されていないサブクエリを持つクエリで表現できるので、次のジョインで表すことができます。
SELECT GivenName, Surname FROM Customers WHERE EXISTS ( SELECT * FROM SalesOrders WHERE ( OrderDate > '2001-07-13' ) AND ( Customers.ID = SalesOrders.CustomerID ) ); |
EXISTS キーワードは、空の結果セットをチェックするようデータベース・サーバに通知するものです。内部ジョインが使用されていると、データベース・サーバは、FROM 句内のすべてのテーブルからのデータがあるローのみを自動的に表示します。つまり、次のクエリは、サブクエリを持つクエリが返すものと同じローを返します。
SELECT DISTINCT GivenName, Surname FROM Customers, SalesOrders WHERE ( SalesOrders.OrderDate > '2001-07-13' ) AND ( Customers.ID = SalesOrders.CustomerID ); |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |