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

例子

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

员工号 加入日期 部门编号 出生日期
101 麦克风 詹姆士 2005年3月27日 1 1980年1月5日
102 罗伯特 威廉斯 2007年4月25日 2 1983年3月5日
103 彼得 保罗 2007年3月21日 2 1983年4月1日
104 亚历克斯 斯图尔特 2008年2月1日 2 1984年11月6日
105 罗伯特 詹姆士 2008年1月4日 3 1984年12月1日
员工号 总的 扣除 网络支付
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