MySQL マルチテーブルクエリの具体例

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリする

SELECT フィールド名 FROM table1, table2 ... WHERE table1.field = table2.field AND その他のクエリ条件

SELECT a.id,a.name,a.address,a.date,b.math,b.english,b.chinese FROM tb_demo065_tel AS b,tb_demo065 AS a WHERE a.id=b.id

注: 上記のコードでは、2 つのテーブルが条件と同じ ID フィールド情報に関連付けられていますが、実際の開発ではこれを使用しないでください。これを実現するには、主キー制約と外部キー制約を使用するのが最適です。

2. 複数テーブルクエリにテーブルエイリアスを使用する

のように:

tb_demo065 a、tb_demo065_tel b から a.id、a.name、a.address、b.math、b.english、b.chinese を選択します。ここで、a.id=b.id であり、b.id='$_POST[textid]' です。

SQL言語では、テーブルの別名を2つの方法で指定できます。
1つ目は、キーワードASを使って指定する方法です。

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065 AS a,tb_demo065_tel AS b WHERE a.id=b.id

2 番目の方法は、テーブル名の直後にテーブル別名を追加することです。

tb_demo065 a、tb_demo065_tel b から a.id、a.name、a.address、b.math、b.english、b.chinese を選択します。ここで、a.id=b.id です。 

テーブルエイリアスを使用する際に注意すべき点

  • エイリアスは通常、接続中にテーブル内の特定の列を参照するために使用される短縮されたテーブル名です。接続内の複数のテーブルに同じ名前の列が存在する場合、列名はテーブル名またはテーブル エイリアスで修飾する必要があります。
  • テーブルエイリアスが定義されている場合、テーブル名は再利用できません

3. 複数の結果セットを結合する

SQL 言語では、UNION または ALL を使用して複数の SELECT ステートメントのクエリ結果を結合できます。これらの 2 つのキーワードの使用方法は次のとおりです。

UNION: このキーワードを使用すると、複数の SELECT ステートメントのクエリ結果を結合し、重複する行を削除できます。

ALL: このキーワードは複数の SELECT ステートメントのクエリ結果をマージするために使用できますが、重複する行は削除されません。

UNION または ALL キーワードを使用して複数のテーブルを結合して出力する場合、クエリ結果の構造は同じで、データ型に互換性がある必要があります。また、UNION を使用する場合は、2 つのテーブルのフィールド数が同じである必要があります。そうでない場合、SQL ステートメントでエラーが表示されます。

例:SELECT id,name,pwd FROM tb_demo067 UNION SELECT uid,price,date FROM tb_demo067_tel

4つのシンプルなネストされたクエリ

サブクエリ: サブクエリは、単一の値を返す SELECT クエリであり、SELECT、INSERT、UPDATE、および DELETE ステートメントまたはその他のクエリ ステートメントにネストされます。サブクエリは、式を使用できる場所であればどこでも使用できます。

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id='$_POST[test]')

内部結合: クエリ結果をWHERE句のクエリ条件として使用することを内部結合と呼びます。

5. 複雑なネストされたクエリ

複数のテーブル間のネストされたクエリは、IN 述語を使用して実装できます。構文は次のとおりです。

テスト式[NOT] IN {

 サブクエリ

}

パラメータの説明: test_expression は SQL 式を参照し、subquery には結果セットのサブクエリが含まれます。複数テーブルのネストされたクエリの原則: ネストされたテーブルの数に関係なく、テーブル間に何らかの関連付けが存在する必要があり、この関連付けはクエリを実装するための WHERE 句を通じて確立されます。

6. クエリ統計におけるネストされたクエリの適用

マルチテーブルクエリを実装する場合、述語 ANY、SOME、および ALL を同時に使用できます。これらの述語は定量比較述語と呼ばれ、比較演算子と組み合わせて使用​​して、返されるすべての値が検索条件を満たしているかどうかを判断できます。SOME 述語と ANY 述語は存在述語であり、返される値が検索条件を満たしているかどうかにのみ焦点を当てています。2 つの述語は同じ意味を持ち、互換性があります。ALL 述語は一般述語と呼ばれ、検索要件を満たす述語があるかどうかのみを考慮します。

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName='$_POST[select]')

tb_demo067 から a.id、a.name を選択、WHERE id<3)

  • ANYはサブクエリの値より大きい
  • =ANYはサブクエリの値以上である
  • <=ANY はサブクエリ内の値以下です
  • =ANYはサブクエリ内の値と等しい
  • !=ANY または <>ANY はサブクエリの値と等しくありません
  • ALL サブクエリ内のすべての値より大きい
  • =ALL サブクエリ内のすべての値より大きいか等しい
  • <=ALL サブクエリ内のすべての値以下
  • =ALLはサブクエリ内のすべての値に等しい
  • !=ALL または <>ALL はサブクエリ内のすべての値と等しくありません

7. サブクエリを派生テーブルとして使用する

実際のプロジェクト開発プロセスでは、比較的完全な情報を持つテーブルから、いくつかのキーフィールドのみを含む情報テーブルを派生させるのによく使用されます。この目標は、次のようなサブクエリによって達成できます。

people.name、people.chinese、people.math、people.english を (SELECT name、chinese、math、english FROM tb_demo071) から選択します。

注意: サブクエリは次の規則に従う必要があります。

(1) 比較演算子によって導入された内部サブクエリには、式または列名が 1 つだけ含まれます。外部ステートメントの WHERE 句で指定された列は、内部サブクエリで指定された列と互換性がある必要があります。
(2)不変の比較演算子(キーワードANYまたはALLが続かない比較演算子)によって導入されたサブクエリには、グループ化された値または個々の値が事前に決定されていない限り、GROUP BY句またはHAVING句は含まれません。
(3)EXISTSで導入されるSELECTリストは通常​​で構成され、列名を指定する必要はない。
(4)サブクエリは結果を内部的に処理できない

8. サブクエリを式として使用する

SELECT (SELECT AVG(中国語)FROM tb_demo071),(SELECT AVG(英語)FROM tb_demo071),(SELECT AVG(数学)FROM tb_demo071) FROM tb_demo071

注: サブクエリを使用する場合は、リスト項目にエイリアスを付けることをお勧めします。これにより、mysql_fetch_array() 関数を使用するときに、ユーザーがテーブル項目に値を割り当てやすくなります。

SELECT (SELECT AVG(chinese) FROM tb_demo071) AS yuwen、(SELECT AVG(english) FROM tb_demo071) AS yingyu、(SELECT AVG(math) FROM tb_demo071) AS shuxue FROM tb_demo071

9. サブクエリを使用してデータを関連付ける

SELECT * FROM tb_demo072_student WHERE id=(SELECT id FROM tb_demo072_class WHERE className = '$_POST[text]')

10. 複数テーブル結合クエリ

SQL 文で UNION を使用すると、異なるテーブル内の条件を満たすデータ情報を同じ列に表示できます。

例:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten

注意: UNION を使用する場合は、次の 2 つの点に注意する必要があります。
(1)UNION演算子を使用して結合された文では、列名、算術式、集計関数など、すべての選択リスト内の式の数は同じでなければなりません。
(2)各クエリテーブルにおいて、対応する列のデータ構造は同じでなければならない。

11. 結合結果を並べ替える

UNION 操作の互換性のために、すべての SELECT ステートメントに ORDER BY ステートメントを含めることはできませんが、最後の SELECT ステートメントに ORDER BY 句を配置して、結果の最終的なソートされた出力を実現するという例外が 1 つあります。

例:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id

UNION を使用するための条件は比較的厳しいため、このステートメントを使用する場合は、2 つのテーブルの項目数とフィールド タイプが同じかどうかに注意する必要があります。

12 条件付き結合ステートメント

SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name='Posts and Telecommunications Press' OR name='Machinery Industry Press' UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>'Posts and Telecommunications Press' AND name <>'Machinery Industry Reprint Press' ORDER BY id

上記のステートメントは、GROUP BY ステートメントと HAVING ステートメントを使用して条件付き結合クエリを実装します。目的は、「人民郵電出版社」と「機械工業出版社」が常にリストのトップにあるようにし、それから他の出版社を輸出することです。

13. シンプルな内部結合クエリ

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1

このうち、filedlist は表示されるフィールド、INNER はテーブル間の接続が内部接続であることを意味し、table1.column1=table2.column1 は 2 つのテーブル間の接続条件を示すために使用されます。例:

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id

14 複雑な内部結合クエリ

複雑な内部結合クエリは基本的な内部結合クエリに基づいており、次のようなクエリ条件が追加されています。

SELECT a.name,a.address,a.date,b.chinese,b.math,b.english FROM tb_demo065 AS a INNER JOIN tb_demo065_tel AS b on a.id=b.id WHERE b.id=(SELECT id FROM tb_demo065 WHERE tb_demo065.name='$_POST[text]')

つまり、テーブル間の関連付けを実現する本質は、2 つのテーブル間に共通のデータ項目または同一のデータ項目があることです。2 つのテーブルは、WHERE 句または INNER JOIN ... ON ステートメントを介して接続され、クエリを実現します。

15. 外部結合を使用して複数テーブルの結合クエリを実装する

(1) LEFT OUTER JOINは、テーブル同士を左結合で接続することを意味し、LEFT JOINと略されることもあります。左側のテーブルを基準とするため、左結合と呼ばれます。左側のテーブルにあるすべての情報が出力され、右側のテーブルにある条件を満たす情報のみが出力されます。条件を満たさない情報についてはNULLが返されます。
例:SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A LEFT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

(2)RIGHT OUTER JOINは、右結合によってテーブル同士が接続されることを意味し、RIGHT JOINと略されることもあります。右側のテーブルを基準とするため、右結合と呼ばれます。右側のテーブルにあるすべての情報が出力されますが、左側のテーブルにある情報は条件を満たす情報のみが出力されます。条件を満たさない情報についてはNULLが返されます。
例: SELECT a.name,a.address,b.math,b.english FROM tb_demo065 AS A RIGHT OUTER JOIN tb_demo065_tel AS b ON a.id=b.id

16. INまたはNOTINキーワードを使用して範囲を制限する

例:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN '$_POST[text1]' AND '$_POST[text2]')

IN は範囲内のクエリを指定するために使用できます。特定の範囲外でクエリを実行する必要がある場合は、代わりに NOT IN を使用できます。

17. INによって導入された相関サブクエリ

例:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = '$_POST[text]')

18. HAVING ステートメントを使用してグループ化されたデータをフィルタリングする

HAVING 句は、グループまたは集計の検索条件を指定するために使用されます。HAVING は通常、GROUP BY 句とともに使用されます。SQL ステートメントに GROUP BY 句が含まれていない場合、HAVING は WHERE 句と同じように動作します。

例:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math > '95'

これで、MySQL マルチテーブル クエリの具体的な例に関するこの記事は終了です。MySQL マルチテーブル クエリに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マルチテーブルクエリの詳細なケーススタディ
  • MySQL マルチテーブルクエリの詳細な分類
  • MySql データベースにおける単一テーブル クエリと複数テーブル結合クエリの効率の比較
  • MySql マルチテーブル クエリ トランザクションと DCL
  • MySQL マルチテーブル結合クエリの詳細な説明
  • MySQL マルチテーブルクエリメカニズム

<<:  HTML テーブル マークアップ チュートリアル (42): テーブル ヘッダーの水平方向の配置属性 ALIGN

>>:  Matlab による JavaScript プログラミング、重心アルゴリズムによる位置決め学習

推薦する

JSは単純なフィルタリングから複数条件のフィルタリングまで配列フィルタリングを実装します

目次単一条件単一データフィルタリング単一条件複数データフィルタリング複数の条件付きデータフィルタリン...

パゴダパネルとドッカーを使用して Gogs をインストールするプロセス全体

目次1 Baota Software StoreにDockerをインストールする2 ゴグスイメージを...

Vue+thinkphp5.1+axiosでファイルアップロードを実現

この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...

SQL実装 LeetCode (176. 2番目に高い給与)

[LeetCode] 176. 2番目に高い給与従業員テーブルから 2 番目に高い給与を取得する ...

React Native JSIはRNとネイティブ通信のサンプルコードを実装します

目次JSIとはJSIの違いiOS で JSI を使用するiOS 設定RN側の構成jsはパラメータ付き...

シャドウソックスを使用してLAN透過ゲートウェイを構築する

目次dnsmasq をインストールして設定するChinaDNS をインストールして設定するshado...

MySQLの複合インデックス方式の詳細な説明

どの DBMS でも、インデックスは最適化にとって最も重要な要素です。データ量が少ない場合、適切なイ...

CSS における px、em、rem、pt の特徴、違い、変換について詳しく説明します。

コンセプト紹介: 1. px (ピクセル):仮想的な長さの単位で、コンピュータ システムのデジタル画...

Node.js における非同期プログラミングの知識ポイントの詳細な説明

導入JavaScript はデフォルトでシングルスレッドであるため、コードは並列実行するための新しい...

最新バージョンMySQL5.7.19 解凍版インストールガイド

MySQL バージョン: MySQL Community Edition (GPL) ------ ...

CentOS7 で docker を使用して Apollo 構成センターをデプロイする実装

Apollo オープンソース アドレス: https://github.com/ctripcorp/...

Windows オペレーティング システムでの Linux 仮想マシンのインストールと構成のチュートリアル

序文仕事では、Linux 環境で操作する必要があることがよくあります。ここでは、win10 システム...

VUE 3 テレポート コンポーネントと使用構文をすぐに使い始める

目次1. テレポートの紹介1.1. 複数のテレポートを使用する2. テレポートを使用する理由3. テ...

html リンク タグ タイトル属性 改行 マウス ホバー プロンプト コンテンツ 改行効果

オブジェクト上にマウスを移動したときにコンテンツ(タイトル属性の内容)を折り返す方法、HTML タイ...

XHTML 入門チュートリアル: フォーム タグ

<br />フォームはユーザーが情報を送信するための重要なチャネルです。このセクションで...