Teradata 联接
联接用于组合来自多个表的记录。 基于来自这些表的公共列/值来连接表。
有不同类型的联接可用。
- Inner Join
- Left Outer Join
- Right Outer Join
- Full Outer Join
- Self Join
- Cross Join
- Cartesian Production Join
内部联接
内连接组合来自多个表的记录,并返回两个表中存在的值。
语法
以下是INNER JOIN语句的语法。
SELECT col1, col2, col3…. FROM Table-1 INNER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
例子
考虑下面的员工表和工资表。
员工不 | 名字 | 姓 | JoinedDate | 部门 | 生日 |
---|---|---|---|---|---|
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 |
员工不 | 毛 | 扣除 | 扣除... |
---|---|---|---|
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 |
考虑下面的员工表和工资表。
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
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,因为它在薪金表中没有匹配的记录。
*** 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;
以下是CROSS JOIN语句的语法。...
*** 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