2016-10-14 22 views
0

Left Outer JoinのON句は、実際にどのテーブルが左か右であるかを実際に決定するとの通知を受けました。私がこれを見ても、ON句でキーを左右に動かすと、実際に結果に違いは見られません。私はテクテットについても見てきましたが、私はこれに関する文書を見つけることができません。SQL Left Outer Join On Clause Placement

ON句にキーを配置すると、実際に左右どちらのテーブルが決定され、結果セットが異なるのでしょうか?例えば

SELECT * 
FROM Product p 
LEFT OUTER JOIN Review r ON p.ProductKey = r.ProductKey 


SELECT * 
FROM Product p 
LEFT OUTER JOIN Review r ON r.ProductKey = p.ProductKey 
+0

しかし、一部のDBMSのパフォーマンス要因になる可能性があります。 – Sanka

+0

@Sanka:現代のDBMSはどこに違いがあるのでしょうか –

+0

間違っていると伝えられています。あなたの2つのクエリは同等です - ANSI標準なので、結果セットは同じです。 2つのクエリに対して異なる計画を立てることができるSQLコンパイラを想像するのは難しいです。 –

答えて

1

基本的に、あなたはFROM句にリストアップテーブルは、クエリの「左側」であり、かつ任意のテーブル(複数可)あなたはJOIN節(複数可)にリストアップされています"右側"。

SELECT ... 
FROM lefttable 
JOIN righttable ON ... 

し、その後、左/右のキーワードが使用されているこれら二つのテーブルのどちらを決定参加:

すべての使用可能な任意の「正しい」レコードを「左」の記録:

SELECT 
FROM lefttable 
LEFT JOIN righttable ON ... 

すべて」利用可能な「左」レコードを含む「右」レコード:

SELECT ... 
FROM lefttable 
RIGHT JOIN righttable ON ... 

右/左セマンティクスの入れ替え基本的に同じクエリを作成します。

SELECT ... FROM lefttable RIGHT JOIN righttable ON ... 
SELECT ... FROM righttable LEFT JOIN lefttable ON ...