MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL の一般的なシナリオ: 2 つのデータ セットの交差と差を取得する

ステップ

1. 2つのコレクションの構造は、フィールド数とフィールドタイプが一致していなければなりません。

2. UNION ALL キーワードを使用して 2 つのセットを結合します。結果は重複するすべてのセットになります。

3. 上記のすべてのセットをIDでグループ化する

4. 最後に、HAVING COUNT(id)=1 です。これが 1 に等しい場合、それは 1 回だけ出現することを意味するため、これは差異集合です。これが 2 に等しい場合、これは交差集合です。

コードデモンストレーション

違い

次の SQL には明らかな問題がありますが、これは単なるヒントです。

テーブルからクエリを実行するために、交差と差を使用する必要はありません。条件を組み合わせて直接クエリを実行できます。意味を理解しておくと良いでしょう。

次のSQLは、すべての非技術系従業員のID、コード、名前を検索することを意味します。

a.* から(を選択します
    test_emp から id、コード、名前を選択します。
    ユニオンオール
    test_emp から id、コード、名前を選択します。dept='JSB' を指定します。
)a GROUP BY a.id HAVING COUNT(a.id)=1

交差点

次のSQLは、技術部門の25歳以上の従業員全員を検索することを意味します。

a.* から(を選択します
    test_emp から id、code、name を選択、年齢>25 の場合
    ユニオンオール
    test_emp から id、コード、名前を選択します。dept='JSB' を指定します。
)a GROUP BY a.id HAVING COUNT(a.id)=2

連合

次のSQLは、技術部門の従業員全員と30歳以上の従業員を検索することを意味します。

Unionは重複コンテンツを自動的に削除し、重複のない結果セットを取得できます。

a.* から(を選択します
    test_emp から id、code、name を選択、年齢>25 の場合
    連合
    test_emp から id、コード、名前を選択します。dept='JSB' を指定します。
)

MySQL での交差、結合、差、左結合、右結合

私は1か月間MySQLを学習してきました。この1か月間、必要に応じてデータテーブルに対していくつかの基本的な操作を実行しました。このプロセスでは、左結合、右結合、交差、差集合などを頻繁に使用しました。ここで、その基本的な操作をまとめます。

データソース:

表1:

ID 名前 性別 年齢

1 マイク1 男性 34
1 mike2 男性 23
1 mike3 女性 24
2 mike1 男性 46
2 mike2 男性 35
2 mike3 男性 42
2 マイク4 男性 62
3 mike1 女性 45
4 マイク5 男性 72
5 mike4 女性 23

表2:

id学校

1 北京大学

2 清華大学

3. ハーバード大学

7. マサチューセッツ工科大学

左結合:

等価条件に基づいてテーブルを結合します。この実験は、IDが同じ場合に左結合を実行することです

コード:

a.*、b.schoolを選択 
から 
(SELECT * FROM mike1.test001) から
左結合
(mike1.test003 から id、school を選択) b
オン a.id=b.id

結果は次のようになります。表1を基礎として表2を接続し、同じID番号を一致させます。

右結合:

テーブル 2 をルートとして、同じ ID を持つフィールドを介して右結合します。

コード:

a.*、b.schoolを選択 
から 
(SELECT * FROM mike1.test001) から
右のJOIN
(mike1.test003 から id、school を選択) b
オン a.id=b.id

結果:

結果に問題があると思いますか?

交差点:

同じ ID 番号を使用して、テーブル 1 とテーブル 2 に対して内部結合が実行され、同じ部分が取得され、異なる部分が省略されます。

コード:

a.*、b.schoolを選択 
から 
(SELECT * FROM mike1.test001) から
内部結合
(mike1.test003 から id、school を選択) b
オン a.id=b.id

結果:

違い:

差集合は頻繁に使われますが、これは数学で学んだ積集合、結合集合、和集合などの集合演算に似ています。

コード 1: 表 2 の表 1 と同じ部分を取得します。これは、上記の交差を取得する 2 番目の方法です。

a.id、a.name、a.sex、a.age、b.school を選択してください 
から 
(SELECT * FROM mike1.test001) から
左外部結合
(mike1.test003 から id、school を選択) b
オン a.id=b.id
b.id が null ではない場合

結果:

code2: テーブル 1 の ID とテーブル 2 の ID の差を取得し、最後にデータをリストします。

a.id、a.name、a.sex、a.age、b.school を選択してください 
から 
(SELECT * FROM mike1.test001) から
左外部結合
(mike1.test003 から id、school を選択) b
オン a.id=b.id
b.id が null の場合

結果:

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQLはマイナスと交差のテストレポートを実装します
  • MySQLクエリ結果の交差を実装する方法
  • Java8 の差集合、和集合、積集合の例

<<:  CSS floatプロパティの詳細な説明

>>:  Gogs+Jenkins+Docker による .NetCore ステップの自動デプロイ

推薦する

Linux ユーザー グループと権限の概要

ユーザーグループLinux では、すべてのユーザーはグループに属する必要があり、Linux には次の...

PHP+nginx サービス 500 502 エラーのトラブルシューティングのアイデアの詳細な説明

概要オンラインサービスへのアクセス中に 500 または 502 エラーが発生した場合、緊急処理とトラ...

MySQL 外部キー制約の詳細な説明

公式ドキュメント: https://dev.mysql.com/doc/refman/5.7/en/...

UbuntuにCMakeをインストールするいくつかの方法の詳細な説明

CMakeをインストール sudo apt をインストール cmake この方法はインストールが簡単...

VUE ユニアプリテンプレート構文についての簡単な説明

1.v-bind(略称:)コンポーネント プロパティのデータで定義されたデータ変数を使用するか、コン...

Dockerコンテナが外部ネットワークにpingできない問題を解決する

今日、docker で redis 環境を構築していたところ、yum がリソースを取得できず、インタ...

VMware を使用して PXE バッチ インストール サーバーをテストする詳細なプロセス

目次1. 準備1. 環境を整える2. インストール方法3. ネットワークカードの構成2. インストー...

Docker-compose を使用して ELK クラスターを構築する方法

すべてのオーケストレーション ファイルと構成ファイルは、私の Github からアクセスできます。構...

フロントエンドとバックエンド分離プロジェクトのDockerデプロイメントの実装例

目次1. 環境整備2. イメージを実行する問題を解決するRedis のインストールNginx のイン...

1 つの記事で JSON (JavaScript Object Notation) を理解する

目次JSONが登場JSON構造JSONオブジェクトJson オブジェクトと JavaScript オ...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

Unicode における CJK (中国語、日本語、韓国語の統合表意文字) 文字の概要

CJK は CJK Unified Ideographs の略称で、「中国語、日本語、韓国語の統一表...

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

MySQL Shellの紹介とインストール

目次01 レプリ​​カセットアーキテクチャ02 MySQL Shellの紹介とインストール03 My...

CSS ボックスを中央揃えするためのよく使われるいくつかの方法 (要約)

最初のもの: CSSの位置プロパティの使用 <スタイル タイプ="text/css&...