Teradata-joins
Teradata-結合
結合は、複数のテーブルのレコードを結合するために使用されます。 テーブルは、これらのテーブルの共通の列/値に基づいて結合されます。
さまざまな種類の結合が利用可能です。
- 内部結合
- 左外部結合
- 右外部結合
- フル外部結合
- 自己参加
- クロスジョイン
- デカルト生産結合
内部結合
内部結合は、複数のテーブルのレコードを結合し、両方のテーブルに存在する値を返します。
構文
以下は、INNER JOINステートメントの構文です。
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
例
次の従業員表と給与表を考えてください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次のクエリは、共通列EmployeeNoでEmployeeテーブルとSalaryテーブルを結合します。 各テーブルにはエイリアスAとBが割り当てられ、列は正しいエイリアスで参照されます。
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
上記のクエリを実行すると、次のレコードが返されます。 従業員105は、給与テーブルに一致するレコードがないため、結果に含まれません。
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
外部参加
LEFT OUTER JOINとRIGHT OUTER JOINも、複数のテーブルの結果を組み合わせます。
- LEFT OUTER JOIN は、左側のテーブルからすべてのレコードを返し、右側のテーブルから一致するレコードのみを返します。
- RIGHT OUTER JOIN は、右側のテーブルからすべてのレコードを返し、左側のテーブルから一致する行のみを返します。
- FULL OUTER JOIN は、LEFT OUTER JOINとRIGHT OUTER JOINSの両方の結果を結合します。 結合されたテーブルから一致する行と一致しない行の両方を返します。
構文
以下は、OUTER JOINステートメントの構文です。 LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOINのいずれかのオプションを使用する必要があります。
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
例
LEFT OUTER JOINクエリの次の例を考えてみましょう。 EmployeeテーブルのすべてのレコードとSalaryテーブルの一致するレコードを返します。
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
上記のクエリを実行すると、次の出力が生成されます。 従業員105の場合、NetPayの値はNULLです。これは、給与テーブルに一致するレコードがないためです。
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
クロスジョイン
クロス結合は、左のテーブルのすべての行を右のテーブルのすべての行に結合します。
構文
CROSS JOINステートメントの構文は次のとおりです。
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay
FROM
Employee A
CROSS JOIN
Salary B
WHERE A.EmployeeNo = 101
ORDER BY B.EmployeeNo;
上記のクエリを実行すると、次の出力が生成されます。 EmployeeテーブルのEmployeeNo 101は、Salaryテーブルのすべてのレコードと結合されます。
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000