⑴ 在sql语句中,in和exist的区别是什么
in是把外表和内表作hash连接,而exists是对外表作loop循环。
⑵ SQL关于IN和EXISTS的区别
IN
确定给定的值是否与子查询或列表中的值相匹配。
EXISTS
指定一个子查询,检测行的存在。
比较使用 EXISTS 和 IN 的查询
exists()后面的子查询被称做相关子查询 他是不返回列表的值的.只是返回一个ture或false的结果,其运行方式是先运行主查询一次 再去子查询里查询与其对应的结果 如果是ture则输出,反之则不输出.再根据主查询中的每一行去子查询里去查询.
in()后面的子查询 是返回结果集的,换句话说执行次序和exists()不一样.子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去.符合要求的输出,反之则不输出.
⑶ sql 中的in 和exists区别
in和exists在功能上本质没有区别,唯一的区别就在于性能。也就是说同样的sql你用那个执行效率高的问题。
其实说简单点就是exists用到了关联,而in是在一个大的数据及合理筛选,这么说性能的优劣你就很明白了吧。关联的速度是要大于筛选的,所以你只要能用exists就别用in,这是写出好的sql语句的基本规则。
exists是查询是否存在,它后边跟的语句是查询*还是直接写个1,效果都一样,比如你看到的sql的例子,我把*改成1,结果都一样的。
select sno,sname,sdept
from student s1
where exists
(select 1 --*
from student s2
where s2.dept=s1.depe
and s2.name='小刘');
比如说这个例子学生表被赋予了两个别名s1和s2
语句中要求dept和depe相等,我把上边的语句改一下你可能就明白他的意思了:
select sno,sname,sdept
from student s1 ,student s2
where s1.dept =s2.depe
and s1.name = '小刘';
语句就是为了要看出student表中某两行或者多行之间的关系,所以要对自己关联,你仔细看一下你所面对的student表的每一列,就可能看明白了。
记住sql不要从技术上去理解,你就直接把它的功能用汉字表达出来,然后去理解就行了,跟我们说话时一个样的:
从表student中找到dept和(student表中)depe相同的名字叫小刘的学生
⑷ SQL中IN和EXISTS用法的区别
exists是用来判断是否存在的,当exists(查询)中的查询存在结果时则返回真,否则返回假。not exists则相反。
exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出。
in和exists
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。 如果查询的两个表大小相当,那么用in和exists差别不大。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in