[解決済み] NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULLの違いは何ですか?
2022-04-26 12:14:40
質問
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
すべての構文が正しいかどうかは分かりませんが、これらは私が見た一般的な手法です。なぜどちらか一方を選ぶのでしょうか?パフォーマンスに違いはあるのでしょうか...?どれが一番速い/効率的なのでしょうか?(実装に依存するのであれば、それぞれをいつ使えばいいのでしょうか?)
どのように解決するのですか?
ひとことで言うと
NOT IN
が1つしかない場合は、決してマッチングしません。
NULL
を指定します。
-
で
MySQL
,NOT EXISTS
は少し効率が悪い -
で
SQL Server
,LEFT JOIN / IS NULL
は効率が悪い -
で
PostgreSQL
,NOT IN
は効率が悪い -
で
Oracle
のように、3つのメソッドはすべて同じです。
関連
-
[解決済み] 指定されたスキーマにテーブルが存在するかどうかを確認する方法
-
[解決済み] テーブルネーミングのジレンマ:単数形と複数形の名前【非公開
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み] JOINとINNER JOINの違いについて
-
[解決済み] MySQLでFULL OUTER JOINを行うにはどうすればよいですか?
-
[解決済み] SQLでランダムな行を要求する方法は?
-
[解決済み] SQL Serverで結果をページ分割する最も良い方法は何ですか?
-
[解決済み] 既存のカラムにIDを追加する
-
[解決済み] VARCHARとCHARの違いは何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理] [MySQL] [Err] 1241 - オペランドは 1 つのカラムを含む必要があります。
-
解決策:java.sql.SQLException: ユーザー ''@'localhost'' (パスワード: YES を使用) のアクセスが拒否されました。
-
[解決済み] あるテーブルから、別のテーブルに存在しないすべてのレコードを選択するにはどうすればよいですか?
-
[解決済み] INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOINの違いは何ですか?[重複しています]。
-
[解決済み] Oracleの全テーブルのリストを取得しますか?
-
[解決済み] ある列の最大値を持つ行を取得する
-
[解決済み] NOT IN vs NOT EXISTS
-
[解決済み] SQL Server 2008を使用してIDENTITY_INSERTをオン/オフする方法は?
-
[解決済み] "ON UPDATE CASCADE "を使用する場合について
-
[解決済み] SQLサーバーで行を列に効率的に変換する