开发手册 欢迎您!
软件开发者资料库

Teradata - Joins

Teradata Joins - 从简单和简单的步骤学习Teradata,从基本到高级概念,包括简介,安装,架构,关系概念,数据类型,表格,数据操作,SELECT语句,逻辑和条件运算符,SET运算符,字符串处理,日期/时间函数,内置函数,聚合函数,CASE和COALESCE,主索引,连接,子查询,表类型,空间概念,二级索引,统计,压缩,解释,哈希算法,JOIN索引,视图,宏,存储过程,JOIN策略,分区主索引,OLAP功能,数据保护,用户管理,性能调整,FastLoad,MultiLoad,FastExport,BTEQ。

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

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

  • 内部加入

  • 左外加入

  • 右外加入

  • 全外加入

  • 自助加入

  • 交叉加入

  • 笛卡尔生产加入

INNER JOIN

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

语法

以下是INNER JOIN语句的语法.

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

示例

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

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) ;

示例

考虑以下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