需要考虑两个不同方面: 性能和可维护性/可读性。
可维护性/可读性
我选择了一个不同的查询,因为我认为这是一个比您发布的原始查询更好/更差的示例。
什么对您来说看起来更好并且更具可读性?
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e
inner join HumanResources.EmployeeDepartmentHistory edh
on e.BusinessEntityID = edh.BusinessEntityID
inner join HumanResources.Department d
on edh.DepartmentID = d.DepartmentID
where d.Name = 'Engineering';
要么...
select
e.LoginID,
DepartmentName = d.Name
from HumanResources.Employee e,
HumanResources.EmployeeDepartmentHistory edh,
HumanResources.Department d
where e.BusinessEntityID = edh.BusinessEntityID
and edh.DepartmentID = d.DepartmentID
and d.Name = 'Engineering';
就我个人而言,第一个是可读性强的。您将看到我们使用来联接表INNER JOIN
,这意味着我们将拉出与后续联接子句匹配的行(即“将Employee与BusinessEntityID上的EmployeeDepartmentHistory联接并包括那些行”)。
后者,逗号对我没有任何意义。这让我想知道您正在使用所有这些WHERE
子句谓词。
前者读起来更像我的大脑所想。我每天都在看SQL,以及连接的逗号。这引出我的下一个观点...
实际上,还有其他方法可以使这类查询起作用,称为“联接”。
他们都是联接。连逗号都是联接。作者没有给他们打电话的事实确实是他们的失败....这不是显而易见的。应该很明显。您正在联接关系数据,无论您指定JOIN
还是,
。
性能
这绝对是依赖RDBMS的。我只能代表Microsoft SQL Server发言。在性能方面,这些是等效的。你怎么知道的?捕获执行后的计划,并查看SQL Server对于以下每个语句的确切作用:
在上图中,我突出显示了我正在使用上述两个查询,只是在连接(JOIN
vs ,
)的显式字符上有所不同。SQL Server完全一样。
摘要
不要使用逗号。使用显式JOIN
语句。