in与exist的区别
1.使⽤场景
  in:适合外⼤内⼩
  exist:适合外校内⼤
2.执⾏顺序
    in:先执⾏⼦查询,然后在执⾏主查询,在根据⼦查询的结果集返回正确的信息
  exist:先执⾏主查询,在执⾏⼦查询,由于exist查询中⼦查询不返回具体的信息,只返回True或者false。
3.附上⼀篇觉得正确的⽂章,欢迎探讨:
in 和 exists也是很好区别的.
in 是⼀个集合运算符.
a in {a,c,d,}
这个运算中,前⾯是⼀个元素,后⾯是⼀个集合,集合中的元素类型是和前⾯的元素⼀样的.
⽽exists是⼀个存在判断,如果后⾯的查询中有结果,则exists为真,否则为假.
in 运算⽤在语句中,它后⾯带的select ⼀定是选⼀个字段,⽽不是select *.
⽐如说你要判断某班是否存在⼀个名为"⼩明"的学⽣,你可以⽤in 运算:
"⼩明" in (select sname from student)
这样(select sname from student) 返回的是⼀个全班姓名的集合,in⽤于判断"⼩明"是否为此集合中的⼀个数据;
同时,你也可以⽤exists语句:
exists (select * from student where sname="⼩明")
这两个涵数是差不多的, 但是由于优化⽅案的不同, 通常NOT EXISTS要⽐NOT IN 要快, 因为NOT EXISTS可以使⽤结合算法⽽NOT IN 就不⾏了,⽽EXISTS则不如IN快, 因为这时候IN可能更多的使⽤结合算法.
select * from 表A where exists(select * from 表B where 表B.id=表A.id)
这句相当于
select * from 表A where id in (select id from 表B)
对于表A的每⼀条数据,都执⾏select * from 表B where 表B.id=表A.id的存在性判断,如果表B中存在表A当前⾏相同的id,则exists为真,该⾏显⽰,否则不显⽰
exits适合内⼩外⼤的查询,in适合内⼤外⼩的查询
IN
确定给定的值是否与⼦查询或列表中的值相匹配。
EXISTS
指定⼀个⼦查询,检测⾏的存在。
⽐较使⽤ EXISTS 和 IN 的查询
in运算符的含义
这个例⼦⽐较了两个语义类似的查询。第⼀个查询使⽤ EXISTS ⽽第⼆个查询使⽤ IN。注意两个查询返回相同的信息。
USE pubs
GO
SELECT DISTINCT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
GO
-- Or, using the IN clause:
USE pubs
GO
SELECT distinct pub_name
FROM publishers
WHERE pub_id IN
(SELECT pub_id
FROM titles
WHERE type = 'business')
GO
下⾯是任⼀查询的结果集:
pub_name
----------------------------------------
Algodata Infosystems
New Moon Books
(2 row(s) affected)
exits 相当于存在量词:表⽰集合存在,也就是集合不为空只作⽤⼀个集合.例如 exist P 表⽰P不空时为真; not exist P表⽰p为空时为真 in表⽰⼀个标量和⼀元关系的关系。例如:s in P表⽰当s与P中的某个值相等时为真; s not in P 表⽰s与P中的每⼀个值都不相等时为真

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。