INNER JOIN は参照キー用に作成され、INTERSECT はそうではないことは理解しています。しかし、私の知る限り、場合によっては、どちらも同じことを行うことができます。それでは、次の 2 つの式には (パフォーマンスなどにおいて) 違いがあるのでしょうか。あるとすれば、どちらが優れているのでしょうか。
表現1:
SELECT id FROM customers
INNER JOIN orders ON customers.id = orders.customerID;
表現2:
SELECT id FROM customers
INTERSECT
SELECT customerID FROM orders
ベストアンサー1
あなたの場合でも、それらは非常に異なります。
がどちらかのテーブルで重複している場合、はINNER JOIN
重複を返します。 は重複を削除します。 はを返すことはありませんが、を返します。id
INTERSECT
INNER JOIN
NULL
INTERSECT
NULL
これら 2 つは非常に異なります。INNER JOIN
は、通常、限られた列セットに一致し、いずれかのテーブルから 0 行以上の行を返すことができる演算子です。 は、INTERSECT
2 つのセット間で完全な行を比較するセットベースの演算子であり、小さい方のテーブルよりも多くの行を返すことはできません。