Teradata - Joins

Join用于组合来自多个表的记录.根据这些表中的公共列/值连接表.

可以使用不同类型的连接.

  • 内部加入

  • 左外加入

  • 右外加入

  • 全外加入

  • 自助加入

  • 交叉加入

  • 笛卡尔生产加入

INNER JOIN

Inner Join合并多个表中的记录并返回两个表中存在的值.

语法

以下是INNER JOIN语句的语法.

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

示例

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

EmployeeNoFirstNameLastNameJoinedDateDepartmentNoBirthDate
101MikeJames3/27/200511/5/1980
102RobertWilliams2007年4月25日23/5/1983
103PeterPaul2007年3月21日24/1/1983
104AlexStu art2008年2月1日211/6/1984
105RobertJames1/4/2008312/1/1984
EmployeeNoGross扣除NetPay
10140,0004,00036,000
10280,0006,00074,000
10390,0007,00083,000
10475,0005,00070,000

以下查询连接Employee表和Sa.公共列EmployeeNo上的lary表.每个表都分配了一个别名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和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

交叉连接将左表中的每一行连接到右表中的每一行.

语法

以下是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 Table中的每条记录一起加入.

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