本文目录
- SQL中IN和EXISTS用法的区别
- sql server中not in,in与not exists,exists有什么不同
- sql中in和exists的区别效率问题 转
- 数据库sql语句中为什么exists关键字 要比 in 关键字执行效率高
SQL中IN和EXISTS用法的区别
IN表示条件是在一个集合里,比如
in (’A’,’B’,’C’,’D’)
条件就是在ABCD这个集合里找。
EXISTS返回的是一个布尔值,也就是它判断的是真假,比如
EXISTS (select * from 用户表 where 姓名=’张三’)
表示:有张三这个用户则返回“真”,否则返回“假”
sql server中not in,in与not exists,exists有什么不同
我给你举几个例子你感受一下。
(1)select * from student where class not in (’1’,’2’,’3’)
查询班级不在1,2,3的学生信息
(2))select * from student where class in (’1’,’2’,’3’)
查询班级在1,2,3的学生信息
in和not in的用法,更多会出现在子查询中,
例如 select * from student where sno in (select sno from Exam where course =’English’) 查询参加了英语考试的学生信息。
(3)exists 更多时候出现在if判断中, 它只做一个是或否的判断,例如如果存在birthday=今天的学生,那么就把他的age+1
if exists (select 1 from student where birthday=getdate())BEGINupdate student set age=age+1 where birthday=getdate()ENDelse select N’今天没有同学过生日’
sql中in和exists的区别效率问题 转
in和existsin 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)效率低,用到了A表上cc列的索引;select * from A where exists(select cc from B where cc=A.cc)效率高,用到了B表上cc列的索引。相反的2:select * from B where cc in (select cc from A)效率高,用到了B表上cc列的索引;select * from B where exists(select cc from A where cc=B.cc)效率低,用到了A表上cc列的索引。not in 和not exists如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论那个表大,用not exists都比not in要快。in 与 =的区别select name from student where name in (’zhang’,’wang’,’li’,’zhao’);与select name from student where name=’zhang’ or name=’li’ orname=’wang’ or name=’zhao’的结果是相同的。转的***隐藏网址***
数据库sql语句中为什么exists关键字 要比 in 关键字执行效率高
exists是根据子查询有无记录返回确定条件是否成立,如果有记录返回,条件成立,如果子查询未返回记录,条件不成立,不对子查询结果进行匹配,所以速度较快;in要对子查询返回的结果用in关键字前面的值逐个进行匹配,如果匹配成功条件成立,匹配不成功条件不成立,所以速度较慢。