MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明

MySQLの結合クエリ、ユニオンクエリ、サブクエリの原理と使用例の詳細な説明

この記事では、例を使用して、MySQL の結合クエリ、結合クエリ、サブクエリの原理と使用方法を説明します。ご参考までに、詳細は以下の通りです。

この記事の内容:

  • 接続クエリ
  • 共同クエリ
  • サブクエリ
    • サブクエリから
    • where サブクエリ
    • サブクエリが存在する

リリース日: 2018-04-11


接続クエリ:

  • 結合クエリは、複数のテーブルをまとめてクエリすることです。結合クエリの方法には、内部結合、外部結合、自然結合、クロス結合があります。結合クエリを使用すると、複数のテーブルのデータを同時に表示できます。
    • 内部結合: 条件付き結合。指定された条件に基づいて複数のテーブルが接続され、一致した結果、一致結果を満たすレコードが保持されます。
    • 外部結合: 内部結合とは異なり、一致する文字に関係なくすべてのデータを保持します。外部結合モードによって、保持するテーブルが決まります。たとえば、左側のテーブルが保持される場合、左側のテーブルが右側のテーブルと一致しないときは、左側のテーブルのデータが保持され、右側のテーブルのフィールド データは null に設定されます。
    • 自然接続: 条件付き接続、「同じ名前のフィールド」に基づいて自動的に接続されます (同じ名前の複数のフィールドが条件として使用されます)。
    • クロス結合: 無条件接続。各レコードを別のテーブルの各レコードに接続します (直積)。結果として、フィールド数は元のフィールド数の合計に等しくなり、レコード数は各テーブルのレコード数の積に等しくなります。
-- 実験的なテーブル構造 create table student(
id int、
名前varchar(15),
性別varchar(15),
cid 整数
);
テーブルクラスを作成する(
cid int、
cname varchar(15)
);
テーブルの学生、クラスをドロップします。
-- 実験テーブルデータ:
学生の値に挿入します(1,"lilei","男性",1),(2,"hanmeimei","男性",2),(3,"jack","男性",1),(4,"alice","女性",4); --これはクラスにはない4の特別な作成です
insert into class values(1,"linux"),(2,"python"),(3,"java"),(5,"html5");--ここでは、student に含まれないクラス 5 を作成します。
学生から*を選択します。
クラスから*を選択します。 

imageimage

内部結合:

  • 左側のテーブルから各レコードを取得し、右側のテーブルのすべてのレコードと照合し、一致したレコードを保持して、2 つのレコードを連結します。
  • 構文: 左のテーブルからフィールド リストを選択 [内部] 右のテーブルを左のテーブル.field = 右のテーブル.field に結合します。
    • オン条件を使用しない場合、結果はクロス結合と同じになります。
    -- 内部結合 -- select * from student inner join class; -- 結果は、student.cid = class.cid; のクロス結合 select * from student join class と同じです。
    学生から*を選択し、学生.cid = class.cid でクラスを内部結合します。 
    image

外部結合:

  • 内部結合とは異なり、一致する文字が満たされているかどうかに関係なく、メイン テーブルのレコードは保持されます。左外部結合と右外部結合の 2 つの方法があります。左外部結合では左側のテーブルが保持され、右外部結合では右側のテーブルが保持されます。
  • 文法:
    • 左外部結合: 左のテーブルからフィールド リストを選択し、左のテーブルフィールド = 右のテーブルフィールドで右のテーブルを結合します。
    • 右外部結合: 左のテーブルからフィールド リストを選択し、右のテーブルを左のテーブル.field = 右のテーブル.field で結合します。
    学生の左から*を選択し、クラスに参加します。student.cid = class.cid; 
    image
    学生の権利から*を選択し、学生のクラスに参加します。cid = class.cid; 
    image

自然なつながり:

  • 接続条件を自動的に一致させます。システムはフィールド名を一致パターンとして使用します(同じ名前のフィールドは条件として使用され、同じ名前の複数のフィールドは条件として使用されます)
    • 自然内部結合: 内部結合に似ていますが、結合条件は提供されません。
    • 自然外部結合: 外部結合に似ていますが、結合条件は提供されません。
  • 文法:
    • 自然内部結合: テーブル名からフィールド リストを選択し、テーブル名を自然に結合します。
    • 自然外部結合: テーブル名からフィールド リストを選択し、テーブル名を自然左\右結合します。
    学生の自然結合クラスから*を選択します。 
    image
    学生の自然左から*を選択し、クラスに参加します。 
    image

クロス接続:

  • 各レコードを別のテーブルの各レコードと結合する
  • 文法:
    • テーブル名からフィールド リストを選択し、テーブル名をクロス結合します。
    • テーブル名、テーブル名からフィールド リストを選択します。
    学生のクロス結合クラスから * を選択します。
    学生、クラスから*を選択します。 
    image

補充:

  • 複数のテーブル間で各テーブルを区別し、使いやすくするために、テーブルエイリアスを使用できます。
      select * from student inner join class on student.cid = class.cid;-- 元の結果 select id,name,gender,c.cid,cname from student as s inner join class as c on s.cid = c.cid;-- テーブルエイリアスを使用
  • 複数接続が可能です。
  • 外部結合は自然結合をシミュレートできます。左のテーブルフィールド = 右のテーブルフィールドの結合条件を「フィールド名を使用」に変更するだけです。


共同クエリ:

  • 結合クエリは、レコードの複数のクエリ結果を結合することです。 (他のテーブルのクエリレコード結果を最初のテーブルの後ろに接続することと同等です)[スプライスなので、複数のクエリ結果のフィールド数は同じである必要があります] [スプライスではデータ型は考慮されません。たとえば、最初のテーブルの最初のフィールドは int ですが、後続のテーブルの varchar を最初の列に接続することもできます]
  • 構文: select ステートメント union select ステートメント…;
    生徒の名前と性別を選択
    連合 
    クラスから*を選択します。
    -- クラスにはフィールドが2つしかないため、最初のクラスでは2つのフィールドのみが選択されます。 
    image

補充:

  • Union には、Union の後に追加されるオプションがあります。all オプションは重複を削除しませんが、distinct オプションは重複を削除します。
  • ユニオン クエリは通常、同じテーブル内の異なるデータを異なる方法で処理するために使用されます。 (たとえば、学生のスコア テーブルで 2 つの科目 (ここでは Python と Linux と仮定) を同時に照会する場合)
  • union と order by を同時に使用するとエラーが発生する
    • ユニオン クエリでクエリ結果を並べ替える場合は、SELECT ステートメントを括弧で囲む必要があります。 [また、ジョイントクエリの連結メカニズムにより、order by の後に limit 句を追加する必要があり、制限数は非常に大きな値になる可能性があります。 】
    • 最終的な結合クエリ結果の場合は、最後の選択ステートメントで order by を使用します [最後のフィールドに括弧を追加してから order by を追加することをお勧めします。これは、同じ名前のフィールドがある場合に使用されます]


サブクエリ:

  • サブクエリは、クエリ ステートメント内にネストされたクエリです。
  • サブクエリは、出現場所に応じて 3 つのカテゴリに分類できます。
    • サブクエリから: サブクエリはから続きます。これは通常、「最初に 2 次元テーブルを見つけて、それを処理する」状況で使用されます。
      • 例えば:
        -- これは意味のない例です。たとえば、select cid,cname from (select * from class where cname="python") as c; を使用します。
    • Where サブクエリ: サブクエリは where 条件の後に続きます。通常は、「最初に指定された条件をクエリしてからクエリを実行する」場合に使用されます。
      • 例えば:
        cid=(cname="python" のクラスから cid を選択) の学生から * を選択します。
    • 存在するサブクエリ: サブクエリは存在するステートメント内にあります。通常は「存在する場合のみ」の状況で使用されます。
      • 例えば:
        -- これは、学生が cid=1 select * from class where exists(select * from student where cid=1) and cid=1; でコースを選択していない場合、対応するコース情報を出力しない例です。
    • 実際、ユニオンに続くクエリもサブクエリであると考える人もいますが、ここではこれらはサブクエリとは見なされません。「クエリ」に非常に密接に関連する上記のいくつかのものだけがサブクエリと見なされます。

補充:

  • 実際、サブクエリをその結果に基づいて分類することもできます。
    • スカラー サブクエリの場合、サブクエリの結果は 1 行 1 列です。これは通常、where サブクエリが 1 行 1 列のみをクエリする場合に発生します。
    • 列サブクエリの場合、サブクエリの結果は複数の行を持つ 1 つの列になります。これは通常、where サブクエリが複数の行を持つ 1 つの列をクエリするときに発生します。
    • 行サブクエリの場合、サブクエリの結果は複数の列と 1 つの行 (または複数の行と複数の列) になります。これは通常、where サブクエリが複数の列と 1 つの行をクエリするときに発生します。
    • テーブルサブクエリ、サブクエリの結果は複数の行と列であり、通常はfromサブクエリで発生します。
  • where サブクエリでは any、all、some などの他のキーワードが使用されることもありますが、= の場合は基本的に = でその機能を実現できます。

MySQL 関連のコンテンツに興味のある読者は、このサイトの次のトピックをチェックしてください: 「MySQL クエリ スキル」、「MySQL トランザクション操作スキル」、「MySQL ストアド プロシージャ スキル」、「MySQL データベース ロック関連スキルの概要」、および「MySQL 共通関数の概要」

この記事が皆様のMySQLデータベース設計に役立つことを願っています。

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

<<:  Baota LinuxパネルにFTP接続できない問題の解決方法の詳細な説明

>>:  要素テーブルヘッダー行の高さの問題の解決

推薦する

Win7 x64 に解凍版の mysql 5.7.18 winx64 をインストールするとサービスが起動できない問題を解決します

今日、mysql の公式サイトから mysql-5.7.18-winx64.zip をダウンロードし...

MySQL 5.7のワンクリックインストールとパスワードポリシーの変更方法

1.Mysqlスクリプトのワンクリックインストール [root@uat01 ~]# cat Inst...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

史上最もシンプルな MySQL データのバックアップと復元のチュートリアル (パート 1) (パート 35)

データのバックアップと復元に関する最初の記事を皆さんに共有します。具体的な内容は次のとおりです。基本...

Linux C ログ出力コード テンプレート サンプル コード

序文この記事は主に Linux C でのログ出力コード テンプレートに関する関連コンテンツを紹介し、...

Vue カプセル化 TabBar コンポーネントの完全なステップ記録

目次実装のアイデア:ステップ 1: TabBar と TabBarItem のコンポーネント カプセ...

Windows (コミュニティ エディション) に MySQL 8.0.18 をインストールするためのチュートリアル

この記事では、Windows で MySQL をインストールする方法について簡単に説明します。他にご...

LinuxサーバーにGRUBをインストールする手順

Linux サーバーに GRUB をインストールする方法クラウド移行ツールを使用して、CentOS ...

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

この記事では、MySQL 5.7.27 winx64のインストールと設定方法を参考までに紹介します。...

MySQL テーブル フィールドの時間設定のデフォルト値

アプリケーションシナリオデータ テーブルでは、アプリケーションは各データがいつ作成されたかを記録する...

MySQLのconcat関連関数の詳細な説明

1. concat() 関数機能: 複数の文字列を 1 つの文字列に連結する構文: concat(s...

MySQL での %% のようなファジークエリの実装

1、%: 0 個以上の任意の文字を表します。あらゆるタイプと長さの文字に一致します。場合によっては、...

Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)

イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...

JavaScriptにおけるこれの深い理解

Jsでのこれの深い理解JavaScriptスコープはstatic scopeスコープですが、 Jsの...

JavaScript でオブジェクトをトラバースする 5 つの方法 サンプルコード

目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...