加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQL集合运算介绍及基础用法

发布时间:2023-06-21 13:02:41 所属栏目:MsSql教程 来源:
导读: 我们知道集合在数学中表示各种事物的总和,在数据库中也有集合,表示记录的集合。表,视图和查询的执行结果都是记录的集合,其中元素为表或者查询结果中的每一行。SQL中集合运算符有UNION,EXCEPT和INTERSECT这三

   我们知道集合在数学中表示各种事物的总和,在数据库中也有集合,表示记录的集合。表,视图和查询的执行结果都是记录的集合,其中元素为表或者查询结果中的每一行。SQL中集合运算符有UNION,EXCEPT和INTERSECT这三种,对应的是合并,差集和相交。下面我们就来看看SQL集合运算怎么使用。

    集合运算的基本使用

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

--合并两个提取表/派生表(derived table), 返回结果为:[a,b,c,d,e]

SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)

UNION

SELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

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

--提取表/派生表(derived table)可以是多列,列名、顺序可以不同,但列数必须相同

SELECT * FROM (VALUES('a','Anna'),('b','Bob'),('c','Cassie'),('e','Elina')) Table1 (FC, Name)

UNION ALL

SELECT * FROM (VALUES('a','Anna'),('b','Bob'),('c','Cassie'),('d','David')) Table2 (FC, Name)

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

--返回结果为:[e]

SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)

EXCEPT

SELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

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

--返回结果为:[a,b,c]

SELECT FC FROM (VALUES('a'),('b'),('c'),('e')) Table1 (FC)

INTERSECT

SELECT FC FROM (VALUES('a'),('b'),('c'),('d')) Table2 (FC)

    集合运算的使用场景

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

--使用Where子句 + OR

SELECT name, population, area FROM world WHERE area > 3000000 OR population > 25000000

--使用UNION

SELECT name, population, area FROM world WHERE area > 3000000

UNION

SELECT name, population, area FROM world WHERE population > 25000000

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

--返回结果为['1000000006','1000000007']

SELECT [Id] AS [cust_id] FROM

(

VALUES('1000000004'),('1000000005'),('1000000006'),('1000000007')

) dt ([Id])

EXCEPT

SELECT [cust_id] FROM [Customers]

--过滤出列表中存在于数据库中的项

--返回结果为['1000000004','1000000005']

SELECT [Id] AS [cust_id] FROM

(

VALUES('1000000004'),('1000000005'),('1000000006'),('1000000007')

) dt ([Id])

INTERSECT

SELECT [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

--EXCEPT

SELECT [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集合运算以及UNION, EXCEPT和INTERSECT三种集合运算符的使用示例介绍,希望对大家学习SQL有帮助,更多SQL相关内容大家可以继续关注其他文章。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章