1. 使用法:(1)EXISTSの使用 ucsc_project_batch a から、存在する場合は a.batchName、a.projectId を選択します (ucsc_project b から、a.projectId = b.id の場合は b.id を選択します) 上記の SQL は、ucsc_project_batch をメイン テーブルとして使用し、batchName フィールドと projectId フィールドをクエリすることを意味します。ここで、projectId フィールドは ucsc_project テーブルに存在します。 EXISTS は、外部テーブル ucsc_project_batch に対してループ クエリ マッチを実行します。内部テーブル サブクエリの戻り値が何であるかは考慮されず、戻り値があるかどうかのみが考慮されます。戻り値がある場合、条件は true であり、データが正常に一致し、クエリ結果セットに追加されます。戻り値がない場合、条件は false であり、データは破棄されます。 たとえば、最初のクエリのクエリ戻りフィールドを変更しても、外部クエリのクエリ結果には影響しません。 ucsc_project_batch a から、存在する場合は a.batchName、a.projectId を選択します (ucsc_project b から、a.projectId = b.id の場合は b.companyId、b.name を選択します) (2)INの使用法 ucsc_project_batch a から a.batchName、a.projectId を選択します。ここで、a.projectId は (ucsc_project b から b.id を選択) です。 上記SQLのクエリ結果は先ほどのEXISTSの結果と同じであり、クエリの意味も同じです。 2. 注意:(1) EXISTS を書くときは、サブクエリ内の条件文が通常、外部クエリのテーブルに関連付けられている必要があることに注意する必要があります。そうしないと、サブクエリの条件が常に真になるか、常に偽になる可能性があります。外部クエリ テーブルが循環的に一致すると、すべての結果が見つかるか、まったく見つからないかのどちらかになります。 ucsc_project_batch a から a.batchName、a.projectId を選択します (存在する場合) (ucsc_project b から b.id を選択します) 例えば、上記の書き方では、ucsc_project テーブルに値があるため、サブクエリの条件は常に真となります。ucsc_project_batch の各データをループで照合すると、正常に照合され、クエリ結果は ucsc_project_batch テーブル全体のデータになります。 ucsc_project_batch a から、存在する a.batchName、a.projectId を選択します (ucsc_project b から、b.id が null である b.id を選択します) この方法では、サブクエリは確実に結果を見つけられないため、サブクエリの条件は false となり、外部クエリ内の各データは一致せず、クエリ結果全体が空になります。 (2)MySQLのIN文のパラメータ数には制限はありませんが、MySQLのSQL文には長さ制限があり、文全体の最大長は4Mです。 (3) EXISTSサブクエリステートメントは、クエリの対象を気にせず、結果セットがあるかどうかだけを気にします。結果セットがある場合は、サブクエリ全体が真の条件を持つステートメントと見なすことができます。そうでない場合は、偽の条件を持つステートメントです。 (4) IN文はサブクエリに対して1つのフィールドのみを返すことができ、それ以外の場合はエラーが報告されます。
3. シーン選択外部クエリ テーブルが大きく、サブクエリ テーブルが小さい場合は、IN を選択します。外部クエリ テーブルが小さく、サブクエリ テーブルが大きい場合は、EXISTS を選択します。2 つのテーブルのサイズが同じであれば、それらは類似しています。 (1) IN内のSQLクエリは一度だけ実行され、結果セットは一時ファイルに保存され、その後、外部クエリSQLと照合されます。外部クエリとサブクエリの両方でインデックスを使用できます。 ucsc_project_batch a から a.batchName、a.projectId を選択します。ここで、a.projectId は (ucsc_project b から b.id を選択) です。 は以下と同等です: $結果 = []; $ucsc_project_batch = "ucsc_project_batch a から a.batchName、a.projectId を選択します"; $ucsc_project = "ucsc_project bからb.idを選択"; ($i = 0;$i < $ucsc_project_batch .length;$i++){ ($j = 0;$j < $ucsc_project.length;$j++){ $ucsc_project_batch[$i].projectId== $ucsc_project[$j].id)の場合{ $result[] = $ucsc_project_batch[$i]; 壊す; } } } (2)EXISTSは、外部クエリテーブルucsc_project_batchに対してループマッチを実行し、ucsc_project_batch.length回実行します。サブクエリはインデックスを使用でき、外部クエリはテーブル全体をスキャンします。 ucsc_project_batch a から、存在する場合は a.batchName、a.projectId を選択します (ucsc_project b から、a.projectId = b.id の場合は b.id を選択します) は以下と同等です: $結果 = []; $ucsc_project_batch = "ucsc_project_batch a から a.batchName、a.projectId を選択します "; ($i = 0; $i < $ucsc_project_batch . length; $i++) の場合 { if (exists($ucsc_project_batch [$i] . projectId)){// 実行 select b.id from ucsc_project b where a.projectId=b.id $result[] = $ucsc_project_batch[$i]; } } 2 つの疑似コードを分析すると、サブクエリ テーブルが大きい場合は、EXISTS を使用するとループの総数を効果的に減らして速度を向上でき、外部クエリ テーブルが大きい場合は、IN を使用すると外部クエリ テーブルのループ トラバーサルを効果的に減らして速度を向上できることがわかります。 要約するMySQL における EXISTS と IN の使用法の比較に関するこの記事はこれで終わりです。MySQL の EXISTS と IN の比較に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: jQueryはキャンバスタグを使用して検証コードを描画します
npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...
序文MySQL 8.0 の最新バージョンは 8.0.4 rc であり、正式版は近日中にリリースされる...
目次1. axiosをインストールする2. アクシオスの使用1.ホームページでaxiosを参照する2...
<br />以前、「コンテンツページ番号のプレビューナビゲーション」と「写真プレビューナ...
並行処理関数 i の `grep server /etc/hosts | awk '{pri...
0. 新しい操作: mkdir abc #新しいフォルダを作成 touch abc.sh #新しいフ...
私はコーディングが大好きです。コーディングすると幸せになります!みなさんこんにちは、Counterで...
以下のように表示されます。昨日: UNIX_TIMESTAMP(CAST(SYSDATE() AS ...
目次序文InnoDB ストレージ アーキテクチャInnodb テーブルスペースインドストレージディス...
このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...
序文私自身の個人ブログを入力しているときに、ブログの詳細ページでさまざまなコンテンツをコピーするさま...
1. 概要Docker のイメージはレイヤーで設計されています。各レイヤーは「レイヤー」と呼ばれます...
序文:前の記事を読んだ後、binlog はデータベースで実行されたすべての DDL および DML ...
データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...
方法1: SET PASSWORDコマンドを使用する MySQL -u ルート mysql> ...