Teradata-joins

提供:Dev Guides
移動先:案内検索

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