- Teradata 教程
- Teradata - 首页
- Teradata 基础
- Teradata - 简介
- Teradata - 安装
- Teradata - 架构
- Teradata - 关系型概念
- Teradata - 数据类型
- Teradata - 表
- Teradata - 数据操作
- Teradata - SELECT 语句
- 逻辑与条件运算符
- Teradata - 集合运算符
- Teradata - 字符串操作
- Teradata - 日期/时间函数
- Teradata - 内置函数
- Teradata - 聚合函数
- Teradata - CASE 与 COALESCE
- Teradata - 主索引
- Teradata - 连接
- Teradata - 子查询
- Teradata 高级
- Teradata - 表类型
- Teradata - 空间概念
- Teradata - 次索引
- Teradata - 统计
- Teradata - 压缩
- Teradata - EXPLAIN
- Teradata - 哈希算法
- Teradata - 连接索引
- Teradata - 视图
- Teradata - 宏
- Teradata - 存储过程
- Teradata - JOIN策略
- Teradata - 分区主索引
- Teradata - OLAP 函数
- Teradata - 数据保护
- Teradata - 用户管理
- Teradata - 性能调优
- Teradata - FastLoad
- Teradata - MultiLoad
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用资源
- Teradata - 问答
- Teradata - 快速指南
- Teradata - 有用资源
- Teradata - 讨论
Teradata - 连接
JOIN 用于组合来自多个表中的记录。表根据这些表中的公共列/值进行连接。
有多种类型的 JOIN 可用。
- 内连接
- 左外连接
- 右外连接
- 全外连接
- 自连接
- 交叉连接
- 笛卡尔积连接
INNER JOIN
内连接组合来自多个表中的记录,并返回同时存在于两个表中的值。
语法
以下是 INNER JOIN 语句的语法。
SELECT col1, col2, col3…. FROM Table-1 INNER JOIN Table-2 ON (col1 = col2) <WHERE condition>;
示例
考虑以下员工表和薪资表。
员工编号 | 名 | 姓 | 入职日期 | 部门编号 | 出生日期 |
---|---|---|---|---|---|
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 |
以下查询根据公共列 EmployeeNo 连接员工表和薪资表。每个表都分配了一个别名 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 JOIN 和 RIGHT OUTER JOIN 的结果。它返回连接表中的匹配行和不匹配行。
语法
以下是 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 查询的示例。它返回员工表中的所有记录以及薪资表中的匹配记录。
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;
执行上述查询时,它将产生以下输出。员工表中的 EmployeeNo 101 与薪资表中的每个记录都连接。
*** 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
广告