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

推薦する

Linux コンパイル最適化で習得しなければならないいくつかの姿勢のまとめ

01. コンパイルオプションとカーネルコンパイルLinux カーネル (英語: linux kern...

Dockerでmysqlのルートパスワードを変更する方法

最初のステップはmysqlコンテナを作成することです docker exec -it コンテナID ...

Dockerデータ管理とネットワーク通信の使用

Docker をインストールし、Docker コアとインストールを通じて簡単な操作を実行できます。 ...

MySQL テーブル削除操作の実装 (delete、truncate、drop の違い)

この記事では主に、MySQL でテーブルを削除する 3 つの操作、つまり delete ステートメン...

MySQLのint主キーの自己増分の問題を解決する

導入MySQL データベースを使用する場合、int を主キーとして使用し、自動インクリメントに設定す...

ゲーム開発におけるサウンド処理にCocosCreatorを使用する方法

目次1. Cocos Creatorでのオーディオ再生の基本1. 基本2. 一般的な方法2. Coc...

sqlmap インジェクションの詳細なグラフィック説明

目次1. この Web サイトには SQL インジェクションの脆弱性がある可能性があることが判明しま...

vue3 で vue-router を使用するための完全な手順

序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...

MySQLデュアルマシンホットスタンバイと負荷分散の実装手順の詳細説明

MySQL データベースには増分バックアップ メカニズムはありませんが、マスター データベース内のす...

有名ウェブサイトのロゴにおすすめのフォント40選

世界で最も有名なウェブサイトのロゴデザインにはどんなフォントが使われているかご存知ですか?これらのフ...

MySQL監視ツールmysql-monitorの詳細な説明

1. 概要mysql-monitor MYSQL 監視ツール、最適化ツール、1 つの Java Sp...

MySQLでSQL文がどのように実行されるかの詳細な説明

概要最近MySQL関連の知識を勉強し始めました。学んだ知識ポイントと自分の理解を元に整理して共有しま...

CentOS7 に Redis をインストールして設定する方法

導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...

忘れられたMySQLパスワードとログインエラーの問題について簡単に説明します

MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...

vmware16 仮想マシンに共有フォルダを設定する方法

1. 仮想マシンに共有フォルダを設定します。 1. 処理する仮想マシンを選択し、右クリックして設定...