データベースでは、UNION キーワードと UNION ALL キーワードの両方が 2 つの結果セットを 1 つにマージしますが、使用方法と効率の点で 2 つは異なります。 MySQL の UNION UNION はテーブルをリンクした後に重複レコードを除外します。そのため、テーブルがリンクされた後、結果セットがソートされ、重複レコードが削除されてから結果が返されます。実際には、ほとんどのアプリケーションでは重複レコードは生成されません。最も一般的なのは、プロセス テーブルと履歴テーブルの UNION です。のように: gc_dfys から * を選択 ls_jg_dfys から * を選択 この SQL を実行すると、まず 2 つのテーブルの結果が取得され、次にソート スペースを使用して重複レコードがソートおよび削除され、最後に結果セットが返されます。テーブル内のデータ量が多い場合は、ディスク ソートが行われる場合があります。 MySQL の UNION ALL UNION ALL は、2 つの結果を単純に結合して返します。この方法では、返された 2 つの結果セットに重複データがある場合、返された結果セットには重複データが含まれます。 効率の面では、UNION ALL は UNION よりもはるかに高速なので、2 つのマージされた結果セットに重複データが含まれていないことを確認できる場合は、次のように UNION ALL を使用します。 gc_dfys から * を選択 すべて ls_jg_dfys から * を選択 UNION を使用すると、結果セット全体に DISTINCT を使用した場合と同様に、返されるすべての行は一意になります。複数テーブルのクエリ結果にまったく同じデータがある場合、MySQL は重複を自動的に削除します。 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で並べ替え。 条項の中で。 order by は limit と一緒に使用した場合にのみ意味を持ちます。一緒に使用しない場合は、最適化中にパーサーによって削除されます。 それでもグループ化して条件を設定する場合は、次のようにします。 select userid from (select userid from testa union all select userid from testb) t group by userid having count(userid) = 2; 注意: ユニオン括弧の後にエイリアスが必要です。そうでない場合はエラーが報告されます。 もちろん、複数の結合テーブルのデータ量が大きい場合は、まずテキストをエクスポートしてからスクリプトで実行することをお勧めします。 純粋な SQL が使用されるため、効率は比較的低く、一時ファイルが書き込まれます。ディスク容量が十分でない場合は、エラーが発生する可能性があります。
例: 存在する場合はテーブルを削除します `ta`; テーブル `ta` を作成します ( `id` varchar(255) デフォルト NULL, `num` int(11) デフォルト NULL )ENGINE=InnoDB デフォルト文字セット=utf8; -- ---------------------------- -- 彼の記録 -- ---------------------------- `ta` VALUES ('a', '5') に INSERT します。 `ta` VALUES ('b', '10') に INSERT します。 `ta` VALUES ('c', '15') に INSERT します。 `ta` VALUES ('d', '10') に INSERT します。 -- ---------------------------- -- `tb` のテーブル構造 -- ---------------------------- `tb` が存在する場合はテーブルを削除します。 テーブル `tb` を作成します ( `id` varchar(255) デフォルト NULL, `num` int(11) デフォルト NULL )ENGINE=InnoDB デフォルト文字セット=utf8; -- ---------------------------- -- 結核の記録 -- ---------------------------- `tb` VALUES ('b', '5') に挿入します。 `tb` VALUES ('c', '15') に挿入します。 `tb` VALUES ('d', '20') に挿入します。 `tb` VALUES ('e', '99') に挿入します。 このとき、ta tbに対応するcフィールドのnumは同じである SQL: 構文: SELECT id,SUM(num) FROM ( taから*を選択 ユニオンオール SELECT * FROM tb) を tmp として GROUP BY ID による 実行結果: のように: SELECT id,SUM(num) FROM ( taから*を選択 連合 SELECT * FROM tb) を tmp として GROUP BY ID による 実行結果: UNION を使用すると、結果セット全体に DISTINCT を使用した場合と同様に、返されるすべての行は一意になります。複数テーブルのクエリ結果にまったく同じデータがある場合、MySQL は重複を自動的に削除します。 Union all を使用すると、重複を削除せずにすべての行が返されます。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: Vue コンポーネント (Vuex を含む) 間の値の転送に関する簡単な説明
>>: Ubuntu 18.04 に Anaconda3 をインストールするための詳細なチュートリアル
注意事項1. まず、mysql インストール ディレクトリに次の内容の my.ini ファイルを作成...
CSS3 の 3D 効果を使用して立方体を作成する方法を学ぶと、3D シーンの回転と変位のプロパティ...
目次forループwhileループdo-while ループループのネストトラバーサルメソッド~のために...
1. 環境整備:オペレーティング システム: CentOS Linux リリース 7.5.1804 ...
既存のビデオ プレーヤーがニーズを満たせない場合は、ビデオを自分でカプセル化する必要があります。ビデ...
今日は、ext3 や他の以前のファイル システムとの違いを含め、ext4 の歴史について説明します。...
0 アイコンと画像の違いアイコンは文字であり、画像はバイナリ ストリームです。つまり、画像はアイコン...
JSはショッピングカート内の商品の合計金額を計算して参考とします。具体的な内容は以下のとおりです。質...
この記事の例では、WeChatアプレットマップで使用される具体的な実装コードを参考までに共有していま...
MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...
MySQLグループソートで上位Nを見つけるテーブル構造grp でグループ化し、num で並べ替えて、...
目次序文プレビュー文章グラフィックコンポーネントプロパティ機能グリッドを描く軸角度を計算するスケール...
目次スロークエリの基礎: データ取得の最適化データベースから不要なデータが要求されていないか確認する...
目次1. 概要1.1 プロトタイプとは何ですか? 1.2 プロトタイプを入手する2. プロトタイプの...
準備するこの記事の環境情報: ソフトウェアバージョンセントOSセントOS7.4マイグレーション8.0...