📅  最后修改于: 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