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を使用して動的領域クリッピング機能を実装します

推薦する

Docker Alpine イメージのタイムゾーン問題に対する完璧な解決策

最近、Docker を使用して Java アプリケーションをデプロイしていたときに、タイムゾーンが間...

Echarts は 1 つのグラフ内で異なる X 軸を切り替える機能を実装します (サンプル コード)

レンダリング下の画像のような効果を実現したい場合は、読み続けてアニメーション画像に直接進んでください...

Dockerコンテナ間で通信する3つの方法

Docker コンテナは互いに分離されており、相互にアクセスできないことは誰もが知っていますが、依存...

IDEA 2020 で Tomcat サーバーを構成するための詳細な手順

IDEA 2020 で Tomcat を構成する手順は次のとおりです。最初のステップはTomcatを...

Linux crontab コマンドの使用

1. コマンドの紹介contab (cron テーブル) コマンドは、Windows のスケジュール...

nginx の場所に複数の Proxy_pass メソッドがある

1. まず、nginxの位置情報に関する関連知識を確認しましょう1) 位置マッチング手順: ~ #波...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

CSS3 グラデーション背景の互換性の問題

グラデーションの背景色を作成するときは、 linear-gradient() 関数を使用して線形グラ...

MySQL で MHA アーキテクチャのデプロイメントを構築する手順

目次マハ1. MAHアーキテクチャの概要2. 適用可能なシナリオ3. MHAの動作原理4. MHAの...

LinuxシステムでのSystemC環境設定方法

以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...

MySQL 8.0 の非表示列に対する基本操作

目次01 非表示の列を作成する02 非表示の列に対する基本操作03 非表示の列メタデータ04 主キー...

WindowsにOpenSSHをインストールし、SSHキーを生成してLinuxサーバーにログインします。

SSH の正式名称は Secure SHell です。 SSH を使用すると、送信されるすべてのデ...

さまざまな種類のMySQLインデックス

インデックスとは何ですか?インデックスは、データベース ストレージ エンジンが指定されたデータをすば...

MySQLで数千万のテストデータを素早く作成する方法

述べる:この記事で扱うデータ量は 100 万です。数千万のデータが必要な場合は、量を増やすだけで済み...

よく使われる3つのMySQLデータ型

MySQL のデータ フィールドのタイプを定義することは、データベースを最適化するために非常に重要で...