![]() |
1
7
连接往往更有效,因为在编写数据库时考虑了集合操作(而连接是集合操作)。 但是,不同数据库的性能、表的结构、表中的数据量以及查询返回的数据量都会有所不同。 如果数据量很小,我将使用像您这样的子查询,而不是联接。 以下是联接的外观:
我不会使用您发布的查询,因为有可能有多个节点记录具有
我会用:
这是更易读还是更容易理解?在这种情况下,这是个人偏好的问题。 |
![]() |
2
3
我认为连接更容易理解,而且效率更高。你的案子很简单,所以很可能是个麻烦。以下是我的写作方法:
|
![]() |
3
3
数据库中与性能相关的问题的答案是 它取决于 我们在操作中缺少细节。不知道你的具体情况…(因此,这些是一般的经验法则) 连接更好,更容易理解
书面询问与效率无关。* 您编写的查询以及实际运行的查询彼此之间几乎没有关系。编写查询有很多种方法,但获取数据的方法却很少,这取决于查询引擎来决定。这主要与索引有关。可以编写四个看起来完全不同但内部执行相同操作的查询。 (*写一个效率低下的可怕的查询是可能的,但这样做需要一种特殊的疯狂。)
|
![]() |
4
2
加入是有趣的:
但是你也可以表达一个没有加入的加入。]
有趣的是,对于这两个查询,SQL Server给出了一个稍微不同的查询计划,而join有一个聚集索引扫描,“join without a join”有一个聚集索引查找,这表明它是 better 至少在这种情况下! |
![]() |
5
1
|
![]() |
6
1
我看不出你写的有什么问题,如果合适的话,一个好的优化器甚至可以把它改成一个连接。 |
![]() |
7
1
此查询在逻辑上等同于一个join if且only if
否则,查询是不等价的:一个联接总是成功的,而如果有更多的联接,子查询将失败。
如果
如果是连接,
如果是子查询,子查询将执行一次并转换为
|
![]() |
8
1
最新的mysql 6.x代码将使用 半联接子查询优化 ,使这两个陈述在很大程度上等效: http://forge.mysql.com/worklog/task.php?id=3740 但是,实际上写出来是非常简单的,因为内部连接是默认的连接类型,这样做并不依赖于服务器对其进行优化(因为某些原因,它可能决定不进行优化,也不一定是可移植的)。一切都是平等的,为什么不去:
|
![]() |
M S · 显示加入两个表的所有可用视频 2 年前 |
![]() |
neeh · 为每个父记录选择具有条件的子记录数[重复] 3 年前 |
![]() |
J. Krajewski · 如何计算具有给定成员的组的行数? 3 年前 |
![]() |
VickyBoy · 我试图用3个以上的表构建一个查询,其中数据分散在 3 年前 |
![]() |
newGuy101 · 如何将SQL子查询转换为Join子句? 3 年前 |
![]() |
user18797786 · Fuzzy Wuzzy和另一列的条件 3 年前 |
![]() |
Python learner Shaavin · 在解码过程中保留空间 3 年前 |
![]() |
Marvin · 在MySQL视图中左键连接 3 年前 |