SQL语句中WHERE NOT EXISTS ; WHERE title NOT IN; WHERE title IN 这些语句是什么意思 这些语句后接子查询
4个回答
展开全部
exists 英文存在的意思,父查询where not exists(子查询)---不存在子查询则满足父查询出发条件, where 字段 not in(子查询)。操作方法如下:
1、打开SQL Server Management Studio管理工具,连接上SQL Server数据库,打开SQL语句书写界面。
2、然后使用SQL语句创建一张测试表Test,用于测试where条件。
3、然后往测试表中插入几行测试数据。
4、查询表中的所有测试数据select * from Test;。
5、接着使用and条件查询:Col2=张三,同时Col1=第1行的记录。
6、最后同时使用and和or查询:Col2=张三同时Col1=第1行,或者,Col2=李四同时Col1=第5行的记录,需要使用括号分隔,就完成了。
展开全部
一般情况下我们称any,in,exists等词为谓词,也就是查询时使用,严格来称不是子句。而后边接的select语句称为子查询。其select查询的基础是集合运算,如果不懂集合运算时可能会有些难以理解,但如果了解集合运算,有助于你的理解。
集合中的交集,也就是两个集合中共有的部分,使用谓词exists或in。
select * from a where a.id in (select b.id from b)
表中a集合中同时也在b集合中。a.id与b.id来源于同一值域(也就是a.id与b.id的长度,类型,取值范围相同)。
也可以使用
select * from a where exists(select * from b)
该种写法与上句达到同样效果,但a的列必须包含在b的列中。
或者
select * from a where a.id exists(select b.id from b)
与第一句解释一样。
当然any其实也可以达到这种效果,但效率极差,主要是用于广义笛卡尔积的。
并集使用的是unin谓词
select * from a unin (select * from b)
表示a集合与b集合同值域,也就是说两者结果相同,实际上是子查询结果结构相同就可以了!
select a.id from a unin select b.id from b
这样a,b其实可以不同,两个子句结果相同即可。
差集(也就是集合的减法运算)在a集合中且不在b集合中
select * from a where a.id not in/exists(select b.id from b)
该句是求a集合中存在且在b集合中不存在的。可以参考交集实现。
但在关系中,将集合中的概念替换一下就可以了,一个是表不同是集合,结果也是结果集,而元素则被称为记录。
事实上,这种仍然是集合的运算,只不过引用时不同称为集合了,而是称关系。他有自己对应的概念,没事可以看一下关系运算(可不是逻辑关系,呵呵)。
只不过集合是一维上的离散,而关系则是二维上的离散而已。集合运算与关系运算的区别就在于一个元素是单一的,元素不再发生运算了。而关系上的一维元素还可以再进行计算,相当于集合的集合运算,但还是一种特例,集合的集合运算,严格上来说是一种广义表,而将广义表特殊化合,就是一维中元素相同时,才是关系运算。关系运算是广义表的一种特殊情况。
所以关系运算要比集合运算多出来几个运算内容的!
比如我们常说的投影运算(关系中的投影)在集合中是没有这样的运算的。还有的就是广义笛卡尔积等等。
所以在关系上除了交,并,差之外,(对于无限集合是没有补集运算的,补集运算只出现在有限集合中。)还有积,除运等运算。积运算(也称乘法运算)有两种,一种是广义笛卡尔积,M列P行的关系与N列Q行的关系,运算出的最终结果是M+N列,P*Q行的一个新的关系。另一种就是连接,其实加上联结果条件后,就是对广义笛卡尔积的一种选择运算。联结中又有很多种类,等值联结,自然连接等等,实际上对连接运算上的一种投影运算。除运算则是一种投影响与选择同时进行的运算。
一般情况下,我们可以认为,选择运算是集合同运算,也就是发生一个集合,根据条件选择符合条件的集合内的元素。而投影则是关系运算中特有的,在集合运算与广义表中都不存在的运算。也是集合同运算。投影可以理解为只取元素的一分部值。相当于对集合运算时这样的条件:求出该集合的每个元素前三个字母。
而对于并,交,差则是一般集合的运算(有限集合中还有补集的运算,但无限集合中没有补集的运算)我们称之为关系运算。
而对于积,乘则是行列(其实行列也是可看成关系运算的),关系运算的一种特殊运算,所以我们称之为扩展关系运算。
这个你可以去数据库技术上去专门学一下关系运算,以后不会再有此类问题的出现了!
集合中的交集,也就是两个集合中共有的部分,使用谓词exists或in。
select * from a where a.id in (select b.id from b)
表中a集合中同时也在b集合中。a.id与b.id来源于同一值域(也就是a.id与b.id的长度,类型,取值范围相同)。
也可以使用
select * from a where exists(select * from b)
该种写法与上句达到同样效果,但a的列必须包含在b的列中。
或者
select * from a where a.id exists(select b.id from b)
与第一句解释一样。
当然any其实也可以达到这种效果,但效率极差,主要是用于广义笛卡尔积的。
并集使用的是unin谓词
select * from a unin (select * from b)
表示a集合与b集合同值域,也就是说两者结果相同,实际上是子查询结果结构相同就可以了!
select a.id from a unin select b.id from b
这样a,b其实可以不同,两个子句结果相同即可。
差集(也就是集合的减法运算)在a集合中且不在b集合中
select * from a where a.id not in/exists(select b.id from b)
该句是求a集合中存在且在b集合中不存在的。可以参考交集实现。
但在关系中,将集合中的概念替换一下就可以了,一个是表不同是集合,结果也是结果集,而元素则被称为记录。
事实上,这种仍然是集合的运算,只不过引用时不同称为集合了,而是称关系。他有自己对应的概念,没事可以看一下关系运算(可不是逻辑关系,呵呵)。
只不过集合是一维上的离散,而关系则是二维上的离散而已。集合运算与关系运算的区别就在于一个元素是单一的,元素不再发生运算了。而关系上的一维元素还可以再进行计算,相当于集合的集合运算,但还是一种特例,集合的集合运算,严格上来说是一种广义表,而将广义表特殊化合,就是一维中元素相同时,才是关系运算。关系运算是广义表的一种特殊情况。
所以关系运算要比集合运算多出来几个运算内容的!
比如我们常说的投影运算(关系中的投影)在集合中是没有这样的运算的。还有的就是广义笛卡尔积等等。
所以在关系上除了交,并,差之外,(对于无限集合是没有补集运算的,补集运算只出现在有限集合中。)还有积,除运等运算。积运算(也称乘法运算)有两种,一种是广义笛卡尔积,M列P行的关系与N列Q行的关系,运算出的最终结果是M+N列,P*Q行的一个新的关系。另一种就是连接,其实加上联结果条件后,就是对广义笛卡尔积的一种选择运算。联结中又有很多种类,等值联结,自然连接等等,实际上对连接运算上的一种投影运算。除运算则是一种投影响与选择同时进行的运算。
一般情况下,我们可以认为,选择运算是集合同运算,也就是发生一个集合,根据条件选择符合条件的集合内的元素。而投影则是关系运算中特有的,在集合运算与广义表中都不存在的运算。也是集合同运算。投影可以理解为只取元素的一分部值。相当于对集合运算时这样的条件:求出该集合的每个元素前三个字母。
而对于并,交,差则是一般集合的运算(有限集合中还有补集的运算,但无限集合中没有补集的运算)我们称之为关系运算。
而对于积,乘则是行列(其实行列也是可看成关系运算的),关系运算的一种特殊运算,所以我们称之为扩展关系运算。
这个你可以去数据库技术上去专门学一下关系运算,以后不会再有此类问题的出现了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先说exists 英文存在的意思, 父查询where not exists(子查询)---不存在子查询则满足父查询出发条件,
where 字段 not in(子查询),如 select * from表名 where 学号 not in(select学号from表名where成绩<60)------子查询是 成绩小于60的人的学号,父查询是学号不在(子查询出来的学号)这里的人,,,所以整个查询是 成绩>60的人的信息,,
----------不知道我举得例子你看明白没
where 字段 not in(子查询),如 select * from表名 where 学号 not in(select学号from表名where成绩<60)------子查询是 成绩小于60的人的学号,父查询是学号不在(子查询出来的学号)这里的人,,,所以整个查询是 成绩>60的人的信息,,
----------不知道我举得例子你看明白没
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
exists表示,对于A中的每一个记录,如果,在表B中有记录,其属性a的值与表A这个记录的属性a的值相同,则表A的这个记录是符合条件的记录,
NOT exists,则表示如果表B中没有记录能与表A这个记录连接,则表A的这个记录是符合条件的记录;
title NOT IN 表示title值在后面的表达式中不存;title IN则表示title的值在后面的表达式中存在。
NOT exists,则表示如果表B中没有记录能与表A这个记录连接,则表A的这个记录是符合条件的记录;
title NOT IN 表示title值在后面的表达式中不存;title IN则表示title的值在后面的表达式中存在。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询