Teradata - SET 运算符

SET 运算符组合来自多个 SELECT 语句的结果。这可能看起来类似于连接,但连接组合来自多个表的列,而 SET 运算符组合来自多个行的行。

规则

  • 每个 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];

示例

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

EmployeeNo FirstName LastName JoinedDate DepartmentNo BirthDate
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
EmployeeNo Gross Deduction 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 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