![]() |
1
11
存在字面上的存在是为了检查特定标准的存在。在当前的标准SQL中,它将允许您指定多个比较标准-例如,如果您想知道col_a和col_b何时匹配-这使得它比in子句更强一些。mysql-in支持元组,但语法不可移植,所以exists是可读性和可移植性的更好选择。 与exists一起要注意的另一件事是它如何操作-exists返回一个布尔值,并在第一次匹配时返回一个布尔值。因此,如果您处理的是重复/多个,那么exists的执行速度将比in或join快,这取决于数据和需要。 在in是or子句的句法糖。虽然它非常适合,但在处理该比较的大量值方面存在问题(以北1000)。 不是not运算符只是反转逻辑。 子查询与联接“总是使用连接”这句咒语是有缺陷的,因为如果一个父级存在多个子级记录,则连接会增加结果集的风险。是的,您可以使用distinct或group by来处理这个问题,但这很可能会使使用join moot的性能受益。了解您的数据,以及您对结果集的需求——这些是编写性能良好的SQL的关键。 重申知道何时和为什么要使用左连接是空的,这是MySQL上最快的排除列表。 如果比较的列不可为空 否则不在/不存在是更好的选择。 参考文献: |
![]() |
2
3
它们的工作方式非常不同:
但是,这两种方法都可以用来检查表A中的一行是否在表B中有匹配的行。除非您小心并且知道您在做什么,否则我将在MySQL中避开它,因为它在更复杂的查询中通常会提供更差的性能。使用不存在或左联接…在哪里?为空。 |
|
Johnny T · 基于当前值的SQL合并表[重复] 3 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 4 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 4 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 4 月前 |
![]() |
Sax · 规范化Google表格(第一步) 4 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 4 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 4 月前 |