- 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 - 连接策略
- Teradata - 分区主索引
- Teradata - OLAP 函数
- Teradata - 数据保护
- Teradata - 用户管理
- Teradata - 性能调优
- Teradata - FastLoad
- Teradata - MultiLoad
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用资源
- Teradata - 问答
- Teradata - 快速指南
- Teradata - 有用资源
- Teradata - 讨论
Teradata - 集合运算符
集合运算符组合来自多个 SELECT 语句的结果。这可能看起来类似于连接,但连接组合来自多个表的列,而集合运算符组合来自多行的行。
规则
每个 SELECT 语句的列数必须相同。
每个 SELECT 的数据类型必须兼容。
ORDER BY 只能包含在最终的 SELECT 语句中。
UNION
UNION 语句用于组合来自多个 SELECT 语句的结果。它忽略重复项。
语法
以下是 UNION 语句的基本语法。
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] UNION SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
示例
考虑以下员工表和薪资表。
| 员工编号 | 名字 | 姓氏 | 入职日期 | 部门编号 | 出生日期 |
|---|---|---|---|---|---|
| 101 | 迈克 | 詹姆斯 | 3/27/2005 | 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 |
| 员工编号 | 总额 | 扣除额 | 净收入 |
|---|---|---|---|
| 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 |
以下 UNION 查询组合了 Employee 和 Salary 表中的 EmployeeNo 值。
SELECT EmployeeNo FROM Employee UNION SELECT EmployeeNo FROM Salary;
当查询执行时,它会生成以下输出。
EmployeeNo ----------- 101 102 103 104 105
UNION ALL
UNION ALL 语句类似于 UNION,它组合来自多个表的包括重复行在内的结果。
语法
以下是 UNION ALL 语句的基本语法。
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] UNION ALL SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
示例
以下是 UNION ALL 语句的示例。
SELECT EmployeeNo FROM Employee UNION ALL SELECT EmployeeNo FROM Salary;
当上述查询执行时,它会生成以下输出。您可以看到它也返回重复项。
EmployeeNo
-----------
101
104
102
105
103
101
104
102
103
INTERSECT
INTERSECT 命令也用于组合来自多个 SELECT 语句的结果。它返回第一个 SELECT 语句中在第二个 SELECT 语句中有对应匹配的行。换句话说,它返回两个 SELECT 语句中都存在的行。
语法
以下是 INTERSECT 语句的基本语法。
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] INTERSECT SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
示例
以下是 INTERSECT 语句的示例。它返回两个表中都存在的 EmployeeNo 值。
SELECT EmployeeNo FROM Employee INTERSECT SELECT EmployeeNo FROM Salary;
当上述查询执行时,它返回以下记录。EmployeeNo 105 被排除在外,因为它在 SALARY 表中不存在。
EmployeeNo ----------- 101 104 102 103
MINUS/EXCEPT
MINUS/EXCEPT 命令组合来自多个表的行,并返回第一个 SELECT 中但在第二个 SELECT 中不存在的行。它们都返回相同的结果。
语法
以下是 MINUS 语句的基本语法。
SELECT col1, col2, col3… FROM <table 1> [WHERE condition] MINUS SELECT col1, col2, col3… FROM <table 2> [WHERE condition];
示例
以下是 MINUS 语句的示例。
SELECT EmployeeNo FROM Employee MINUS SELECT EmployeeNo FROM Salary;
当此查询执行时,它返回以下记录。
EmployeeNo ----------- 105
广告