Teradata - 加入


连接用于组合多个表中的记录。表根据这些表中的公共列/值进行连接。

有不同类型的联接可用。

  • 内部联接
  • 左外连接
  • 右外连接
  • 全外连接
  • 自加入
  • 交叉连接
  • 笛卡尔生产连接

内部联接

内连接合并多个表中的记录并返回两个表中都存在的值。

句法

以下是 INNER JOIN 语句的语法。

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

例子

考虑以下员工表和工资表。

员工号 加入日期 部门编号 出生日期
101 麦克风 詹姆士 2005年3月27日 1 1980年1月5日
102 罗伯特 威廉斯 2007年4月25日 2 1983年3月5日
103 彼得 保罗 2007年3月21日 2 1983年4月1日
104 亚历克斯 斯图尔特 2008年2月1日 2 1984年11月6日
105 罗伯特 詹姆士 2008年1月4日 3 1984年12月1日
员工号 总的 扣除 网络支付
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 未包含在结果中,因为它在 Salary 表中没有匹配的记录。

*** 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 JOINS 和 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,因为它在 Salary 表中没有匹配的记录。

*** 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