MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要

MySQL におけるさまざまな一般的な結合テーブルクエリの例の概要

この記事では、例を使用して、MySQL のさまざまな一般的な結合テーブルクエリについて説明します。ご参考までに、詳細は以下の通りです。

通常、目的の結果を得るには、複数のテーブルを接続してデータをクエリする必要があります。

1. 接続は次の 3 つのカテゴリに分類できます。

(1)内部結合:結合、内部結合

(2)外部結合:左結合、左外部結合、右結合、右外部結合、結合、すべて結合

(3)クロスジョイン

2. デモンストレーション用のテーブルを準備します。

テーブル `a` を作成します (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `a_name` varchar(32) DEFAULT '' COMMENT 'テーブル名',
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8mb4;

テーブル `b` を作成します (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `a_id` int(11) デフォルト '0' コメント 'テーブルID',
 `b_name` varchar(32) DEFAULT '' COMMENT 'b テーブル名',
 主キー (`id`)
)ENGINE=InnoDB デフォルト文字セット=utf8mb4;

表 a と表 b のデータは図に示されています。

3. 内部結合または結合

a.id = b.a_id で内部結合 b から * を選択します。
a から * を選択し、b を a.id = b.a_id で結合します。
a.id = b.a_id となる a, b から * を選択します。

結果は次のとおりです。

内部結合は、特定の条件を同時に満たす 2 つのテーブル内のデータ レコードの組み合わせとして理解できます。つまり、条件 a.id = b.a_id を満たすテーブル A とテーブル B 内のすべてのレコードです。

テーブル A のレコードがテーブル B の複数のレコードに対応する場合、テーブル B の複数のレコードが結果セットに繰り返し表示されます。

テーブル B のレコードがテーブル A の複数のレコードに対応する場合、テーブル A の複数のレコードが結果セットに繰り返し表示されます。

4. 外部結合の左結合または右結合

(1)左外部結合

a の左から * を選択し、b を a.id = b.a_id で結合します。
a.id = b.a_id の左外部結合 b から * を選択します。

左外部結合では、左側のテーブル A をプライマリ テーブルとして使用し、右側のテーブル B に一致する行がない場合でもすべての行を返します。

左側のテーブル A が右側のテーブル B でレコードを見つけられない場合、テーブル A のすべてのレコードが返され、テーブル B の対応するフィールドは null に設定されます。

左側のテーブル A が右側のテーブル B で複数のレコードを見つけた場合、同じテーブル A レコードと異なるテーブル B レコードを持つ複数のレコードが結果セットに表示されます。

この場合、条件を満たさないレコードも含め、テーブル A のすべてのレコードが実際に照会されます。

表 A で条件を満たすデータ、または条件を満たさないデータのみを調べたい場合は、どのように確認すればよいでしょうか。

a から * を選択し、左から b を a.id = b.a_id で結合します (b.a_id は null ではありません)。
a.id = b.a_id で b.a_id が null でない場合に、左外部結合 b から * を選択します。

上記のステートメントは、条件を満たすテーブル A のデータを照会します。

a から * を選択し、左から b を a.id = b.a_id で結合します (b.a_id は null)。
a.id = b.a_id で b.a_id が null の場合、左外部結合 b から * を選択します。

上記のステートメントは、条件を満たさないテーブル A のデータを照会します。

(2)右外部結合

a から * を選択し、b を a.id = b.a_id で右結合します。
a.id = b.a_id の右外部結合 b から * を選択します。

右外部結合は、実際には左外部結合と同じです。違いは、プライマリ テーブルの決定にあります。この 2 つは相互に変換できます。

右外部結合の説明は基本的に左外部結合と同じなので、ここでは詳しく説明しません。

(3)完全結合

MySQL は完全結合をサポートしていませんが、代わりに左結合、和集合、右結合という対応する代替手段があります。

a の左から * を選択し、b を a.id = b.a_id で結合します。
連合
a から * を選択し、b を a.id = b.a_id で右結合します。

完全結合では、テーブル A とテーブル B の両方からすべての行が返されます。テーブル A の行がテーブル B に一致しない場合、またはテーブル B の行がテーブル A に一致しない場合は、これらの行が表示され、存在しないフィールドには null が追加されます。

Union は重複する行を結合します。

この場合、表 A と表 B の条件を満たすレコードと条件を満たさないレコードの両方が表示されます。

条件を満たさないすべてのレコードのみを表示する場合は、次のステートメントを使用します。

a から * を選択し、a.id = b.a_id で b を結合します。ただし、b.a_id は null です。
連合
a.id が null の場合、a.id = b.a_id で b を右から選択して * します。

条件を満たすすべてのレコードのみを表示する場合は、次のステートメントを使用します。

a から * を選択し、a.id = b.a_id で b を結合します。ただし、b.a_id は null ではありません。
連合
a.id が null でない場合に、a.id = b.a_id で a から右結合 b を選択して * を実行します。

5. クロスコネクト

クロス結合は、実際にはテーブル A とテーブル B の直積です。

クロス結合bから*を選択します。
a、b から * を選択します。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL 共通関数の概要」、「MySQL ログ操作スキル」、「MySQL トランザクション操作スキルの概要」、「MySQL ストアド プロシージャ スキル」、および「MySQL データベース ロック関連スキルの概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

以下もご興味があるかもしれません:
  • 7つのMySQL JOINタイプのまとめ
  • MYSQL データベースの基礎 - 結合操作の原理
  • MySQL 結合バッファの原理
  • mysql-joinsの具体的な使用方法
  • MySQL 結合クエリ構文と例
  • MySQLの7つのJOINの具体的な使い方

<<:  Windows 10にWSL2 Ubuntu20.04をインストールしてdocker環境を構築する方法

>>:  Vue のミックスインの使用方法の詳細な説明

推薦する

WeChatアプレットがシンプルな計算機機能を実装

WeChatアプレット:シンプルな計算機、参考までに、具体的な内容は次のとおりです。ミニプログラムに...

MySQL 最適化 Zabbix パーティション最適化

zabbix を利用する上での最大のボトルネックはデータベースです。zabbix のデータストレージ...

TypeScript 列挙の基本と例

目次序文TypeScript の列挙型とは何ですか? TypeScriptで列挙型を使用する際に注意...

Linux での fuser コマンドの使用法の詳細な説明

説明する: fuser は、現在ディスク上のファイル、マウント ポイント、さらにはネットワーク ポー...

SpringBoot プロジェクトの Docker 環境を実行するときに発生する無限再起動問題の詳細な説明

もしかしたら私の考え方が間違っていたのかもしれないし、問題の説明が少し乱雑だったのかもしれないが、こ...

JavaScript におけるイベント委譲メカニズムと深いコピーと浅いコピーの簡単な分析

目次1. イベントの委任イベントバブリングイベントキャプチャイベントの泡立ちの昇華考える2. 深いコ...

Linux でコマンドまたはプロセスの実行時間を調べる方法

Unix ライクなシステムでは、コマンドまたはプロセスの実行がいつ開始されたか、またプロセスがどのく...

Vue.jsはElement-uiを使用してナビゲーションメニューを実装します

この記事では、Element-uiを使用してvue.jsでナビゲーションメニューを実装するための具体...

vue-element-admin プロジェクトのインポートとエクスポートの実装

vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...

CentOS 7 環境でソースコードから MySQL 5.7 をインストールする方法

この記事では、CentOS 7 環境でソース コードから MySQL 5.7 をインストールする方法...

HTML と CSS の基礎 (必読)

(1) HTML: ハイパーテキストマークアップ言語。主に「ヘッダー」と「ボディ」の2つの部分で構...

JS 4つの楽しいハッカー背景効果コードを共有する

目次例1例2例3例4例1 <html> <ヘッド> <title>...

MySQL 5.6 のインストール手順(画像とテキスト付き)

MySQL はオープンソースの小規模リレーショナル データベース管理システムです。現在、MySQL...

MySQL共通インデックスとユニークインデックスの選択に関する詳細な分析

各人が固有の携帯電話番号で登録し、ビジネス コードによって重複する携帯電話番号が 2 つ書き込まれな...

mysql8.0 でユーザーを作成して権限を付与する際のエラーの解決方法の詳細な説明

質問1:エラーを報告する書き込み方法: GRANT OPTION を使用して、'123123...