これには、パフォーマンスと保守性/可読性の 2つの側面を考慮する必要があります 。
保守性/読みやすさ
あなたが投稿した元のクエリよりも良い/悪い例だと思うので、別のクエリを選択しました。
見た目が良く、読みやすいものは何ですか?
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
で結合していることがわかります。つまり、後続の結合句で一致する行をプルしています(つまり、「BusinessEntityIDでEmployeeDepartmentHistoryに従業員を結合し、それらの行を含める」)。
後者の場合、コンマは私には何の意味もありません。これらのWHERE
句の述語のすべてであなたが何をしているのか不思議に思います。
前者は私の脳が考えるようにもっと読む。私は毎日SQLを見て、結合のコンマを見てます。それは私の次のポイントに私を導きます...
実際には、これらの種類のクエリを「結合」と呼ばれる動作させる他の方法があります
それらはすべて結合です。コンマも結合です。作者が彼らを呼んでいないという事実は、確かに彼らの没落です....それは明らかではありません。明らかなはずです。あなたが指定したかどうか、リレーショナルデータに参加していますJOIN
か,
。
性能
これは、間違いなくRDBMSに依存します。Microsoft SQL Serverを代表してのみ話すことができます。パフォーマンスに関しては、これらは同等です。どうして知っていますか?実行後の計画をキャプチャし、これらの各ステートメントに対してSQL Serverが正確に何を行っているかを確認します。
上の画像では、上記の両方のクエリを使用していることを強調しました。結合の明示的な文字(JOIN
vs ,
)のみが異なります。SQL Serverはまったく同じことを行います。
概要
コンマを使用しないでください。明示的なJOIN
ステートメントを使用します。