ナチュラル・ジョインを指定すると、同じ名前を持つカラムに基づいてジョイン条件が生成されます。生成されたジョイン条件がベース・テーブルのナチュラル・ジョインに有効になるためには、同じ名前のカラムがどちらのテーブルにも少なくとも 1 つは存在する必要があります。共通するカラム名がなければ、エラーが発生します。
テーブル A と B が共通のカラム名を 1 つ持っており、そのカラムが x であるとします。その場合は次のようになります。
SELECT * FROM A NATURAL JOIN B; |
これは、次のクエリと同義です。
SELECT * FROM A JOIN B ON A.x = B.x; |
テーブル A と B が共通のカラム名を 2 つ持っており、そのカラムが a と b である場合、A NATURAL JOIN B
は次のクエリと同等です。
A JOIN B ON A.a = B.a AND A.b = B.b; |
たとえば、テーブル Employees と Departments には共通のカラム名 DepartmentID が 1 つあるため、ナチュラル・ジョインを使用してこの 2 つのテーブルをジョインできます。
SELECT GivenName, Surname, DepartmentName FROM Employees NATURAL JOIN Departments ORDER BY DepartmentName, Surname, GivenName; |
GivenName | Surname | DepartmentName |
---|---|---|
Janet | Bigelow | Finance |
Kristen | Coe | Finance |
James | Coleman | Finance |
Jo Ann | Davidson | Finance |
... | ... | ... |
次の文は同義です。この文では、さきほどの例で生成されたジョイン条件が明示的に指定されています。
SELECT GivenName, Surname, DepartmentName FROM Employees JOIN Departments ON (Employees.DepartmentID = Departments.DepartmentID) ORDER BY DepartmentName, Surname, GivenName; |
Interactive SQL で次のクエリを実行します。
SELECT Surname, DepartmentName FROM Employees NATURAL JOIN Departments; |
Surname | DepartmentName |
---|---|
Whitney | R & D |
Cobb | R & D |
Breault | R & D |
Shishov | R & D |
Driscoll | R & D |
... | ... |
SQL Anywhere は 2 つのテーブルを参照し、共通するカラム名が DepartmentID だけであると判断します。次の ON CLAUSE は内部的に生成され、ジョインの実行に使用されます。
FROM Employees JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID |
NATURAL JOIN は ON 句を入力するための単なるショートカットで、この 2 つのクエリは同じです。
NATURAL JOIN を使用した場合のエラー
ON 句を使用したナチュラル・ジョイン
テーブル式のナチュラル・ジョイン
ビューと派生テーブルのナチュラル・ジョイン
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |