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 
广告

© . All rights reserved.