MySQLシリーズ マルチテーブル結合クエリ92および99構文例詳細チュートリアル

MySQLシリーズ マルチテーブル結合クエリ92および99構文例詳細チュートリアル

この 2 日間、私はトピックの趣向を変えて、パイチャートの原理といくつかのグラフィックス制作について皆さんに教えました。今日は引き続きMySQLの学習シリーズに戻り、皆さんと一緒にMySQLデータベースの学習を続けていきます。

マルチテーブルクエリは、データアナリストが日常業務で必ず使用する知識ポイントであり、その重要性がわかります。今日の記事では、MySQL のマルチテーブルクエリのいくつかの状況を包括的にまとめています。MySQL の 92 構文と 99 構文をご存知ですか?等価結合と非等価結合についてご存知ですか?特定の知識ポイントはほとんど使われないから、それを知る必要はないと考えないでください。実際、そうではありません。少なくとも、他の人がそれについて書いた後であれば、それが何を意味するのかはわかるはずです。

1. デカルト積現象

ここに画像の説明を挿入

結果は次のとおりです。

ここに画像の説明を挿入

分析は次のとおりです。
上記の結果は明らかに間違っています。左の表の人物にはそれぞれ 4 人のボーイフレンドがいます。これらの 4 つのレコードをよく見ると、左の表の各レコードと右の表の各レコードを一致させた結果であることがわかります。
デカルト積現象の原因: 2 つのテーブル間に有効な接続条件がありません。結合条件がないので、このテーブルの最初の行は、他のテーブルのすべての行と確実に 1 対 1 で一致させることができます。同様に、このテーブルの 2 番目の行は、他のテーブルのすべての行と確実に 1 対 1 で一致させることができます。同様に、このテーブルの最後の行 m も、他のテーブルのすべての行と 1 対 1 で一致させることができます。他のテーブルに n 行ある場合、最後に表示される行数は m*n 行になります。
デカルト積現象を発生させたくない場合は、有効なテーブル結合条件を追加する必要があります。上記の例では、左側のテーブルのboyfriend_idは、右側のidと等しい場合にのみボーイフレンドを表します。

テーブル結合条件を追加した後:

ここに画像の説明を挿入

デカルト積によって最終的に生成されるレコード数は、2 つのテーブルのデータの積であることがわかります。結合クエリを使用しない場合、2 つのテーブルのデータが特に大きいと、メモリが爆発してひどい状態になるため、結合クエリの使用方法を学ぶ必要があります。

2. 接続クエリの知識ポイントのまとめ

1) 結合クエリとは何ですか?

実際の開発では、ほとんどの場合、単一のテーブルからデータを照会するのではなく、複数のテーブルをまとめて照会して最終結果を取得します。つまり、実際のビジネスでは、ビジネスも複数のテーブルで構成されており、異なるテーブルには異なる情報が格納されています。取得したい情報が複数のテーブルから取得される場合は、結合クエリを使用する必要があります。

2) 接続クエリの分類

①時代による分類

MySQL は完全結合をサポートしていないため、完全結合機能を完了するには通常、union キーワードが使用されます。 MySQL のクロス結合はクロス結合であり、めったに使用されないので、気にする必要はありません。

sq192 標準: 内部結合のみサポートされます。 sq199 標準 [推奨]: 内部結合 + 外部結合 (左外部結合と右外部結合のみ) + クロス結合のみがサポートされます。 ② 機能別に分類された内部結合: 等価結合、非等価結合、自己結合。外部結合: 左外部結合、右外部結合、完全外部結合。

3. 内部接続の説明

元データは以下のとおりです。

ここに画像の説明を挿入

1) 等接続:接続条件が対等な関係であることが最大の特徴です。

演習: 従業員名と対応する部門名を照会します。

sql92 の構文は次のとおりです: (古すぎるため、一般的には使用されません。見たときに意味を理解するだけです。)

ここに画像の説明を挿入

sql99 構文: (よく使用される)

ここに画像の説明を挿入

2) sql92 構文と sql99 構文の違い。

 -- sql92 構文 select ename,dname
 emp、deptから
 ここで、emp.deptno=dept.deptno;
 
-- sql99 構文 select ename,dname
emp(内部)から部門に参加
emp.deptno=dept.deptno の場合;

-- sql92 構文と sql99 構文の違い 1) カンマ (",") は (内部) 結合に置き換えられます。
2) 「where」を「on」に置き換えます。
注: inner は省略できます。inner を記述すると、コードの可読性が向上します。

--sql99 構文の利点は、テーブル接続とその後の where 条件スクリーニングが分離されていることです。
sql92 構文では、where はテーブル結合に使用され、where は where フィルタリングにも使用されますが、これらが混同され、不明瞭になっています。

3) 非等価接続:接続条件が非等価関係であることが最大の特徴です。

ここに画像の説明を挿入

演習: 各従業員の給与等級を調べ、従業員名、給与、給与等級を表示します。

ここに画像の説明を挿入

4) 自己結合:最大の特徴は、1 つのテーブルが 2 つのテーブルとして扱われることです。

1 つのテーブルを 2 つのテーブルとして扱うとはどういう意味ですか?つまり、自己結合は同じテーブル間の結合であり、結合条件はこのテーブル内の異なるフィールドです。

人間と機械の最大の違いは、人間には判断力があるということです。人間はテーブルのさまざまなフィールドを区別して使用する方法を知っていますが、機械は知りません。それらはすべて同じテーブルであり、フィールド名もすべて同じです。では、機械はどのようにして(同じテーブルに対して)どのテーブルがどのテーブルであるかを区別できるのでしょうか。

これにはエイリアスが必要です。同じテーブルに、機械が簡単に区別できるように、1 つを A、もう 1 つを B という 2 つの名前を付けます。テーブル A からフィールドを取得する場合は「A. フィールド」、テーブル B からフィールドを取得する場合は「B. フィールド」になります。

演習: 各従業員の上司を調べ、従業員名と対応する上司名を表示します。

ここに画像の説明を挿入

4. 外部接続の説明

元データは以下のとおりです。

ここに画像の説明を挿入

1) 外部結合とは何ですか? 内部結合とどう違うのですか?

① 内部結合

テーブル A と B が接続され、内部結合が使用されていると仮定すると、テーブル A と B に一致するすべてのレコードが照会されます。これが内部結合です。メイン テーブル AB とセカンダリ テーブル AB の間には区別はなく、2 つのテーブルは同じです。

② 外部接続

テーブル A とテーブル B が外部結合を使用して接続されており、2 つのテーブル AB のうちの 1 つがプライマリ テーブルで、もう 1 つがセカンダリ テーブルであるとします。プライマリ テーブルのデータが主にクエリされ、セカンダリ テーブルは付随的にクエリされます。セカンダリ テーブルのデータとプライマリ テーブルのデータとが一致しない場合、セカンダリ テーブルは自動的に NULL をシミュレートして一致させます。

外部結合の最も重要な機能は、メイン テーブル内のすべてのデータを無条件にクエリできることです。

2) 外部結合の分類

左結合を右結合として記述する方法があり、対応する右結合を左結合として記述する方法があります。したがって、MySQL を学習する過程で、左結合と右結合の両方を学習する必要はありません。

左外部結合 (左結合): 左側のテーブルがメイン テーブルであることを示します。右外部結合 (右結合): 右側のテーブルがメイン テーブルであることを示します。 3) 事例分析

ここに画像の説明を挿入

演習: どの部門に従業員がいないのか調べてください。

ここに画像の説明を挿入

上記は、MySQLシリーズのマルチテーブル結合クエリ92および99構文例の詳細チュートリアルの詳細内容です。MySQLクエリ構文の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL でよく使用されるデータベースとテーブル シャーディング ソリューションの概要
  • MySQLパーティションテーブルは月別に分類されています
  • MySQLはデータテーブル内の既存のテーブルを分割します
  • MySQL テーブル分割後にスムーズにオンラインになる方法
  • MySQL内部一時テーブルの具体的な使用法
  • MySQLが内部一時テーブルを使用するタイミングについて簡単に説明します。
  • Python で MySQL テーブル情報を収集して集計する詳細な例
  • MYSQLテーブルの包括的な概要

<<:  ページコンテンツ全体を中央に配置して、高さがコンテンツに合わせて自動的に拡張されるようにする方法

>>:  JSはclip-pathを使用して動的領域クリッピング機能を実装します

推薦する

JavaScript における var、let、const の違いの詳細な説明

目次グローバル変数として可変ホイスト一時的なデッドゾーンブロックスコープ重複したステートメント宣言さ...

CentOS 7 での mysql 5.7 のインストール チュートリアル

1. 公式MySQL Yumリポジトリをダウンロードしてインストールする 実行ファイル: mysql...

Nginx コンテンツ キャッシュと共通パラメータ設定の詳細

使用シナリオ:プロジェクトのページでは、頻繁に変更されず、個別のカスタマイズも伴わない大量のデータを...

jQuery+h5 で 9 マス抽選特殊効果を実現 (フロントエンドとバックエンドのコード)

序文:フロントエンド: jq+h5 で 9 グリッドのダイナミック効果を実現バックエンド: thin...

HTMLページでチェックボックスを操作する方法

チェックボックスは Web ページで非常によく使用されます。e コマースの Web サイトでもプラッ...

MySQL 5.7.18 Green Edition のダウンロードとインストールのチュートリアル

この記事では、MySQL 5.7.18のグリーンバージョンをダウンロードしてインストールする詳細な手...

Centos に MYSQL8.X をインストールするチュートリアル

MySQLのインストール(4、5、6は省略可能)ステートメント: CentOS のバージョンは 7....

CSS3 で実装された価格表

結果: 実装コードhtml <div id="価格表" class=&qu...

MySQL SHOW STATUSステートメントの使用

MySQL のパフォーマンス調整とサービス ステータスの監視を行うには、MySQL の現在の実行状態...

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

MySQL UTF-8 エンコーディングMySQL は 2003 年のバージョン 4.1 から U...

Linux サーバーが処理できる接続数をご存知ですか?

序文まず、TCP 接続を識別する方法を見てみましょう。システムは、(src_ip、src_port、...

重複リクエストを削除するAxiosのソリューションについての簡単な説明

目次1. 重複したリクエストをキャンセルする2. すべてのリクエストをクリーンアップするこのソリュー...

音声キューイングシステムを実装するためのJavaScript

目次導入主な特徴エフェクト表示キーコード導入音声キューイングシステムは、銀行、レストラン、病院などの...

CSS でフローティングにより親要素の高さが崩れる問題を解決するいくつかの方法

以前は、フロートはレイアウトによく使用されていましたが、フローティングレイアウトを使用すると親要素の...