21

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
4

2 に答える 2

40

あなたの場合でさえ、それらは非常に異なります。

いずれかのテーブルで が重複してINNER JOINいる場合、 は重複を返しidます。 INTERSECT重複を削除します。はINNER JOIN決して戻りませんNULLが、INTERSECT戻りNULLます。

この 2 つは大きく異なります。1 つは、通常、列の限られたセットに一致する演算子であり、いずれかのテーブルで 0 行またはそれ以上の行を返すことができます。もう 1 つは、2 つのセット間で完全な行を比較するセットベースの演算子で、小さいテーブルよりも多くの行を返すことはできません。

于 2018-08-09T21:04:46.560 に答える
13

たとえば、次のことを試してください。

CREATE TABLE #a (id INT)

CREATE TABLE #b (id INT)

INSERT INTO #a VALUES (1), (NULL), (2)
INSERT INTO #b VALUES (1), (NULL), (3), (1)

SELECT a.id FROM #a a
INNER JOIN #b b ON a.id = b.id

SELECT id FROM #a
INTERSECT
SELECT id FROM #b
于 2018-08-09T21:06:43.210 に答える