📜  Teradata-SET运算符

📅  最后修改于: 2020-11-29 08:58:23             🧑  作者: Mango


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

规则

  • 每个SELECT语句的列数应相同。

  • 每个SELECT的数据类型必须兼容。

  • ORDER BY仅应包含在最终的SELECT语句中。

联盟

UNION语句用于合并多个SELECT语句的结果。它忽略重复项。

句法

以下是UNION语句的基本语法。

SELECT col1, col2, col3… 
FROM  
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

考虑以下雇员表和薪水表。

员工号码 名字 加入日期 部门编号 生日
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 亚历克斯 斯图尔特 2/1/2008 2 1984年11月6日
105 罗伯特 詹姆士 2008年1月4日 3 1984年1月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  
 
[WHERE condition] 
UNION ALL 

SELECT col1, col2, col3…
FROM  
[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  

[WHERE condition] 
INTERSECT 

SELECT col1, col2, col3… 
FROM  
[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  
 
[WHERE condition] 
MINUS 

SELECT col1, col2, col3… 
FROM  
[WHERE condition];

以下是MINUS语句的示例。

SELECT EmployeeNo 
FROM  
Employee 
MINUS 

SELECT EmployeeNo 
FROM  
Salary;

执行此查询时,它将返回以下记录。

EmployeeNo 
----------- 
   105