、以下の操作のSQL順序である:FROM句
- WHERE句
- HAVING句
- SELECT句
- BY句
- GROUP ORDER BY句
単純なクエリでは、フィルタリングはFROM
句(の結合がこの部分に見つかった場合)の後に発生します。)。上記のあなたの気持ちは、主に関係を定義するリンク列とテーブルを結合することです。設定されている記録(ジョインの結果)WHERE
句、その後でType
をフィルタリングするために行われた後
まず、ここでLEFT JOIN
を使用してのもう一つの例だ1
に等しく、クエリ:2番目のクエリー対
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B
ON A.ContactID = B.ID AND
B.LastName = 'Michaels'
:
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B ON A.ContactID = B.ID
WHERE B.LastName = 'Michaels'
最初のクエリは、テーブルA
のすべてのレコードを返します。 B.LastName = 'Michaels'
は、テーブルB
がテーブルA
と結合される前に、LastName
がMichaels
に等しいすべてのレコードを除外します。したがって、表B
のフィルタリングされたレコードに一致しない表A
のレコードは、表B
の列の値がNULLになります。
2番目のクエリでは、最初のクエリでは同じ結果が得られず、レコードが結合された後に結果として別のフィルタリングが実行され、と等しいレコードしか取得されないため正確にINNER JOIN
と同じ結果を返します。 マイケルズ。
句が前に適用されます
のために依存しますが、クエリの実行プランを含めることはできますか?それはおそらくあなたの質問に答えるでしょう。 – mellamokb
私はいつも、クエリオプティマイザがそれを理解して、それが最適であった(または近くに)どこに適用したかの印象を受けました。 SSMSで「実際のクエリプランを含める」オプションをオンにしてクエリを実行すると、何が起こるかを確認できます。 –
何か変わるのですか?結果が正しいことはもちろんです。 SQL Serverはより効率的な方法になります。 – MarcinJuraszek