MySQL の union と union all の簡単な分析

MySQL の union と union all の簡単な分析

データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セットを 1 つにマージしますが、使用方法と効率の点で 2 つは異なります。

MySQL の UNION

UNION はテーブルをリンクした後に重複レコードを除外します。そのため、テーブルがリンクされた後、結果セットがソートされ、重複レコードが削除されてから結果が返されます。実際には、ほとんどのアプリケーションでは重複レコードは生成されません。最も一般的なのは、プロセス テーブルと履歴テーブルの UNION です。のように:

gc_dfys から * を選択 ls_jg_dfy​​s から * を選択

この SQL を実行すると、まず 2 つのテーブルの結果が取得され、次にソート スペースを使用して重複レコードがソートおよび削除され、最後に結果セットが返されます。テーブル内のデータ量が多い場合は、ディスク ソートが行われる場合があります。

MySQL の UNION ALL

UNION ALL は、2 つの結果を単純に結合して返します。この方法では、返された 2 つの結果セットに重複データがある場合、返された結果セットには重複データが含まれます。

効率の面では、UNION ALL は UNION よりもはるかに高速なので、2 つのマージされた結果セットに重複データが含まれていないことを確認できる場合は、次のように UNION ALL を使用します。

gc_dfys から * を選択 すべて ls_jg_dfy​​s から * を選択

UNION を使用すると、結果セット全体に DISTINCT を使用した場合と同様に、返されるすべての行が一意になります。

Union all を使用すると、重複を削除せずにすべての行が返されます。

ORDER BY 句または LIMIT 句を使用して UNION 結果全体を並べ替えたり制限したりする場合は、個々の SELECT ステートメントを括弧で囲み、最後のステートメントの後に ORDER BY 句または LIMIT 句を配置する必要があります。

(a=10 かつ B=1 の場合、tbl_name から a を選択) 
連合
(a=11 かつ B=2 の場合、tbl_name から a を選択)
制限10で注文します。

これを行うのは少し面倒です:

(からユーザーIDを選択
testa からユーザー ID を選択 union all testb からユーザー ID を選択 t 
ユーザーID制限0,1で並べ替え。

それでもグループ化して条件を設定する場合は、次のようにします。

select userid from (select userid from testa union all select userid from testb) t group by userid having count(userid) = 2;

注意: ユニオン括弧の後にエイリアスが必要です。そうでない場合はエラーが報告されます。

もちろん、複数の結合テーブルのデータ量が大きい場合は、まずテキストをエクスポートしてからスクリプトで実行することをお勧めします。

純粋な SQL が使用されるため、効率は比較的低く、一時ファイルが書き込まれます。ディスク容量が十分でない場合は、エラーが発生する可能性があります。

ファイル '/tmp/MYLsivgK' の書き込みエラー (エラーコード: 28)

要約する

以上が MySQL の union と union のすべてについての紹介です。お役に立てれば幸いです。ご質問があれば、メッセージを残してください。すぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLのunion allとunionの違いを簡単に理解する
  • MySQL における UNION と UNION ALL の基本的な使い方
  • MySQLにおけるUNIONの使い方の詳細な説明
  • union (all) と limit および exists キーワードの使用法を理解するための MySQL シリーズチュートリアル

<<:  CocosCreator で物理エンジン ジョイントを使用する方法

>>:  Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

推薦する

Docker の Windows ストレージ パス設定操作

Windows 10 に Docker をインストールする場合、コンテナタイプを Linux コンテ...

CSS 複合セレクタの具体的な使用法

交差点セレクター交差セレクターは、直接接続された 2 つのセレクターで構成されます。最初のセレクター...

CSSは半透明の境界と複数の境界のシーン分析を実現します

シナリオ 1:半透明の境界線を実現するには: CSS スタイルのデフォルトの動作により、背景色はコン...

ページ リファクタリング スキル - Javascript、CSS

JS、CSSについてCS: ...上部のスタイルシートCSS式を避ける外部JS、CSSの使用JSと...

CSS3 で作成した本のページめくり効果

結果:実装コード: html <!-- よろしければハートを付けてください! --> &...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

MySQLクエリのパフォーマンスを分析する方法

目次スロークエリの基礎: データ取得の最適化データベースから不要なデータが要求されていないか確認する...

TypeScript の基本型の紹介

目次1. 基本タイプ2. オブジェクトタイプ2.1 配列2.2 タプル2.3 オブジェクト3. 型推...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

クロスブラウザ開発体験のまとめ(I)HTMLタグ

ページにDOCTYPEを追加するブラウザによってタグやスタイルシートの解釈が異なるため、さまざまなブ...

Dockerで新しいイメージを手動で構築する方法

この記事では、Docker で新しいイメージを手動で構築する方法を紹介し、皆さんと共有します。詳細は...

nginx は画像表示の遅さとダウンロードの不完全さの問題を解決します

前面に書かれた最近、ある読者から、ブラウザからサーバーにアクセスすると、画像の表示が遅く、ブラウザに...

HTML の blockquote タグの使用と美化

ブロック引用の定義と使用法<blockquote> タグは引用ブロックを定義します。 &...

Linux と最もよく使用されるコマンドの紹介 (習得は簡単ですが、問題の 95% 以上を解決できます)

Linux は現在最も広く使用されているサーバー オペレーティング システムです。Unix をベー...

Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

1. 事件の背景:仕事上、Ubuntu への vscode リモート接続を使用する必要があります。 ...