Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データのクエリと変更 » サブクエリの使用 » オプティマイザによるサブクエリからジョインへの自動変換

 

EXISTS に続くサブクエリ

オプティマイザは次のような場合のみ、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 );