MySQL の結合クエリとサブクエリの問題

MySQL の結合クエリとサブクエリの問題

複数テーブル結合の基本構文

マルチテーブル接続とは、複数のテーブルを1つのテーブルに結合してクエリを実行することです。

フィールド1、フィールド2、...を選択します。
テーブル1から{inner|lift|right}テーブル2を結合
接続条件について

部門テーブルと従業員テーブルの2つのテーブルがあります。

クロス結合と直積現象

クロスコネクト

クロス結合(無条件内部結合/カルテシアン結合とも呼ばれる)

最初のテーブルの各項目は、他のテーブルの各項目と順番に結合されます。

従業員、部門から*を選択します。 

上記の結果は、明らかに私たちが知りたいことではありません。左のテーブルの各人には 4 つの部門があります。これらの 4 つのレコードを注意深く見ると、左のテーブルの各レコードを右のテーブルと 1 つずつ照合した結果とまったく同じです。

デカルト積現象

デカルト積現象の原因: 2 つのテーブル間に有効な接続条件がありません。結合条件がないので、このテーブルの最初の行は、他のテーブルのすべての行と確実に 1 対 1 で一致させることができます。同様に、このテーブルの 2 番目の行は、他のテーブルのすべての行と確実に 1 対 1 で一致させることができます。同様に、このテーブルの最後の行 m も、他のテーブルのすべての行と 1 対 1 で一致させることができます。他のテーブルに n 行ある場合、最後に表示される行数は m*n 行になります。

デカルト積現象を発生させたくない場合は、有効なテーブル結合条件を追加する必要があります。上記の例では、左側のテーブル dep_id は、右側のテーブル id と等しい場合にのみ、その部門を表します。

内部結合

INNER JOIN は、複数のテーブルの交差部分を見つけること、つまり条件に基づいて正しい結果をフィルタリングすることです。

emp.id、emp.name、emp.age、emp.dep_id、emp.gender、dep.id、dep.name を選択してください
従業員をempとしてINNER JOINし、部門をdepとしてINNER JOINする
emp.dep_id=dep.id の場合; 

department テーブルにはid=5の部門が存在しないため、employee テーブル内のdep_id=5のレコードは返されません。また、行政部従業員が存在しないため、このレコードも返されません。

外部結合

左外部結合

左結合は左テーブルに基づいています。右テーブルに適切なレコードがない場合、 NULLで埋められます。その本質は、左テーブルには結果があるが右テーブルにはないレコードを内部結合に基づいて追加することです (内部結合の場合、この場合のレコードは無視されます)。

emp.id、emp.name、emp.age、emp.dep_id、emp.gender、dep.id、dep.name を選択してください
従業員が emp として退職し、部門が dep として参加
emp.dep_id=dep.id の場合; 

右外部結合

左結合の反対で、右結合は右テーブルに基づいています。左テーブルの一部のフィールドに適切な結果がない場合、 NULLで埋められます。その本質は、右テーブルには結果があるが左テーブルにはないレコードを内部結合に基づいて追加することです (内部結合の場合、この場合のレコードは無視されます)。

emp.id、emp.name、emp.age、emp.dep_id、emp.gender、dep.id、dep.name を選択してください
従業員から emp として右結合部門から dep として
emp.dep_id=dep.id の場合; 

完全外部結合

内部結合に基づく完全外部結合では、左側のテーブルと右側のテーブルのすべてのレコードが表示され、左側のテーブルと右側のテーブルのデフォルト レコードはNULLで埋められます。

MySQL には完全外部結合用のFULL JOIN構文はありませんが、 UNION/UNION ALLステートメントを使用して実装されます。

UNIONUNION ALLの違いは、 UNIONは重複排除機能があることです。

emp.id、emp.name、emp.age、emp.dep_id、emp.gender、dep.id、dep.name を選択してください
従業員が emp として退職し、部門が dep として参加
emp.dep_id=dep.id で
連合
emp.id、emp.name、emp.age、emp.dep_id、emp.gender、dep.id、dep.name を選択してください
従業員から emp として右結合部門から dep として
emp.dep_id=dep.id の場合; 

サブクエリ

  • サブクエリは、クエリ ステートメントを別のクエリ ステートメント内にネストするクエリ メソッドです。
  • サブクエリの内部クエリ結果は、クエリ条件を提供するための外部クエリ ステートメントとして使用できます。
  • サブクエリには、 INNOT INANDALLEXISTSNOT EXISTSなどのキーワードを含めることができます。

サブクエリには=!=><などの比較演算子も含めることができます。

-- 平均年齢が20歳以上の部門名を検索する
部門から
idが(
dep_idを選択
従業員から
dep_id でグループ化
平均年齢が20歳を超える

-- 財務部門の従業員の名前を照会する名前を選択 
従業員から
dep_idが(
IDを選択 
部門から 
where name='財務部');


-- 平均年齢より上のすべての従業員の年齢と名前を照会します。select name,age 
従業員から 
年齢 > (
従業員から平均年齢を選択します。 

これで、MySQL の結合クエリとサブクエリの問題に関するこの記事は終了です。MySQL の結合クエリとサブクエリに関するより関連性の高い情報については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マルチテーブル結合クエリの詳細な説明
  • どのような種類の MYSQL 接続クエリを知っていますか?
  • MySQL接続クエリの原理と応用
  • MySQL 結合クエリ構文と例
  • MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明
  • Mysql 自己結合クエリ例の詳細な説明
  • MySQL マルチテーブル結合クエリ例の説明
  • MySQL接続クエリの詳細な説明

<<:  丸い角や鋭い角を表現するために、絵の代わりに文字を使用する研究

>>:  CSSの4種類の配置の違いの詳細な説明

推薦する

Centos7 システム上の nginx サーバーで Phalcon 環境を構築する方法の詳細な説明

この記事では、centos7 システムの nginx サーバーの下に phalcon 環境を構築する...

VMware 仮想マシンの 3 つの接続方法の例の分析

NATこのようにして、仮想マシンのネットワーク カードはホストの VMnet8 に接続されます。この...

MySQL の基本: グループ化関数、集計関数、グループ化クエリの詳細な説明

目次1. 使い方が簡単2. DISTINCTを使用して重複を削除する3. COUNT()の詳細な紹介...

MySQL 5.7.19 Winx64 ZIP アーカイブのインストールと使用に関する問題の概要

今日はMySQLのインストール方法を学びましたが、その過程でいくつか問題が発生しました。関連記事をい...

Vue で pdfjs を使用して PDF ファイルをプレビューする方法

目次序文考えるライブラリディレクトリの解析とダウンロード使い方ファイルの場所実際の通話質問要約する序...

Docker に MySQL と Redis をインストールする方法

この記事はCentOS 7.3システム環境をベースに、MySQLとRedisのインストールと使用につ...

Nginxはリバースプロキシを使用して負荷分散プロセス分析を実装します

導入dockerコンテナとdocker-composeに基づいて、Linux環境でのdockerの基...

CSS3のvar()を使用して実行時にscss変数の値を変更する詳細な説明

var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...

Centos8でdockerがインストールできない問題の解決方法

問題 [root@zh ~]# [root@zh ~]# [root@zh ~]# yum -y d...

IIS を使用して X-Forwarded-For ヘッダー (XFF) を呼び出して訪問者の実際の IP を記録する 2 つの方法

問題: IIS を通じて公開された Web サイトは F5 デバイスの背後に配置されています。透過的...

clearfixとclearの例

この記事では、CSS を理解し始めたばかりの人を対象に、主に HTML で clearfix と c...

MySQL 5.5 のインストールと設定のグラフィックチュートリアル

MySQL 5.5 のインストールと構成のチュートリアル ノートを整理し、全員と共有します。 1.公...

React Fragment の紹介と詳しい使い方

目次序文フラグメントの動機React Fragment の紹介と使用<React.Fragme...

MySQL での select、distinct、limit の使用

目次1. はじめに2. 選択2.1 単一列のクエリ2.2 複数の列のクエリ2.3 すべての列をクエリ...