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 の使用法 » データのクエリと変更 » ジョイン:複数テーブルからのデータ検索 » 明示的なジョイン条件 (ON 句)

 

ON 句でのテーブルの参照

ON 句で参照されるテーブルは、その ON 句が修飾するジョインの一部である必要があります。たとえば、次の構文は無効です。

FROM ( A KEY JOIN B ) JOIN ( C JOIN D ON A.x = C.x )

ここでの問題は、ジョイン条件 A.x = C.x がテーブル A を参照していることです。テーブル A は、このジョイン条件が修飾するジョイン (この場合 C JOIN D) の一部ではありません。

ただし、ANSI/ISO 標準の SQL99 と Adaptive Server Anywhere 7.0 については、この規則は適用されません。つまり、テーブル式の間にカンマを使用すれば、ジョインの ON 条件は、構文中にその ON 条件より前にある FROM 句内のテーブルを参照できます。このため、次の構文は有効になります。

FROM (A KEY JOIN B) , (C JOIN D ON A.x = C.x)

カンマの詳細については、カンマを参照してください。

次の例では、SalesOrders テーブルを Employees テーブルにジョインします。結果の各ローは、SalesOrders テーブルの SalesRepresentative カラムの値と Employees テーブルの EmployeeID カラムの値が一致するローに対応しています。

SELECT Employees.Surname, SalesOrders.ID, SalesOrders.OrderDate
FROM SalesOrders 
JOIN Employees
ON SalesOrders.SalesRepresentative = Employees.EmployeeID;
Surname ID OrderDate
Chin 2008 4/2/2001
Chin 2020 3/4/2001
Chin 2032 7/5/2001
Chin 2044 7/15/2000
Chin 2056 4/15/2001
... ... ...

次はこの例に関する説明です。

  • このクエリの結果に含まれているのは、648 個のロー (SalesOrders テーブルの各ローに対応) のみです。直積における 48,600 のローのうち、2 つのテーブルで同じ従業員番号を持っているのは 648 のローだけだからです。

  • 結果の順序に意味はありません。ORDER BY 句を追加すると、クエリに特定の順序を指定できます。

  • ON 句によって、最終的な結果セットには含まれないカラムが組み込まれます。