成都本地网站,四川成都装修公司排名,企业要建设一个网站需要多少钱,建设网站设计专业服务本文讲述如何利用 UNION 操作符将多条 SELECT 语句组合成一个结果集。 1. 组合查询
多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是#xff0c;SQL 也允许执行多个查询#xff08;多条 SELECT 语句#xff09;#xff0c;并将结果作为一个查询结果…本文讲述如何利用 UNION 操作符将多条 SELECT 语句组合成一个结果集。 1. 组合查询
多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是SQL 也允许执行多个查询多条 SELECT 语句并将结果作为一个查询结果集返回。这些组合查询通常称为并union或复合查询compound query。
主要有两种情况需要使用组合查询
在一个查询中从不同的表返回结构数据对一个表执行多个查询按一个查询返回数据。
提示 组合查询和多个 WHERE 条件多数情况下组合相同表的两个查询所完成的工作与具有多个 WHERE 子句条件的一个查询所完成的工作相同。换句话说任何具有多个 WHERE 子句的 SELECT 语句都可以作为一个组合查询。 2. 创建组合查询
可用 UNION 操作符来组合数条 SQL 查询。利用 UNION可以给出多条 SELECT 语句将它们的结果组合成一个结果集。
2.1 使用 UNION
使用 UNION 很简单只需给出每条 SELECT 语句并在各条语句之间放上关键字 UNION。
例子 假如需要获取 Illinois、Indiana 和 Michigan 等美国几个州的所有顾客的报表并包括所有的 Fun4All 顾客。可以通过 UNION 完成。
第一条查询
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN (IL, IN, MI);
输出结果
cust_name | cust_contact | cust_email
----------------|-----------------|--------------
Village Toys | John Smith | salesvillagetoys.com
Fun4All | Jim Jones | jjonesfun4all.com
The Toy Store | Kim Howard | NULL
第二条查询
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_name Fun4All;
输出结果
cust_name | cust_contact | cust_email
----------------|-----------------|--------------
Fun4All | Jim Jones | jjonesfun4all.com
Fun4All | Denise L. Stephens | dstephensfun4all.com
组合查询
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;
输出结果
cust_name | cust_contact | cust_email
----------------|-----------------|--------------
Fun4All | Denise L. Stephens | dstephensfun4all.com
Fun4All | Jim Jones | jjonesfun4all.com
Village Toys | John Smith | salesvillagetoys.com
The Toy Store | Kim Howard | NULL
分析 这条语句由前面的两条 SELECT 语句组成之间用 UNION 关键字分隔。UNION 指示 DBMS 执行这两条 SELECT 语句并把输出组合成一个查询结果集。
参考 使用多个 WHERE 子句的查询可以如下
SELECT cust_name, cust_contact, cust_email
FROM Customers
WHERE cust_state IN (IL, IN, MI) OR cust_name Fun4All;
对于较复杂的过滤条件或从多个表中检索数据的情况使用 UNION 会更加简洁。 2.2 UNION 规则
使用 UNION 时需要注意以下规则
UNION 必须由两条或两条以上的 SELECT 语句组成语句之间用关键字 UNION 分隔例如四条 SELECT 语句需要三个 UNION。UNION 中的每个查询必须包含相同的列、表达式或聚集函数不过各个列的顺序不需要一致。列的数据类型必须兼容类型不必完全相同但必须是 DBMS 可以隐含转换的类型如不同的数值类型或日期类型。
说明 UNION 的列名。如果 SELECT 语句中的列名不同结果集将使用第一个查询中的列名。例如如果一条语句是 SELECT prod_name另一条是 SELECT productname查询结果将返回第一个列名 prod_name而不是 productname。这意味着排序时只能使用第一个列名。 2.3 包含或取消重复的行
回到 2.1 节我们看到的 SELECT 语句返回了重复的行。UNION 会自动去除查询结果中的重复行这是 UNION 的默认行为。如果希望返回所有匹配的行可以使用 UNION ALL。
例子
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;
输出结果
cust_name | cust_contact | cust_email
----------------|-----------------|--------------
Village Toys | John Smith | salesvillagetoys.com
Fun4All | Jim Jones | jjonesfun4all.com
The Toy Store | Kim Howard | NULL
Fun4All | Jim Jones | jjonesfun4all.com
Fun4All | Denise L. Stephens | dstephensfun4all.com
分析 使用 UNION ALL 时DBMS 不会去除重复的行因此返回了 5 行其中有一行出现了两次。
提示 UNION 与 WHERE。UNION 完成与多个 WHERE 条件相同的工作但 UNION ALL 是 UNION 的一种形式能够返回重复的行。 2.4 对组合查询结果排序
SELECT 语句的输出可以使用 ORDER BY 子句进行排序。在 UNION 组合查询时只能使用一条 ORDER BY 子句并且它必须位于最后一条 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
ORDER BY cust_name, cust_contact;
输出结果
cust_name | cust_contact | cust_email
----------------|-----------------|--------------
Fun4All | Denise L. Stephens | dstephensfun4all.com
Fun4All | Jim Jones | jjonesfun4all.com
The Toy Store | Kim Howard | NULL
Village Toys | John Smith | salesvillagetoys.com
说明 ORDER BY 子句位于最后一条 SELECT 语句之后并用于对所有查询结果进行排序。 小结
本章讲解了如何使用 UNION 操作符来组合 SELECT 语句。通过 UNION可以将多条查询的结果作为一条组合查询返回无论结果中是否包含重复项。使用 UNION 可以简化复杂的 WHERE 子句并且使从多个表中检索数据变得更加高效。