Teradata 加入
Join 用于合并来自多个表的记录。根据这些表中的公共列/值连接表。
有不同类型的连接可用。
Inner Join
Left Outer Join
Right Outer Join
Full Outer Join
Self Join
Cross Join
Cartesian Production Join
INNER JOIN
内连接合并来自多个表的记录并返回两个表中存在的值。
语法
以下是 INNER JOIN 语句的语法。
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
示例
考虑以下员工表和工资表。
EmployeeNo |
名字 |
姓氏 |
JoinedDate |
部门编号 |
出生日期 |
101 |
迈克 |
詹姆斯 |
2005/3/27 |
1 |
1/5/1980 |
102 |
罗伯特 |
威廉姆斯 |
4/25/2007 |
2 |
3/5/1983 |
103 |
彼得 |
保罗 |
3/21/2007 |
2 |
4/1/1983 |
104 |
亚历克斯 |
斯图尔特 |
2/1/2008 |
2 |
11/6/1984 |
105 |
罗伯特 |
詹姆斯 |
1/4/2008 |
3 |
12/1/1984 |
EmployeeNo |
毛额 |
演绎 |
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);
执行上述查询时,会返回以下记录。 Employee 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
OUTER JOIN
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 将左表的每一行连接到右表的每一行。
语法
以下是 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