Il convient de prendre en compte deux aspects différents: performances et maintenabilité / lisibilité .
Maintenabilité / lisibilité
J'ai choisi une requête différente, car je pense que c'est un exemple meilleur / pire que la requête d'origine que vous avez postée.
Qu'est-ce qui vous va le mieux et qui est plus lisible?
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';
Ou...
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';
Pour moi personnellement, le premier est assez lisible. Vous voyez que nous joignons des tables avec INNER JOIN
, ce qui signifie que nous extrayons les lignes qui correspondent à la clause de jointure suivante (c'est-à-dire "rejoindre un employé avec EmployeeDepartmentHistory sur BusinessEntityID et inclure ces lignes").
Ce dernier, la virgule ne signifie rien pour moi. Je me demande ce que vous faites avec tous ces WHERE
prédicats d’article.
Le premier lit plus comme mon cerveau pense. Je regarde SQL toute la journée, tous les jours, ainsi que les virgules pour les jointures. Ce qui m'amène à mon prochain point ...
Il existe en fait d'autres moyens pour faire fonctionner ce type de requête, appelés "jointures".
Ils sont tous joints. Même les virgules sont une jointure. Le fait que l'auteur ne les appelle pas, c'est bien leur perte ... ce n'est pas évident. Cela devrait être évident. Vous joignez des données relationnelles, que vous spécifiiez JOIN
ou ,
.
Performance
Cela dépendra très certainement du SGBDR. Je ne peux parler qu'au nom de Microsoft SQL Server. Les performances sont équivalentes. Comment le sais-tu? Capturez les plans de post-exécution et voyez ce que SQL Server fait exactement pour chacune de ces instructions:
Dans l'image ci-dessus, j'ai souligné que j'utilise les deux requêtes comme ci-dessus, ne différant que par les caractères explicites de la jointure ( JOIN
vs ,
). SQL Server fait exactement la même chose.
Sommaire
N'utilisez pas de virgules. Utilisez des JOIN
déclarations explicites .