SQL 组合查询

组合查询

在 SQL 中,组合查询(Combined Queries)允许你将多个查询的结果集合并成一个结果集。这在需要从多个表中检索数据并将其合并显示时非常有用。组合查询通常使用 UNIONUNION ALL 来实现。

1. UNION

UNION 用于组合两个或多个 SELECT 语句的结果集,并自动去除重复的行。

语法:
SELECT column1, column2, ...
FROM table1
UNION
SELECT column1, column2, ...
FROM table2;
  • column1, column2, ...:要选择的列,必须在所有查询中具有相同的名称和数据类型。
  • table1, table2, ...:要查询的表。

2. UNION ALL

UNION ALL 也用于组合两个或多个 SELECT 语句的结果集,但不会去除重复的行。这在需要保留所有重复行时非常有用。

语法:
SELECT column1, column2, ...
FROM table1
UNION ALL
SELECT column1, column2, ...
FROM table2;

3. INTERSECT

INTERSECT 用于返回两个查询结果集的交集,即两个结果集中都存在的记录。需要注意的是,INTERSECT 在某些数据库系统(如 MySQL)中不支持。

语法:
SELECT column1, column2, ...
FROM table1
INTERSECT
SELECT column1, column2, ...
FROM table2;

4. EXCEPTMINUS

EXCEPT(在 SQL Server 中)或 MINUS(在 Oracle 中)用于返回两个查询结果集的差集,即第一个结果集中存在但第二个结果集中不存在的记录。需要注意的是,EXCEPTMINUS 在某些数据库系统(如 MySQL)中不支持。

语法:
SELECT column1, column2, ...
FROM table1
EXCEPT
SELECT column1, column2, ...
FROM table2;
示例:

假设有两个表 employeescontractors,数据如下:

employees 表:

employee_id name role
1 Alice Developer
2 Bob Manager
3 Charlie Designer

contractors 表:

contractor_id name role
1 David Consultant
2 Eve Analyst
3 Alice Developer
UNION

将两个表中的数据合并,显示所有员工和承包商的名称和角色:

SELECT name, role
FROM employees
UNION
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
Bob Manager
Charlie Designer
David Consultant
Eve Analyst
UNION ALL:

将两个表中的数据合并,显示所有员工和承包商的名称和角色,保留重复行:

SELECT name, role
FROM employees
UNION ALL
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
Bob Manager
Charlie Designer
David Consultant
Eve Analyst
Alice Developer
INTERSECT:

查询两个表中都存在的记录:

SELECT name, role
FROM employees
INTERSECT
SELECT name, role
FROM contractors;

结果:

name role
Alice Developer
EXCEPT 或 MINUS

查询 employees 表中存在但 contractors 表中不存在的记录:

SELECT name, role
FROM employees
EXCEPT
SELECT name, role
FROM contractors;

结果:

name role
Bob Manager
Charlie Designer

总结

通过使用 UNIONUNION ALL,可以将多个查询的结果集合并成一个结果集。UNION 会自动去除重复的行,而 UNION ALL 会保留所有重复行。此外,INTERSECT 用于返回两个结果集的交集,EXCEPTMINUS 用于返回两个结果集的差集。掌握这些组合查询的用法,可以帮助你更灵活地处理和分析数据。

全部评论

相关推荐

入职一个多月了,来分享一些landing的感受~ 整体说下:可以打85分,毕竟当时辞职就是想要走出舒适圈,的确也会有些不舒适,但基本上是因为阿里和网易风格有差别,需要一些时间适应 我所在的产品线整体风格不卷,加班不严重,周末大家都安排自己的生活,可以安心放下手机,也让我彻底放下“不秒回羞耻症” 阿里云团队规模太大,分工很细,人也很多,想搞清楚一件事情要对接好多好多人,要熟悉的流程也贼多,这个过程的确有些累,但我估计只要在大厂都会这样 感觉这边做事情自由度更高,换句话说,老板只要结果,过程怎么做自己想办法去 凡事凡人都爱讲价值。初次对接的其他部门的同事,也会直接问我,“你对业务的价值是什么” 前线上线下接触到的同事估计有四五十个,99%交流都顺畅,有话都直说 一个月约了不少coffee talk,即使没有直接的工作关联,大家还都挺热心解答我各种疑惑,很开心 和+1 沟通很顺畅,一是我刚入职就和她确认了沟通风格,二是我会主动表达自己的一些困惑,寻求帮助。当我不知道怎么和其他团队TL 开展协同的时候,她也会帮我丝滑落地 另外有几个我师兄给的tips: ❶抛开对情绪的关注,过分关注对方是老员工or说了句什么重话or质疑了什么,就没法协作了 ❷即使不喜欢,在该刷存在感的时候也得刷 ❸等过了前半年蜜月期,也许你也会感到工作很痛苦 新环境让我的状态好了很多,或许是因为还在蜜月期,or团队的风格,or只是还没接触到那么多人和事儿,我也不确定从多久后开始,我也会感到烦躁、痛苦。 那,既然不知道,当然是能快乐一天是一天啦~ 还有就是,我相信这一次的转变,我个人在心境上的调整和成长也起到了很大的作用。 无论世界怎样,把情绪掌握在自己手中。阿里云2026届可转正实习生招聘正式开启!【公司介绍】阿里云是全球领先的云计算及人工智能科技公司,坚持让计算成为公共服务,助力全球客户加速价值创新。【招聘岗位】技术类、运营类、设计类、营销类、产品类、内容类、职能类等(每位同学仅有1次投递机会,2个意向)【工作地点】杭州、北京、上海、深圳、成都等城市【面向人群】海内外院校2026届毕业生,毕业时间在2025年11月-2026年10月内【内推步骤】点击「内推链接」开启内推->查看内推职位/部门->提交个人信息->点击邮件内链接确认接受内推,补充意向并完善简历->内推成功🎁内推一键投递:https://careers.aliyun.com/campus/qrcode/apply/positions?code=yzYD/K3PP/D42kc4e1WhOePAeAX7co5ZGo9MaGDwhhQ=    (内推简历优先筛选,后续有疑问/流程问题欢迎联系)使用内推码简历优先筛选,有任何问题包括进度查询可以私信我,内推后在评论区留言【姓名缩写+岗位】,方便捞人和确认投递状态 #春招#                       #内推#                       #内推码#                       #阿里云#                
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务