笔记243 SQLSERVER 中的EXCEPT 与 INTERSECT运算符 2013-4-18
笔记243 SQLSERVER 中的EXCEPT 与 INTERSECT运算符 2013-4-18
--SQLSERVER 中的EXCEPT 与 INTERSECT运算符 2013-4-18 -- 此文章主要向大家描述的是 SQL Server 2005 EXCEPT 与INTERSECT 运算符的正确使用,同时本文也有对 EXCEPT 与INTERSECT 运算符的实际应用的比较,以及对其在实际操作中值得我们大家注意的相关事项的描述。 -- --1. 简介 -- --SQL Server 2005 EXCEPT 和 INTERSECT运算符使您可以比较两个或多个 SELECT 语句的结果并返回非重复值。 -- --2. 区别 -- --EXCEPT 运算符返回由 EXCEPT运算符左侧的查询返回、而又不包含在右侧查询所返回的值中的所有非重复值。,相当于Oracle数据库的 Minus 运算符 -- --INTERSECT 返回由INTERSECT 运算符在左侧和右侧的查询都共同拥有的值,也就是共同值,交集。 -- --3. 注意事项 -- --(1). 使用SQL Server 2005 EXCEPT 或 INTERSECT比较的结果集必须具有相同的表结构,也就是它们的列数必须相同,并且相应的结果集列的数据类型必须相同 -- --(2).INTERSECT 运算符优先于 EXCEPT -- --(3).SELECT INTO 必须是包含 INTERSECT或 EXCEPT 运算符的语句中的第一个查询,用来创建容纳最终结果集的表 -- --(4).ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名 -- --4. 例题: -- -- 建立表,分别插入数据 USE [tempdb] GO create table TableA (col1 int ) insert into TableA select 1 insert into TableA select 1 insert into TableA select 2 insert into TableA select 3 insert into TableA select 4 insert into TableA select 4 insert into TableA select 5 insert into TableA select null insert into TableA select null create table TableB (col2 int ) insert into TableB select null insert into TableB select 1 insert into TableB select 2 insert into TableB select 3 create table TableC (col3 int ) insert into TableC select 1 insert into TableC select 5 insert into TableC select 6 -- 利用SQL Server 2005 EXCEPT -- -- 找出TableA 表的 col1列不存在 Tablec 表col1 列的所有【非重复值】 SELECT col1 FROM TableA EXCEPT SELECT col3 FROM Tablec -- 结果如下: -- --col1 --- --NULL --2 --3 --4 --sql 2000 的版本,用 not exists实现 SQL Server 2005 EXCEPT 的功能 SELECT col1 FROM TableA as a where not exists(SELECT col3 FROM Tablec where a. col1 =col3 ) group by col1 --sql 2000,not in 是得不到上述结果的,也就是说not in不能替代except和not exists -- -- 空值表示值未知。空值不同于空白或零值。没有两个相等的空值。 -- -- 比较两个空值或将空值与任何其他值相比均返回未知,这是因为每个空值均为未知。 -- -- 使用IN 或 NOT IN比较后返回的所有空值都将返回 UNKNOWN 。 -- -- 将空值与IN 或 NOT IN一起使用会产生意外结果。 SELECT col1 FROM TableA where col1 not in(SELECT col3 FROM Tablec ) group by col1 --一定要加group by,否则会显示重复值 -- 结果如下: -- --col1 --- --2 --3 --4 --INTERSECT 运算符优先于 EXCEPT -- -- 运算步骤是:先运算 TableB和 TableC 的INTERSECT, 再和 TableA运算 SQL Server 2005 EXCEPT SELECT col2 FROM TableB INTERSECT SELECT col3 FROM TableC 的结果是1,共同值是1 SELECT col1 FROM TableA EXCEPT SELECT col2 FROM TableB INTERSECT SELECT col3 FROM TableC -- 结果如下: col1 - NULL 2 3 4 5 --SELECT INTO 的应用 -- --SELECT INTO 必须是语句中的第一个查询 -- SELECT col1 into #tem FROM TableA EXCEPT SELECT col3 FROM Tablec select * from #tem -- 结果如下: -- --col1 --- --NULL --2 --3 --4 --ORDER BY 子句 -- --ORDER BY 子句中的列名或别名必须引用左侧查询返回的列名 SELECT col1 FROM TableA INTERSECT SELECT col3 FROM TableC order by col1 -- 结果如下: -- --col1 --- --1 --5
f
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现