JOINS 和 SUBQUERIES 有啥区别?我们可以用连接做的任何事情都可以用子查询来完成,反之亦然? [复制]

Posted

技术标签:

【中文标题】JOINS 和 SUBQUERIES 有啥区别?我们可以用连接做的任何事情都可以用子查询来完成,反之亦然? [复制]【英文标题】:What is difference between JOINS and SUBQUERIES?Can anything we can do with joins can be done with subqueries also or vice-versa? [duplicate]JOINS 和 SUBQUERIES 有什么区别?我们可以用连接做的任何事情都可以用子查询来完成,反之亦然? [复制] 【发布时间】:2011-12-04 01:42:02 【问题描述】:

可能重复:SQL: Join vs. subquery

有什么我们可以用连接做的,但不能用子查询做,反之亦然?

【问题讨论】:

这种问题不应该在这里。一开始没有多大意义。 有什么相似之处? :-) 【参考方案1】:

在大多数企业应用程序的情况下,问题不仅在于是否可以完成某事,还在于如何完成。一般来说,联接比子查询更快且成本更低。 SO上关于这个主题的大量其他帖子。这是一个:Join vs. sub-query

【讨论】:

“一般来说,Join 速度更快,成本更低”——但是泛化有什么价值吗? 有没有办法在oracle中使用join来写相关子查询?【参考方案2】:

坦率地说,我想不出任何一种方法(子查询或联接)都无法实现一件事的情况。

对我来说,它更多的是关于可读性和性能。例如,子查询可能较慢,而连接可能会利用某些索引。至少从 DBMS 的角度来看,我想在分析表达式时优化连接应该更容易。

例如,考虑多个连接表示为子查询的情况。对大多数人来说,看到以LeftRightInner 表示的语句会更容易理解和维护。我什至避免使用隐式连接,因为它们隐藏了意图。换句话说,我更喜欢将连接表示为 from table a inner join table b on a.id=b.idfrom table a, table b where a.id=b.id. 将连接实现为子查询使其可读性更差,IMO。

【讨论】:

“对于大多数人来说,看到表达为左、右或内连接的语句会更容易理解和维护”——我不确定这对大多数人是否正确,当然不是我例如我更喜欢使用EXISTS (subquery) 写semijoin 而不是加入,semi difference 同上,我注意到很多人喜欢使用IN (subquery) 有没有办法在oracle中使用join来写相关子查询?

以上是关于JOINS 和 SUBQUERIES 有啥区别?我们可以用连接做的任何事情都可以用子查询来完成,反之亦然? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SUBQUERIES 找到每个部门的最高薪水

sql joins

连接的 WHERE 和 ON 之间的 SQL 区别 [重复]

(Les17 Retrieving Data Using Subqueries)[20180103]

# $ 和 % 有啥区别?

= 和 == 有啥区别?