あなたは「内部」に興味を示し、次に「意味論」を説明する例を尋ねました。私はセマンティクスに答えています。
これらの表を検討してください。
Table1 : 1, 4, 6
Table2 : 2, 4, 5
Table3 : 3, 5, 6
どちらの例も最初に同じ結合を実行するので、ここで実行します。
FirstResult = T1 FULL JOIN T2 : (T1, T2)
(1, null)
(4, 4)
(6, null)
(null, 2)
(null, 5)
例(A)
FirstResult FULL JOIN T3 ON FirstItem : (T1, T2, T3)
(1, null, null)
(4, 4, null)
(6, null, 6) <----
(null, 2, null)
(null, 5, null) <----
(null, null, 3)
例(B)
FirstResult FULL JOIN T3 ON SecondItem : (T1, T2, T3)
(1, null, null)
(4, 4, null)
(6, null, null) <----
(null, 2, null)
(null, 5, 5) <----
(null, null, 3)
これは、結合から結果を生成する方法を論理的に示しています。
「内部」には、クエリオプティマイザと呼ばれるものがあります。これは、これらの同じ結果を生成しますが、計算/ioを高速に実行するための実装の選択を行います。これらの選択肢は次のとおりです。
- 最初にアクセスするテーブル
- インデックスまたはテーブルスキャンを使用してテーブルを調べます
- 使用する実装タイプを結合します(ネストされたループ、マージ、ハッシュ)。
また、オプティマイザーがこれらの選択を行い、最適と見なされるものに基づいてこれらの選択を変更するため、結果の順序が変わる可能性があります。結果のデフォルトの順序は、常に「最も簡単なもの」です。デフォルトの順序が必要ない場合は、クエリで順序を指定する必要があります。
オプティマイザーがクエリで何をするかを正確に確認するには(現時点では、考えが変わる可能性があるため)、実行プランを表示する必要があります。