この記事では、例を使用して、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データベース設計に役立つことを願っています。 以下もご興味があるかもしれません:
|
<<: Windows 10にWSL2 Ubuntu20.04をインストールしてdocker環境を構築する方法
これは非常にシンプルな純粋な CSS3 の白い雲の浮遊する背景効果です。浮かぶ白い雲の特殊効果は、C...
この記事の例では、参考までに簡単な計算機を実装するためのjsの具体的なコードを共有しています。具体的...
問題を見つける最近、プログラムのストレージを Mongodb に移行したところ、Guid 型が書き込...
1. はじめに今日、同僚から、MySQL を使用して ElasticSearch に似た全文検索機能...
目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...
目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...
画像タグ: <img> ページに画像を挿入するには、「src」属性を持つ「img」タグを...
序文JavaScript を学習した人なら誰でも、さまざまな環境で this がどこを指すかという問...
この記事では、Jingdong虫眼鏡を模倣したJavaScriptの具体的なコードを参考までに共有し...
今日は、CSS を使用して左上の三角形を記述するいくつかの方法を紹介します。概略図(幅と高さを60p...
序文Excel は強力で、広く使用されています。 Web アプリケーションの登場と改善に伴い、ユーザ...
序文ビューは、データベース システム内で非常に便利なデータベース オブジェクトです。 MySQL 5...
目次環境仮想マシンバージョンMySQL バージョン事前準備MySQLの実行ステータスを確認するルート...
目次地図フィルターいくつかの毎インデックスを検索パイプ参考回答1. パラメータを受け入れる関数を返す...
導入MySQL はレプリケーションを通じてストレージ システムの高可用性を実現します。現在、MySQ...