使用where代替在SQL查询的join子句中添加条件会更好吗?

德米特里·库兹涅佐夫

您好:)我对MySQL查询有疑问。哪个更快,为什么?有什么区别吗?

select tab1.something, tab2.smthelse
from tab1 inner join tab2 on tab1.pk=tab2.fk 
WHERE tab2.somevalue = 'value'

或者这个:

select tab1.something, tab2.smthelse
from tab1 inner join tab2 on tab1.pk=tab2.fk 
AND tab2.somevalue = 'value'
菲尔·桑德勒

正如西蒙(Simon)所指出的,性能差异应该可以忽略不计。主要要考虑的是确保您的查询正确表达了您的意图,并且(特别是)您获得了预期的结果。

通常,仅当过滤器是join条件时,才希望将过滤器添加到JOIN子句中在大多数(并非全部)情况下,应将过滤器应用于WHERE子句,因为它是整体查询的过滤器,而不是联接本身的过滤器。

AFAIK,这真正影响查询结果的唯一实例是使用OUTER JOIN时。

考虑以下查询:

SELECT *
FROM Customer c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId
WHERE o.OrderType = "InternetOrder"

SELECT *
FROM Customer c
LEFT JOIN Orders o ON c.CustomerId = o.CustomerId AND o.OrderType = "InternetOrder"

第一个将为订单类型为“ Internet订单”的每个客户订单返回一行。实际上,由于已将过滤器应用于整个查询,因此您的左联接已成为内部联接(即,根本不会返回没有“ InternetOrder”的客户)。

第二个将为每个客户返回至少一行。如果客户没有订单类型为“ Internet Order”的订单,则它将为所有订单表字段返回空值。否则,它将为“ Internet Order”类型的每个客户订单返回一行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用where代替在SQL查询的join子句中添加条件会更好吗?

来自分类Dev

SQL查询:在WHERE子句中使用AND / OR

来自分类Dev

如何在SQL分页查询中的WHERE子句中添加其他条件

来自分类Dev

WHERE子句或ON子句中的INNER JOIN条件?

来自分类Dev

sql在join vs where子句中的左连接条件

来自分类Dev

SQL子句中的条件WHERE

来自分类Dev

SQL:if条件在where子句中

来自分类Dev

PostgreSQL:使用CASE在where子句中添加条件

来自分类Dev

SQL - 使用 INNER JOIN 的 WHERE 子句中的“NOT IN”不起作用

来自分类Dev

在SQL查询的WHERE子句中使用表的值

来自分类Dev

使用查询结果确定SQL的where子句中的值?

来自分类Dev

使用WHERE子句中的and或and结构优化SQL查询

来自分类Dev

在SQL查询的'WHERE'子句中的'SELECT'中使用'IF'的结果

来自分类Dev

在 where 子句中使用可变参数查询 SQL

来自分类Dev

sql在where子句中使用查询别名

来自分类Dev

SQL Server:根据where子句中的条件使用AND或OR

来自分类Dev

如何在WHERE子句中添加条件?

来自分类Dev

在where子句中添加动态条件

来自分类Dev

WHERE子句中的HIVE SQL子查询

来自分类Dev

sql查询-如果WHERE子句中存在

来自分类Dev

SQL查询的WHERE子句中的CASE语句

来自分类Dev

SQL在select或where子句中的插入查询

来自分类Dev

Where子句中的PDO SQL查询错误

来自分类Dev

WHERE子句中的SQL查询聚合函数

来自分类Dev

SQL在where子句中优化条件

来自分类Dev

SQL Server:WHERE子句中的IF条件

来自分类Dev

where子句中的SQL Server条件

来自分类Dev

SQL在where子句中优化条件

来自分类Dev

Where 子句中的 SQL Server 条件语句