Teradata SET 运算符
SET 运算符组合来自多个 SELECT 语句的结果。这可能看起来类似于连接,但连接组合来自多个表的列,而 SET 运算符组合来自多行的行。
规则
每个 SELECT 语句的列数应该相同。
来自每个 SELECT 的数据类型必须兼容。
ORDER BY 应仅包含在最终的 SELECT 语句中。
联合
UNION 语句用于组合来自多个 SELECT 语句的结果。它会忽略重复项。
语法
以下是 UNION 语句的基本语法。
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION
SELECT col1, col2, col3…
FROM
<table 2>
[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 |
以下 UNION 查询结合了 Employee 和 Salary 表中的 EmployeeNo 值。
SELECT EmployeeNo
FROM
Employee
UNION
SELECT EmployeeNo
FROM
Salary;
执行查询时,会产生以下输出。
EmployeeNo
-----------
101
102
103
104
105
联合所有
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 命令也用于组合来自多个 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 命令组合来自多个表的行并返回在第一个 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