首页 > 数据库 >SQL基础总结(八):集合操作

SQL基础总结(八):集合操作

时间:2023-09-14 14:01:28浏览次数:41  
标签:总结 结果 UNION 使用 EXCEPT 查询 INTERSECT SQL 集合


本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

--------------------------------

使用UNION合并行

UNION操作将两个查询返回的结果合并成一个结果。UNION从结果中去掉重复的行,UNION ALL不去掉重复的行。

两个查询的SELECT子句列出的列(列名、计算表达式、聚合函数)必须数量相等。

两个查询对应的列必须有相同的顺序。

对应的列必须是相同的数据类型,或隐式转换为相同的数据类型。

大多数DBMS采用UNION语句第一个查询的列名作为结果的列名。

ORDER BY子句只能出现在UNION语句最后的查询中。对最后合并的结果进行排序,最简单的方法是使用相对列位置来确定排序,如ORDER BY 1 ASC;

GROUP BY和HAVING只能用于单独的查询,他们不能用于影响最终结果。

Statement1

UNION [ALL]

Statement2;

UNION是可交换操作的,A UNION B和B UNION A是相同的。

如果在一条语句中将UNION和UNION ALL混合使用,要使用括号来明确运算顺序,因为UNION ALL不排除重复行。

 

对于UNION操作,DBMS按内部顺序来确定和去掉重复行,因此即使没有使用ORDER BY子句,UNION的结果可能也会排序。UNION ALL因为不需要去掉重复的行,所以不排序。排序计算的消耗很大——若使用UNION ALL能实现,就不要使用UNION。

 

使用INTERSECT查找相同行

使用INTERSECT操作将两个查询的结果中相同的行并成一个结果,即交集。

Statement1

INTERSECT

Statement2;

Statement1和Statement2都是SELECT语句,两个查询中列的数量和顺序必须相同,对应列的数据类型必须兼容。

结果中重复的行将被去掉。

INTERSECT是可交换操作,A INTERSECT B和B INTERSECT A是相同的。

DBMS如果不支持INTERSECT可以使用INNER JOIN或EXISTS子查询。

 

使用EXCEPT查找不同行

EXCEPT操作,也称为差操作。将两个属性中只属于第一个查询的行作为结果。

A EXCEPT B包含属于表A但不属于表B的行。

Statement1

EXCEPT

Statement2;

 

EXCEPT为不可交换项。

DBMS不支持EXCEPT,可以使用外联结、NOT EXISTS子查询、NOT IN子查询代替它。

标签:总结,结果,UNION,使用,EXCEPT,查询,INTERSECT,SQL,集合
From: https://blog.51cto.com/u_6978506/7469772

相关文章

  • SQL基础总结(十):索引
      本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)--------------------------------对于以下列创建索引是恰当的,这些列经常被:查询、排序、分组、联结、用来计算顺序统计(MIN、MAX或中值)。对于......
  • MySQL篇:bug2_ Navicate无法添加或更新子行-外键约束失败
    问题产生原因Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。解决办法解决方法是在Mysql中取消外键约束:SETFOREIGN_KEY_CHECKS=0;再添加值,然后再设置外键约束:SETFOREIGN_KEY_CHECKS=1;查看当前FOREIGN_KEY_CHECKS的值可用如下命令:SELECT@@FOR......
  • 7 项目总结
    Webserver项目webserver项目总结1项目介绍使用多线程模型,利用信号量实现线程间加锁;利用I0复用技术Epoll与线程池实现多线程的Reactor高并发模型;利用RAII机制实现了数据库连接池,减少数据库连接建立与关闭的开销;利用正则与状态机解析HTTP请求报文实现处理静态资源的请求;基......
  • 2023.9.14-每日总结
    今天,我完成了软件需求与分析课堂测试02–业务需求。软件需求与分析课堂测试02–业务需求  ----------------------------------------------------------------------根据下列描述,说明新的直接销售和财务处理系统的业务需求有哪些?EspeciallyforYouJewelers是大学......
  • N天爆肝数据库——MySQL(2)
    (N天爆肝数据库——MySQL(2))链接:link这是csdn专栏链接,大家可以看一看,提提意见本篇文章,主要对DMLDQL进行知识总结和学习。期待和大家一起学习进步。DML-介绍DML(数据库操作语言),用来对数据库中表的数据记录进行增删改操作。添加数据(INSERT)修改数据(UPDATE)删除数据(DELET......
  • Citrix SQL数据库查询和替换修改字段
    1如下图,右键指定库新建查询即可2粘贴底部代码后,如下,点击执行查询即可--查看Citrix站点数据库如下表内容字段select*fromchb_config.Controllers;select*fromADIdentitySchema.Services;select*fromHostingUnitServiceSchema.Services;select*fromAppLibrarySchem......
  • SQL Server关于AlwaysOn的理解-读写分离的误区(一)
    前言很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到。因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到辅助副本上。这是一个认知误区,本文通过原理和测试进行解释。实现原理从下图......
  • 每日总结2023/9/14
    尝试写一下JDBC1.注册驱动Class.forName("com.mysql.cj.jdbc.Driver);2.获取链接DriverManager.getConnection("jdbc:mysql://localhost:3306/pulao_dragontoll's_home","root","114514");(.var)3.编写sql语句,并把动态结果用?代替Stringsql=&qu......
  • oracle 分页 sql
    select*from(select*from(selectt.*,rownumlinenumfromgal_messagest)rwherer.linenum<200)awherea.linenum>100Note:一定要给rownum一个别名linenum,否则r.rownum或a.rownum会出错.OracleConnectBy用法参照:[url]http://www.cublog.cn/u1/54706/showart......
  • 位运算总结
    位运算总结......