Существует два аспекта: производительность и ремонтопригодность .
Ремонтопригодность / Читаемость
Я выбрал другой запрос, так как я думаю, что это лучший или худший пример, чем исходный запрос, который вы разместили.
Что выглядит лучше и читабельнее?
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 с EmployeeDepartmentHistory в BusinessEntityID и включаем эти строки»).
Последнее, запятая ничего не значит для меня. Это заставляет меня задуматься о том, что вы делаете со всеми этими WHERE
предикатами.
Первый читает больше, как думает мой мозг. Я смотрю на SQL весь день каждый день и запятые для объединений. Что приводит меня к моей следующей точке ...
Есть на самом деле другие способы заставить эти виды запросов работать, называемые "соединения"
Они все присоединяются. Даже запятые это соединение. Тот факт, что автор не называет их, это действительно их падение ... это не очевидно. Это должно быть очевидно. Вы объединяете реляционные данные, независимо от того, указали ли вы JOIN
или ,
.
Спектакль
Это определенно будет зависеть от RDBMS. Я могу говорить только от имени Microsoft SQL Server. По производительности они эквивалентны. Откуда вы знаете? Захватите планы после выполнения и посмотрите, что именно делает SQL Server для каждого из этих операторов:
На изображении выше я подчеркнул, что я использую оба запроса, как указано выше, отличающиеся только явными символами для соединения ( JOIN
против ,
). SQL Server делает то же самое.
Резюме
Не используйте запятые. Используйте явные JOIN
заявления.