假设我有3张桌子。
我想获得2010年销售的详细报告。我会加入。我有兴趣了解以下哪项更有效,为什么?
SELECT
O.OrderNum, R.Name, C.Name
FROM
Order O INNER JOIN Rep R ON O.RepCode = R.RepCode
INNER JOIN Customer C ON O.CustomerNumber = C.CustomerNumber
WHERE
O.OrderDate >= '01/01/2010'
SELECT
O.OrderNum, R.Name, C.Name
FROM
Order O INNER JOIN Rep R ON (O.RepCode = R.RepCode AND O.OrderDate >= '01/01/2010')
INNER JOIN Customer C ON O.CustomerNumber = C.CustomerNumber
答案 0 :(得分:4)
JOIN必须反映表格的关系方面。 WHERE子句,是一个过滤记录的地方。我更喜欢第一个。
首先使其可读,表关系应该是显而易见的(通过使用JOIN),然后是配置文件
效率方面,知道的唯一方法是对其进行分析,不同的数据库在执行查询时有不同的规划者
其中某些数据库可能先应用过滤器,然后再进行连接;某些数据库可能首先盲目地连接表,然后执行where子句。尝试分析,在Postgres和MySQL上使用EXPLAIN SELECT ...
,在SQL Server中使用Ctrl + K,使用SQL Server,您可以看到两个查询中哪一个相对于彼此更快