sql系列5-组合查询

sql系列5-组合查询✅

利用 UNION 操作符将多条 SELECT 语句组合成一个结果集

多数 SQL 查询只包含从一个或多个表中返回数据的单条 SELECT 语句。但是,SQL 也允许执行多个查询(多条 SELECT 语句),并将结果作为一个查询结果集返回。这些组合查询通常称为并(union)或复合查询(compound query)。

主要有两种情况需要使用组合查询:

 在一个查询中从不同的表返回结构数据;

 对一个表执行多个查询,按一个查询返回数据。

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';

表示: Illinois、Indiana 和 Michigan 等美国几个州的所有顾客的报表,还想包括不管位于哪个州的所有的 Fun4All。

这里也可以用Or

 UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字

UNION 分隔(因此,如果组合四条 SELECT 语句,将要使用三个 UNION

关键字)。

 UNION 中的每个查询必须包含相同的列、表达式或聚集函数(不过,

各个列不需要以相同的次序列出)。

 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含

转换的类型(例如,不同的数值类型或不同的日期类型)。

UNION 从查询结果集中自动去除了重复的行,如果想返回

所有的匹配行,可使用 UNION ALL 而不是 UNION

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';

image-20230918142024470

UNIONWHERE

UNION 几乎总是完成与多个 WHERE 条件相同的工作。UNION ALL 为 UNION 的一种形式,它完成 WHERE 子句完成

不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),

就必须使用 UNION ALL,而不是 WHERE。

SELECT 语句的输出用 ORDER BY 子句排序。在用 UNION 组合查询时,只

能使用一条 ORDER BY 子句,它必须位于最后一条 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;

这条UNION在最后一条SELECT语句后使用了ORDER BY子句。虽然ORDER

BY 子句似乎只是最后一条 SELECT 语句的组成部分,但实际上 DBMS 将

用它来排序所有 SELECT 语句返回的所有结果

posted @   zheng-s  阅读(153)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
,  
点击右上角即可分享
微信分享提示