美文网首页
关联子查询和非关联子查询

关联子查询和非关联子查询

作者: 42c64edf12e9 | 来源:发表于2019-08-04 21:20 被阅读0次

对于exist和in,大家的一致看法如下:
1.in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而
外面的表结果集大的情况。
2.exists是外面的表位驱动表,子查询里面的表为被驱动表,故适用于外面
的表结果集小而子查询结果集大的情况。
而为何会出现这种区别呢,其实问题的关键在于关联子查询和非关联子查询上。exists一般都是关联子查询,in则一般都是非关联子查询。
对于关联子查询,必须先执行外层查询,接着对所有通过过滤条件的记录,执行
内层查询。外层查询和内层查询相互依赖,因为外层查询会把数据传递给内层查询。
非关联子查询则必须先完成内层查询之后,外层查询才能介入。
exsits:
select whatever from table_a a
where exists(
select null from table_b b
where b.id=a.id
and somecondition
)
and somecondition
可以看到,在exists子查询里面,有关键的一个连接条件:where b.id=a.id,就是这个条件决定了必须先找出a中符合条件的记录,然后才能与b连接,最终得出查询的结果。这就是为什么说exists适用于外面的表结果集小而子查询结果集大的情况。因为必须先执行外层查询,然后才能执行内层查询。
而in则恰恰相反,不再详述

相关文章

  • 关联子查询和非关联子查询

    对于exist和in,大家的一致看法如下:1.in是子查询为驱动表,外面的表为被驱动表,故适用于子查询结果集小而外...

  • 数据库笔记-SQL子查询

    子查询:关联查询和非关联查询 子查询是「查询」中的「查询」,就是「嵌套查询」。 以 NBA 的SQL数据库文件为例...

  • 速度问题

    sql里的关联子查询和交叉联接都是比较浪费时间的。 非关联子查询(Noncorrelated subquery) ...

  • 06 子查询

    目录链接:https://www.jianshu.com/p/2c104aaadb03 关联子查询与非关联子查询 ...

  • 关联子查询与非关联子查询的区别

    sql的编写顺序 select .. from .. where .. group by ..having ....

  • SQL必知必会(子查询)

    一、什么是关联子查询,什么是非关联子查询 子查询虽然是一种嵌套查询的形式,不过我们依然可以依据子查询是否执行多次,...

  • 一文详解 SQL 关联子查询

    本文主要介绍什么是关联子查询以及如何将关联子查询改写为普通语义的sql查询。 在背景介绍中我们将讲讲常见的关联子查...

  • 关联子查询

    关联子查询会在细分的组内进行比较时使用。关联子查询和GROUP BY子句一样,也可以对表中的数据进行切分。关联子查...

  • SQL关联子查询

    简单易懂教你学会SQL关联子查询 初学SQL的人都会觉得SQL的关联子查询难以理解,为什么?这是有原因的。 关联子...

  • 第六章 查询性能优化(下)

    MySQL查询优化器的局限性 关联子查询 MySQL的关联子查询实现的很差,最好改成左外连接(LEFT OUTER...

网友评论

      本文标题:关联子查询和非关联子查询

      本文链接:https://www.haomeiwen.com/subject/cnqudctx.html