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 の使用法 » データのクエリと変更 » ジョイン:複数テーブルからのデータ検索 » キー・ジョイン » テーブル式のキー・ジョイン

 

テーブル式リストのキー・ジョイン

2 つのテーブル式リストのキー・ジョインに対してジョイン条件を生成する場合、SQL Anywhere は文中のテーブルのペアを調べて、各ペアに対してジョイン条件を生成します。最後のジョイン条件は各ペアのジョイン条件の論理積です。各ペア間には外部キー関係が存在する必要があります。

次の例では、2 つのテーブル・ペア A-C と B-C をジョインします。

SELECT *
FROM ( A,B ) KEY JOIN C;

SQL Anywhere では、2 つのテーブル・ペア A-C と B-C のそれぞれに対してジョイン条件を生成することで、C と (A,B) をジョインするためのジョイン条件が生成されます。このように複数の外部キー関係が存在する場合は、次のキー・ジョイン規則に従って処理されます。

  • 各ペアに対して、プライマリ・キー・テーブルの相関名と同じ名前の役割名を持つ外部キーが検索される。この基準に合う外部キーが 1 つだけ存在する場合には、それが使用される。2 つ以上見つかると、そのジョインはあいまいと見なされてエラーが発行される。

  • 各ペアに、テーブルの相関名と同じ名前の外部キーがない場合は、そのテーブル間の外部キー関係が検索される。見つかった外部キー関係が 1 つであれば、それが使用される。2 つ以上見つかると、そのジョインはあいまいと見なされてエラーが発行される。

  • 各ペアに、外部キー関係がまったく存在しない場合は、エラーが発行される。

  • 各ペアにジョイン条件を 1 つだけ決定できる場合は、AND によってジョイン条件が組み合わされる。

複数の外部キー関係がある場合のキー・ジョインも参照してください。

次は、ある地域で 1 つ以上の注文を受けたすべての営業部員の名前を返すクエリです。

SELECT DISTINCT Employees.Surname,
        FK_DepartmentID_DepartmentID.DepartmentName, 
        SalesOrders.Region
FROM ( SalesOrders, Departments 
        AS FK_DepartmentID_DepartmentID )
    KEY JOIN Employees;
Surname DepartmentName Region
Chin Sales Eastern
Chin Sales Western
Chin Sales Central
... ... ...

このクエリでは、テーブルの 2 つのペア、SalesOrders と Employees、および Departments AS FK_DepartmentID_DepartmentID と Employees を扱います。

SalesOrders と Employees のペアには、一方のテーブルと同じ役割名の外部キーはありません。ただし、2 つのテーブルに関連した外部キー (FK_SalesRepresentative_EmployeeID) が 1 つあります。これは、2 つのテーブルに関連する唯一の外部キーであり、この外部キーが使用されて、生成されたジョイン条件 ( Employees.EmployeeID = SalesOrders.SalesRepresentative ) になります。

Departments AS FK_DepartmentID_DepartmentID と Employees のペアでは、プライマリ・キー・テーブルと同じ役割名を持つ外部キーは 1 つです。そのキーは FK_DepartmentID_DepartmentID で、クエリ内の Departments テーブルに指定した相関名と一致します。プライマリ・キー・テーブルの相関名と同じ名前の外部キーは他にないため、このテーブル・ペアのジョイン条件は FK_DepartmentID_DepartmentID を使用して作成されます。生成されるジョイン条件は (Employees.DepartmentID = FK_DepartmentID_DepartmentID.DepartmentID) です。2 つのテーブルに関連する外部キーはもう 1 つありますが、この外部キーの名前はどちらのテーブルの名前とも異なるため、要因にはなりません。

最後のジョイン条件は、それぞれのテーブル・ペアに対して生成されたジョイン条件を 1 つにまとめます。したがって、次のクエリは同義です。

SELECT DISTINCT Employees.Surname, 
   Departments.DepartmentName, 
   SalesOrders.Region
FROM ( SalesOrders, Departments )
    JOIN Employees
    ON Employees.EmployeeID = SalesOrders.SalesRepresentative
    AND Employees.DepartmentID = Departments.DepartmentID;