Teradata - SET运算符

SET运算符组合了多个SELECT语句的结果.这可能看起来类似于Joins,但是连接组合来自多个表的列,而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];

示例

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

EmployeeNoFirstNameLastNameJoinedDateDepartmentNoBirthDate
101MikeJames3/27/200511/5/1980
102RobertWilliams2007年4月25日23/5/1983
103PeterPaul2007年3月21日24/1/1983
104AlexStu art2008年2月1日211/6/1984
105RobertJames1/4/2008312/1/1984
EmployeeNoGrossDeductionNetPay
10140,0004,00036,000
10280,0006,00074,000
10390,0007,00083,000
10475,0005,00070,000

以下UNION查询结合了EmployeeNo v从员工和工资表中提取.

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语句中具有相应的匹配项.换句话说,它返回两个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