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 プログラミング、重心アルゴリズムによる位置決め学習

推薦する

ドロップダウンメニューを表示または非表示にするJavaScript

この記事では、ドロップダウンメニューを表示および非表示にするJavaScriptの具体的なコードを参...

MySQL 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

MySQL 最適化 query_cache_limit パラメータの説明

クエリキャッシュ制限query_cache_limit は、単一のクエリで使用できるバッファ サイズ...

MySQL のインデックス障害の一般的なシナリオと回避方法

序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...

mysql ERROR 1045 (28000) 問題の解決方法

私はmysql ERROR 1045に遭遇し、この問題に長い時間を費やしました。私はそれを自分で書き...

Div CSS 命名標準 CSS クラスの命名規則 (SEO 標準に準拠)

検索エンジン最適化 (SEO) では実行すべきタスクが多数ありますが、その中でもコードの最適化は重要...

JavaScript関数の詳細な紹介

任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...

フォームの送信イベントが応答しない

1. 問題の説明<br />JS を使用してフォームの送信メソッドを呼び出してフォームを...

カルーセル効果を書くためのjs

この記事では、カルーセルマップの効果を実現するためのjsの具体的なコードを参考までに共有します。具体...

Vue.js での VNode の使用

VNodeとはvue.js には VNode クラスがあり、これを使用してさまざまな種類の vnod...

MySQLのトランザクション管理操作の詳細な説明

この記事では、MySQL のトランザクション管理操作について説明します。ご参考までに、詳細は以下の通...

MySQL における楽観的ロック、悲観的ロック、MVCC の包括的な分析

序文データベースの実際の使用では、データの書き込みや読み取りを同時に行わないことが必要な状況によく遭...

CSS3 を使用した背景ぼかし効果の 3 つの例

導入から始めず、いきなり本題に入りましょう。通常の背景ぼかし効果は次のとおりです。 プロパティを使用...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

MySQLインデックスの基礎となるデータ構造の詳細

目次1. インデックスの種類1. B+ツリー2. MyISAM と InnoDB の B+ ツリー ...