数据库基础09——组合查询

数据库基础09——组合查询

1、UNION 和UNION ALL

区别:

UNION 操作符可以组合两个或多个 SELECT 语句的结果, 不包含重复的记录。

UNION ALL操作符可以组合两个SELECT语句的结果, 并且包含重复的结果。

SELECT cust_name, cust_contact, cust_email    
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION							-- 不包含重复行
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';
-----------------------------
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION ALL						-- 包含重复行
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All';

2、INTERSECT

INTERSECT 可以组合两个 SELECT 语句, 但只返回第一个 SELECT 语句里与第二个SELECT语句里一样的记录。 其使用规则与UNION操作符一样目前MySQL5.0尚不支持INTERSECT, 但SQL Server和Oracle全都提供支持。

3、EXCEPT

EXCEPT 操作符组合两个 SELECT 语句, 返回第一个 SELECT 语句里有但第二个SELECT语句里没有的记录。 同样的, 它的使用规则与UNION操作符一样。 目前MySQL并不支持EXCEPT。 而在Oracle中, 则使用MINUS操作符来实现同样的功能。 SQL server 支持。

4、对组合进行排序 ORDER BY

SELECT 语句的输出用 ORDER BY 子句排序。在用 UNION 组合查询时,只能使用一条 ORDER BY 子句,它必须位于最后一条 SELECT 语句之后。 因此组合查询里虽然可能包含多个查询或SELECT语句, 但只能有一个ORDER BY子句, 而且它只能以别名或数字来引用字段。

SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN ('IL','IN','MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name = 'Fun4All'
ORDER BY cust_name, cust_contact;

5、组合使用 GROUP BY

与ORDER BY不同的是, GROUP BY子句可以用于组合查询中的每一个 SELECT语句, 也可以用于全部查询结果。 另外, HAVING子句也可以用于组合查询里的每个SELECT语句。

SELECT 列名
FROM  表名
[WHERE]
[GROUP BY]
[HAVING]
UNION
SELECT 列名
FROM  表名
[WHERE]
[GROUP BY]
[HAVING]
[ORDER BY]

猜你喜欢

转载自blog.csdn.net/u011138190/article/details/84999281