1. ホーム
  2. sql

[解決済み】JOINやWHERE内の条件について

2022-04-02 06:13:32

質問

JOIN句とWHERE句に条件を入れることに違い(パフォーマンス、ベストプラクティスなど...)はありますか?

例えば...

-- Condition in JOIN
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD 
ON CUS.CustomerID = ORD.CustomerID
AND CUS.FirstName = 'John'

-- Condition in WHERE
SELECT *
FROM dbo.Customers AS CUS
INNER JOIN dbo.Orders AS ORD 
ON CUS.CustomerID = ORD.CustomerID
WHERE CUS.FirstName = 'John'

あなたはどちらが好きですか(そしておそらくその理由も)?

解決方法は?

関係代数では、述語の交換が可能である。 WHERE 節と INNER JOIN であっても、そのため INNER JOIN クエリに WHERE 節は、オプティマイザによって述語が再配置されることがあります。 はすでに除外されている可能性があります。 の間に JOIN の処理を行います。

クエリーはできるだけ読みやすいように書くことをお勧めします。

時には、これには INNER JOIN を比較的不完全なものにし、基準のいくつかを WHERE 単に、フィルタリング基準のリストをよりメンテナンスしやすくするためです。

例えば、その代わりに

SELECT *
FROM Customers c
INNER JOIN CustomerAccounts ca
    ON ca.CustomerID = c.CustomerID
    AND c.State = 'NY'
INNER JOIN Accounts a
    ON ca.AccountID = a.AccountID
    AND a.Status = 1

書いてください。

SELECT *
FROM Customers c
INNER JOIN CustomerAccounts ca
    ON ca.CustomerID = c.CustomerID
INNER JOIN Accounts a
    ON ca.AccountID = a.AccountID
WHERE c.State = 'NY'
    AND a.Status = 1

でも、もちろん場合によるんですけどね。