谁来告诉我in和exists的区别,最好能举个例子,为什么一般exists的效率比in的高,他们的具体执行过程是怎么样的,请详述~~~~谢谢大侠们~~~
1、适用表的类型不同。
in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。
exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。
2、子查询关联不同。
exists一般都是关联子查询。对于关联子查询,必须先执行外层查询,接着对所有通过过滤条件的记录,执行内层查询。外层查询和内层查询相互依赖,因为外层查询会把数据传递给内层查询。
in则一般都是非关联子查询,非关联子查询则必须先完成内层查询之后,外层查询才能介入。
3、执行次数不同。
IN 语句:只执行一次,确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。
EXISTS语句:执行次数根据表的长度而定。指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。匹配上就将结果放入结果集中。
SQL语句语言特点:
1、SQL风格统一
SQL可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录人数据、建立数据库、査询、更新、维护、数据库重构、数据库安全性控制等一系列操作,这就为数据库应用系统开发提供了良好的环境,在数据库投入运行后,还可根据需要随时逐步修改模式,且不影响数据库的运行,从而使系统具有良好的可扩充性。
2、高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,用其完成用户请求时,必须指定存取路径。而用SQL进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。
利用索引什么意思???
追答对于数据量很大的表都为其经常作为查询条件的列建立索引,以此提高查询速度。数据量越大其查询效果越好,有无索引的查询速度相差几倍到几十倍。在上述答案是两个表td和tx都有col列索引的前提下,为了提高效率尽可能在大表上利用索引。
本回答被提问者采纳能细说一下exists的执行过程么?
如 是先查一下主查询得到一条结果就和后面的子表中比较,还是把主查询所有结果查出来再执行后面的子查询呢?能不能具体说一下它的执行过程,刚刚学数据库,实现不懂丫~~
为什么table1<<table2时 exists查询效率高呢?
关于查询语句中的in和exists的区别
1、适用表的类型不同。in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外面的表结果集大的情况。exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面的表结果集小而子查询结果集大的情况。2、子查询关联不同。exists一般都是关联子查询。对于关联子查询,必须先执...
查询语句中in和exists的区别
一、in和exists区别in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。如果查询的两个表大小相当,那么用in和exists差别不大。二、如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的...
SQL查询中in和exists的区别分析
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果查询的两个表大小相当,那么用in和exists差别不大。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where ...
Sql 语句中 IN 和 EXISTS 的区别及应用
IN与EXISTS的区分:IN适用于子查询结果集小、主查询表大且有索引的场景;EXISTS适用于主查询记录少、子查询表大且有索引的场景。主要区别在于驱动顺序改变,影响性能。IN与EXISTS性能比较:IN使用hash连接,EXISTS使用循环与内表查询。认为EXISTS总是比IN效率高的说法是不准确的。not in与not exists:使用...
MySQL中的IN与EXISTS
exists和in的执行过程有显著差异:exists通过对外表逐条查询,每次查询都与内表的子查询进行比较,而in则是先将外表的所有记录取到,然后逐行与内表关联,判断内表的子查询是否有返回数据。in使用Block Nested Loop执行,先查询内表,再与外表匹配,而exists则将主查询的结果集放到子查询中验证,根据验证...
sql exist和in的区别及查询效率比较
IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。4、关于EXISTS:EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False。EXISTS 指定一个子查询,检测行的存在。语法: EXISTS subquery 参数: subquery 是一个受限的 SELECT 语句 (不...
sql中in和exists的区别效率问题 转
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in:例如:表A(小表),表B(大表)1:select * from A where cc in (select cc from B)效率低,用到...
SQL语句中 in和exist区别
其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。除了第一类in语句都是可以转化成exists 语句的,一般编程习惯应该是用exists而不用in.A,B两个表,(1)当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快...
SQL中IN和EXISTS用法的区别
IN和EXISTS一般用于SELECT语句的WHERE子句中作为记录筛选的条件.IN的一般语法格式为:列(或表达式) IN(子查询),带IN的子查询只能返回一列值,如果IN前面的列(或表达式)和子查询返回的集合中的一个或一个以上的值相等,则条件为真;如果IN前面的列(或表达式)和子查询返回的集合中的所有值均不相等,则条件...
SQL中IN和EXISTS用法的区别
总的来说in和exists在得到结果上差不太多,如果只有一个字段 where a.co1 in (select co1 from b) 和 where exists(select 1 from b where co1=a.co1)这两个效果真的是一样一样的,但是用exists有个好处,它可以写更加复杂的逻辑判断,而in用起来就显得不那么好用了(同时判断多个字段,...