SQL Server中的集合运算: UNION, EXCEPT和INTERSECT示例代码详解_MsSql

来源:脚本之家  责任编辑:小易  

/* Sql server 存储过程中怎么将变量赋值*/--SQL赋值语句DECLARE @test1 INTSELECT @test1 = 111SET @test1 = 222--SQL函数赋值,假定count()是自定义函数DECLARE @test2 INTSELECT @test2 = COUNT(*) FROM sys.sysobjects--SQL存储过程赋值,直接传参处理(类似C语言中的指针吗)IF OBJECT_ID('sp_test') IS NOT NULL DROP PROCEDURE sp_testGOCREATE PROCEDURE sp_test(@test INT OUTPUT)ASBEGIN SELECT @test = 999ENDGODECLARE @test3 INTEXEC sp_test @test3 OUTPUTSELECT @test3DROP PROCEDURE sp_testGOwww.zgxue.com防采集请勿采集本网。

SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种。

在百度网页上搜索一下,很多地方有下载sqlserver2000的,至于sp3或sp4可以另外下载,然后自已集合在压缩包里.

集合运算的基本使用

SQL SERVER帮助中说得很清楚。帮你摘出来一段。如果你明白AND操作的含义其实这个就很容易理解了。 &(按位 AND) 在两个整型值之间执行按位逻辑与运算。 170

1.UNION(合并两个查询结果集,隐式DINSTINCT,删除重复行)

select * from sys.all_objects where type='FN'

--合并两个提取表/派生表(derived table), 返回结果为:[a,b,c,d,e]SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)UNIONSELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

所有关键字具体可参见 http://msdn.microsoft.com/zh-cn/library/ms189822%28v=SQL.100%29.aspx 如果实在需要,那就要先做个处理把所有关键字先存入某个表中,需要的时候s

2.UNION ALL(简单合并两个查询结果集,不删除重复行)

list()throws Exception{ UserDaoImp ud=new UserDaoImp(); List<User> list=ud.getAll(); request.put("list",list); return "list"; }这种的话,在页面中可以

--提取表/派生表(derived table)可以是多列,列名、顺序可以不同,但列数必须相同SELECT * FROM (VALUES('a','Anna'),('b','Bob'),('c','Cassie'),('e','Elina')) Table1 (FC, Name)UNION ALLSELECT * FROM (VALUES('a','Anna'),('b','Bob'),('c','Cassie'),('d','David')) Table2 (FC, Name)

使用union all 处理 UNION 附带一个 排序的操作. 需要把相同的记录合并掉. UNION ALL 不排序。 select szdxmlb='收入项目',szdxm,sum(szdjf),sum(szddf) from szd group b

3.EXCEPT(返回出现在第一个结果集但不出现在第二个结果集中的所有行)

翻译并向SQL Server提交SQL语句且返回结果。下面是一个用DAOs访问SQL Server的 的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱

--返回结果为:[e]SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)EXCEPTSELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

不知道你的意思是不是在某个字段中查找不重复的值 select distinct(字段) from table 还有分组的时候,把重复值去掉 select 字段 from table group by 字段 这两个字段要一

4.INTERSECT(返回第一个查询结果集和第二个查询结果集共有的部分)

文件组 SQL Server 中一个或多个文件的命名集合,构成分配或用于数据库管理的单个单 fgroup1 中。 然后,可以明确地在文件组 fgroup1 上创建一个表。对表中数据的查询将分

--返回结果为:[a,b,c]SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)INTERSECTSELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

select a.a_name as 名字,count(b.a_id) as 数量 from a inner join b on a.a_id = b.a_id group by a.a_name 名字 数量 me 3 wo 1 he 1 select a.a_name as 名字,count(b.a_

集合运算的使用场景

由行和列构成的集合,用来存储数据 数据类型: 定义列或变量的数据类型,SQL Server提供 存放于服务器的预先编译好的一组T-SQL语句 触发器: 特殊的存储过程,当用户表中数据

1.使用UNION代替Where子句中的OR,查询速度更快

SQL Server中的游标相当于循环使用游标(cursor)的一个主要的原因就是把集合操作转换 且结果往往是一个含有多个记录的集合。游标机制允许用户在SQL  server内逐

--使用Where子句 + ORSELECT name, population, area FROM world WHERE area > 3000000 OR population > 25000000--使用UNIONSELECT name, population, area FROM world WHERE area > 3000000UNIONSELECT name, population, area FROM world WHERE population > 25000000

用编程语言显示出来。如PHP $q=$mysqli->query("select * from wc"); while($r=$q->fetch_array())

2.使用EXCEPTINTERSECT, 过滤出列表中不存在/存在于数据库中的项

你需要的功能,  是不是 一个  叫做   “表值函数”  的东西?123456789101112131415SQL Server 通过 RETURN TABLE&nb

假设存在表Customers, 数据如下表所示

1、采用向导定义主键和约束,这个应该很简单 2、使用sql语句声明主键和添加约束 primary key用来声明主键。 添加主键约束语句如: alter table member add constra

cust_id cust_name cust_address cust_city cust_state cust_country cust_contact cust_email
1000000001 Village Toys 200 Maple Lane Detroit MI USA John Smith sales@villagetoys.com
1000000002 Kids Place 333 South Lake Drive Columbus OH USA Michelle Green NULL
1000000003 Fun4All 1 Sunny Place Muncie IN USA Jim Jones jjones@fun4all.com
1000000004 Fun4All 829 Riverside Drive Phoenix AZ USA Denise L. Stephens dstephens@fun4all.com
1000000005 The Toy Store 4545 53rd Street Chicago IL USA Kim Howard NULL

--过滤出列表中不存在于数据库中的项--返回结果为['1000000006','1000000007']SELECT [Id] AS [cust_id] FROM(VALUES('1000000004'),('1000000005'),('1000000006'),('1000000007')) dt ([Id])EXCEPTSELECT [cust_id] FROM [Customers]--过滤出列表中存在于数据库中的项--返回结果为['1000000004','1000000005']SELECT [Id] AS [cust_id] FROM(VALUES('1000000004'),('1000000005'),('1000000006'),('1000000007')) dt ([Id])INTERSECTSELECT [cust_id] FROM [Customers]

--对于SQLServer 2008以前的版本SELECT [Id] AS [cust_id] FROM( SELECT '1000000004' UNION ALL SELECT '1000000005' UNION ALL SELECT '1000000006' UNION ALL SELECT '1000000007') dt ([Id])INTERSECT--EXCEPTSELECT [cust_id] FROM [Customers]

//使用C#动态生成SQL语句var list = new List<string>(){"1000000004","1000000005","1000000006","1000000007"};string sqlQuery = string.Format($@" SELECT [Id] AS [cust_id] FROM ( VALUES('{string.Join("'),('", list)}') ) dt ([Id] INTERSECT --EXCEPT SELECT [cust_id] FROM [Customers]");

更多参考

Set Operators - EXCEPT and INTERSECT

Set Operators - UNION

到此这篇关于SQL Server中的集合运算: UNION, EXCEPT和INTERSECT的文章就介绍到这了,更多相关SQL Server中的集合运算内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

一步步看:先看最后一句的子查询:(select 货品编码 from 订单信息 as a where (select SUM(数量) from 订单信息 as b where a. 货品编码=b.货品编码)>10)。意思是:查找订单信息表中货品编码所对应数量总和大于10的货品编码的集合。那么,父查询的条件:where 编码 in (select 货品编码 from 订单信息 as a where (select SUM(数量) from 订单信息 as b where a. 货品编码=b.货品编码)>10)的意思就是要查找编码在订单信息表中货品编码所对应数量总和大于10的货品编码的集合中的数据。最后将整个语句整合起来,就是“查询订单信息表中总数量大于10的货品编码”内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • sqlserver 数据集合的交、并、差集运算
  • sqlserver 实用操作小技巧集合
  • sql server的一个有趣的bit位运算分享
  • sql server 2008中的apply运算符使用方法
  • 通过sql server的位运算功能巧妙解决多选查询方法
  • sqlserver apply表运算符使用介绍
  • sql server 表数据改变触发发送邮件的方法
  • sql server配置管理器无法连接到wmi提供程序
  • 浅析sql server中包含事务的存储过程
  • sqlserver convert 函数测试结果
  • case 嵌套查询与连接查询你需要懂得
  • sql server数据库安装时常见问题解决方案集锦
  • 随机抽取的sql语句 每班任意抽取3名学生
  • centos 7.3上sql server vnext ctp 1.2安装教程
  • 复制sqlserver数据库的方法
  • 分享网站群发站内信数据库表设计
  • SQL SERVER关于集合成员测试中子查询的问题
  • Sql server 存储过程中怎么将变量赋值
  • C# 用sql server中的字段填充combobox问题
  • SQL Server中的游标是什么意思?
  • 哪儿有 sql server2000 下载 ?? 要集合了sp3
  • sql server 2000 的位运算
  • SQL SERVER 2008中怎么搜索当前数据库下的所有函数的集合...
  • 如何得到sql server 关键字集合,或者说如何把一条sql语句的所有...
  • 在Action中查询出SQL SERVER表的数据,返回一个list。怎么在...
  • ERVER中UNION语句用法问题
  • 求救!!关于sql server远程ado连接的问题
  • sql server中如何查到满足某一条件,而这些记录中的某个字段的...
  • SQL Server中的文件组是什么意思?
  • sqlserver多表联合查询
  • SQL Server常见的数据库对象有哪些?
  • sqlserver 游标有哪些属性
  • sql 语句怎么获取查询出来的一个集合中的其中一条记录
  • sql server 存储过程如何返回一个集合啊?
  • sql server 2008数据库关系图怎么定义主键和约束
  • sql server中架构是什么意思
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mssqlsqlserver 数据集合的交、并、差集运算sqlserver 实用操作小技巧集合sql server的一个有趣的bit位运算分享sql server 2008中的apply运算符使用方法通过sql server的位运算功能巧妙解决多选查询方法sqlserver apply表运算符使用介绍sql server 表数据改变触发发送邮件的方法sql server配置管理器无法连接到wmi提供程序浅析sql server中包含事务的存储过程sqlserver convert 函数测试结果case 嵌套查询与连接查询你需要懂得sql server数据库安装时常见问题解决方案集锦随机抽取的sql语句 每班任意抽取3名学生centos 7.3上sql server vnext ctp 1.2安装教程复制sqlserver数据库的方法分享网站群发站内信数据库表设计sql server 2012 安装图解教程(附sql server数据库入门学习总结microsoft sql server 2012 数据sql重复记录查询的几种方法win7系统安装sqlserver2000的详细sqlserver中distinct的用法(不重sql server错误代码大全及解释(sql-order by 多字段排序(升序、sql将一个表中的数据插入到另一个用sql语句添加删除修改字段、一些aspnetpager分页控件 存储过程distinct 多列问题结合group by的解决方法sql中的常用的字符串处理函数大全sqlserver中操作主从关系表的sql语句sql获取第一条记录的方法(sqlserver、ora删除重复记录sql查询排名函数实例获取sql server2014的安装时间sql查询入门(中篇)sql语句执行超时引发网站首页访问故障问题
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved