Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
オプティマイザは次のような場合のみ、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 );