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 の使用法 » データのクエリと変更 » サブクエリの使用 » オプティマイザによるサブクエリからジョインへの自動変換

 

比較演算子に続くサブクエリ

比較演算子に続くサブクエリ (=、>、<、>=、<=、!=、<>、!>、!<) は、比較と呼ばれます。オプティマイザは、サブクエリが次のような場合に、これらのサブクエリをジョインに変換します。

  • メイン・クエリのローごとに値を 1 つずつ返す

  • GROUP BY 句を含んでいない

  • キーワード DISTINCT を含んでいない

  • UNION クエリではない

  • 集計クエリではない

「Suresh の製品がいつ注文され、どの担当者が注文を受けたか」という要求をサブクエリで表現したとします。

SELECT OrderDate, SalesRepresentative
FROM SalesOrders
WHERE CustomerID = (
   SELECT ID
   FROM Customers
   WHERE GivenName = 'Suresh' );

このクエリは基準を満たすので、ジョインを使用するクエリに変換できます。

SELECT OrderDate, SalesRepresentative
FROM SalesOrders, Customers
WHERE CustomerID=Customers.ID AND 
  ( Surname = 'Clarke' OR GivenName = 'Suresh' );

しかし、「在庫数が平均注文数の 2 倍よりも少ない製品を検索する」という要求はジョインに変換できません。これは、サブクエリに集計関数 AVG が含まれているためです。

SELECT Name, Description
FROM Products
WHERE Quantity <  2 * (
   SELECT AVG( Quantity )
   FROM SalesOrderItems );