SQL 中的子查询什么时候用in什么时候用=?

作者&投稿:房明 (若有异议请与网页底部的电邮联系)
sql server 嵌套查询语句中什么时候用in,什么时候又用exists!~

sqlserver嵌套查询语句中使用in或者exists的场景和原则如下:
如果查询的两个表大小相当,那么用in和exists差别不大。两者都可以使用。
in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。所以当有多重循环,使用in更合适,效率越高。
如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in。
NOT EXISTS,exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度。

如果子查询只有1条记录,in和=是没有区别,如果子查询有多条记录,用=会出错的,所以in是无论只查询有多少条记录都可以使用,而=只有当子查询只有1条记录的时候才能使用
in和exists理解上其实是差不多,但对数据库而言,in的执行顺序是先执行只查询条件,然后把记录和外查询核对,找符合条件的,
而exists是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的,
如果外查询和子查询的条目数差异很大,那么效率相差很明显的

在多个值的范围内用in,等于一个固定的值用=


睢县15925596784: SQL 中的子查询什么时候用in什么时候用=? -
臧鸿鲑降: 在多个值的范围内用in,等于一个固定的值用=

睢县15925596784: sql server 嵌套查询语句中什么时候用in,什么时候又用exists! -
臧鸿鲑降: sqlserver嵌套查询语句中使用in或者exists的场景和原则如下:1. 如果查询的两个表大小相当,那么用in和exists差别不大.两者都可以使用.2. in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.所以当有多重循环,使用in更合适,效率越高.3. 如果两个表中一个较小,一个是大表,则子查询表大的用exists,子查询表小的用in.NOT EXISTS,exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度.

睢县15925596784: sql语句中嵌套时候用in 和=有什么区别 -
臧鸿鲑降: 如果子查询只有1条记录,in和=是没有区别,如果子查询有多条记录,用=会出错的,所以in是无论只查询有多少条记录都可以使用,而=只有当子查询只有1条记录的时候才能使用 in和exists理解上其实是差不多,但对数据库而言,in的执行顺序是先执行只查询条件,然后把记录和外查询核对,找符合条件的, 而exists是先执行外查询,再执行子查询,找到外查询记录后和只查询对比符合条件的, 如果外查询和子查询的条目数差异很大,那么效率相差很明显的

睢县15925596784: SQL中IN和EXISTS用法的区别
臧鸿鲑降: 理论上子查询表大的用exists,子查询表小的用in 但是多年经验告诉你,除非子查询的结果可以枚举出来 否则都用exists 原理是in会把子查询的结果全部先放到内存中,如果内存能放下则很快 放不下则会进行多次的IO交换,效率反而慢

睢县15925596784: SQL中IN和EXISTS用法的区别 -
臧鸿鲑降: 1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....)2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确的. 3.exist与in都可以实现一个目的.二者都可以用来过滤数据. exist的原理: exists做为where 条件时,是先对where 前的主查询询进行查询,然后用主查询的结果一个一个的代入exists的查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出

睢县15925596784: SQL语句的问题 当子查询返回多值的时候 我用什么语句去达到IN的效果呢? -
臧鸿鲑降: 对于in 和 exists的性能区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in,反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists. 其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系. 另外IN是不对NULL进行处理.

睢县15925596784: 在SQL中若子查询的结果为一个数据时是不是可以用"="代替"IN" -
臧鸿鲑降: 结果为单个时:可以使用 "="或"IN"结果为多个时:只可以用"IN"

睢县15925596784: SQL查询中in和exists的区别分析
臧鸿鲑降: IN 确定给定的值是否与子查询或列表中的值相匹配. EXISTS 指定一个子查询,检测行的存在. 比较使用 EXISTS 和 IN 的查询 这个例子比较了两个语义类似的查询.第一个查询使用 EXISTS 而第二个查询使用 IN.注意两个查询返回相同的信息...

睢县15925596784: Sql语句中IN和exists的区别及应用 -
臧鸿鲑降: 1.exist,not exist一般都是与子查询一zhidao起使用. In可以与子查询一起使用,也可以直接in (a,b.....).2.exist会针对子查询的表使用索引. not exist会对主子查询都会使用索引. in与子查询一起使用的时候,只能针对主查内询使用索引. not in则不会使用任何索引. 注意,一直以来认为exists比in效率高的说法是不准确容的.in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.

睢县15925596784: 什么时候SQL查询用到IN或者NOT IN -
臧鸿鲑降: SQL 用 IN 和NOT IN的情况是查询某些表是否有某些值某些值 如SELECT * FROM 表 WHERE ID IN(1,2,3....)查询表的ID字段为1,2,3....等值的信息SELECT * FROM 表 WHERE ID NOT IN(1,2,3....)查询表的ID字段不为1,2,3....等值的所有记录

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网