NOT EXISTS と NOT IN と LEFT JOIN WHERE IS NULL の違いは何ですか? 質問する

NOT EXISTS と NOT IN と LEFT JOIN WHERE IS NULL の違いは何ですか? 質問する

SQL クエリでも NOT EXISTS、NOT IN、または LEFT JOIN WHERE IS NULL を使用して同じことを実行できるようです。例:

SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)

SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)

SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL

すべての構文が正しいかどうかはわかりませんが、これらは私が目にした一般的なテクニックです。なぜ、どちらか一方を選択するのでしょうか? パフォーマンスは異なりますか? これらのうちどれが最も高速/効率的ですか? (実装に依存する場合、それぞれをいつ使用すればよいですか?)

ベストアンサー1

In a nutshell:

NOT IN is a little bit different: it never matches if there is but a single NULL in the list.

  • In MySQL, NOT EXISTS is a little bit less efficient

  • In SQL Server, LEFT JOIN / IS NULL is less efficient

  • In PostgreSQL, NOT IN is less efficient

  • In Oracle, all three methods are the same.

おすすめ記事