ホームページ データベース mysql チュートリアル 詳しい理解 ---MySQL マルチテーブル クエリ

詳しい理解 ---MySQL マルチテーブル クエリ

May 06, 2020 am 10:59 AM
mysql

詳しい理解 ---MySQL マルチテーブル クエリ

#1. 複数テーブルのクエリには SELECT 句を使用します

SELECT フィールド名 FROM テーブル 1、テーブル 2 ... WHERE テーブル 1. フィールド = テーブル 2. フィールド 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 つのテーブル間の関連付けを確立しますが、これは実際の開発では使用しないでください。


2. テーブル エイリアスを使用するために、主キー制約と外部キー制約を使用するのが最善です。複数テーブルのクエリの場合例:

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id AND 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 つ目 1 つ目の方法は、テーブル名の直後にテーブルのエイリアスを追加することです。テーブルの別名の使用

(1)別名は通常、短縮されたテーブル名で、接続内のテーブル内の特定の列を参照するときに、接続内の複数のテーブルに同じ名前の列が存在する場合に使用されます。 name はテーブル名またはテーブルの別名で修飾する必要があります
(2) テーブルの別名が定義されている場合は、テーブル名を使用できません



3. 複数の結果セットをマージします

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

UNION: このキーワードを使用してクエリを結合します。 ALL: 複数の SELECT ステートメントの結果を結合するには、このキーワードを使用します。クエリ結果はマージされて出力されますが、重複行は削除されません。 UNION またはALL キーワードを使用して複数のテーブルをマージして出力するには、クエリ結果が同じ構造を持ち、データ型に互換性がなければなりません。また、UNION を使用する場合は、2 つのテーブルのフィールド数も同じでなければなりません。そうでない場合は、エラーが発生します。 SQL ステートメントでプロンプトが表示されます。

SELECT a.id,a.name,a.address,b.math,b.english,b.chinese FROM tb_demo065  a,tb_demo065_tel  b WHERE a.id=b.id
ログイン後にコピー


4. 単純なネストされたクエリ

サブクエリ: サブクエリは、単一の値を返す SELECT クエリであり、SELECT、INSERT、UPDATE、および DELETE ステートメントにネストされています。

e.x:SELECT id,name,pwd FROM tb_demo067 UNION SELECT  uid,price,date FROM tb_demo067_tel
ログイン後にコピー
内部結合: クエリ結果を WHERE 句のクエリ条件として使用することは、内部結合と呼ばれます

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

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

test_expression[NOT] IN{ subquery
}
パラメータの説明: test_expression は SQL 式を指し、subquery には特定の結果セットのサブクエリが含まれます<br/>マルチテーブルのネストされたクエリの原則: テーブルの数に関係なくネストを使用する場合、テーブル間には何らかの関連付けが必要です。この関連付けは、クエリを実装するための WHERE 句を通じて確立されます。<br/>
6. クエリ統計におけるネストされたクエリの適用

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

SELECT id,name,sex,date FROM tb_demo068 WHERE id in(SELECT id FROM tb_demo068 WHERE id=&#39;$_POST[test]&#39;)
ログイン後にコピー

>ANY はサブクエリ内の特定の値より大きいです
>=ANY は大きいですサブクエリの特定の値以上

<=ANY はサブクエリの特定の値以下
=ANY はサブクエリの値

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




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

実際のプロジェクト開発プロセスでは、よく使用されます1 つの情報からより完全な情報を取得する 少数のキー フィールドのみを含む情報テーブルがテーブルから導出されます。この目標は、

SELECT * FROM tb_demo069_people WHERE uid IN(SELECT deptID FROM tb_demo069_dept WHERE deptName=&#39;$_POST[select]&#39;)
SELECT a.id,a.name FROM tb_demo067 AS a WHERE id<3)
ログイン後にコピー
などのサブクエリを通じて達成できます。 注: サブクエリは次のルールに従う必要があります。 :
(1) 比較演算子によって導入された内部サブクエリには、式または列名が 1 つだけ含まれます。外部ステートメントの WHERE 句で指定された列は、内部サブクエリで指定された列と互換性がある必要があります
(2 ) 不変の比較演算子 (キーワード ANY または ALL が後に続かない比較演算子) によって導入されたサブクエリには、グループまたは個々の値が事前に定義されていない限り、GROUP BY または HAVING 句は含まれません

(3) SELECT リストEXISTS で導入されるクエリは一般に * で構成され、カラム名を指定する必要はありません

(4) サブクエリは内部で結果を処理できません



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

SELECT people.name,people.chinese,people.math,people.english FROM (SELECT name,chinese,math,english FROM tb_demo071) AS people
ログイン後にコピー
注: サブクエリを使用する場合は、リスト項目にエイリアスを付けることが最善です。これにより、ユーザーが mysql_fetch_array() を使用するときにテーブル項目に値を割り当てることが容易になります。
SELECT (SELECT AVG(chinese)FROM tb_demo071),(SELECT AVG(english)FROM tb_demo071),(SELECT AVG(math)FROM tb_demo071) FROM tb_demo071
ログイン後にコピー

9 のような関数。

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 = &#39;$_POST[text]&#39;)
ログイン後にコピー

10. 複数テーブルの結合クエリ
SQL ステートメントで UNION を使用すると、異なるテーブルの修飾されたデータ情報を同じ列に表示できます。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten
ログイン後にコピー

注:使用UNION时应注意以下两点:
(1)在使用UNION运算符组合的语句中,所有选择列表的表达式数目必须相同,如列名、算术表达式及聚合函数等
(2)在每个查询表中,对应列的数据结构必须一样。

十一、对联合后的结果进行排序
为了UNION的运算兼容,要求所有SELECT语句都不能有ORDER BY语句,但有一种情况例外,那就是在最后一个SELECT语句中放置ORDER BY 子句实现结果的最终排序输出。

e.x:SELECT * FROM tb_demo074_student UNION SELECT * FROM tb_demo074_fasten ORDER BY id
ログイン後にコピー

使用UNION条件上相对比较苛刻,所以使用此语句时一定要注意两个表项数目和字段类型是否相同

十二、条件联合语句

SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name=&#39;人民邮电出版社&#39; OR name=&#39;机械工业出版社&#39; UNION SELECT * FROM tb_demo076_BEIJING GROUP BY name HAVING name <>&#39;人民邮电出版社&#39; AND name <>&#39;机械工业再版社&#39; ORDER BY id
ログイン後にコピー

上面语句应用了GROUP BY分组语句和HAVING语句实现条件联合查询。其实现目的是先保证将'人民邮电出版社'和'机械工业出版社'始终位于名单最前列,然后再输出其它的出版社

十三、简单内连接查询

SELECT filedlist FROM table1 [INNER] JOIN table2 ON table1.column1 = table2.column1
ログイン後にコピー

其中,filedlist是要显示的字段,INNER表示表之间的连接方式为内连接,table1.column1=table2.column1用于指明两表间的连接条件,如:

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
ログイン後にコピー

十四、复杂内连接查询
复杂的内连接查询是在基本的内连接查询的基础上再附加一些查询条件,如:

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=&#39;$_POST[text]&#39;)
ログイン後にコピー

总之,实现表与表之间的关联的本质是两表之间存在共同的数据项或者相同的数据项,通过WHERE 子句或内连接INNER JOIN … ON 语句将两表连接起来,实现查询

十五、使用外连接实现多表联合查询
(1)LEFT OUTER JOIN表示表之间通过左连接方式相互连接,也可简写成LEFT JOIN,它是以左侧的表为基准故称左连接,左侧表中所有信息将被全部输出,而右侧表信息则只会输出符合条件的信息,对不符合条件的信息则返回NULL

e.x: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

E.X: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
ログイン後にコピー

十六、利用IN或NOTIN关键字限定范围

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code BETWEEN &#39;$_POST[text1]&#39; AND &#39;$_POST[text2]&#39;)
ログイン後にコピー

利用IN可指定在范围内查询,若要求在某范围外查询可以用NOT IN代替它

十七、由IN引入的关联子查询

e.x:SELECT * FROM tb_demo083 WHERE code IN(SELECT code FROM tb_demo083 WHERE code = &#39;$_POST[text]&#39;)
ログイン後にコピー

十八、利用HAVING语句过滤分组数据
HAVING子句用于指定组或聚合的搜索条件,HAVING通常与GROUP BY 语句一起使用,如果SQL语句中不含GROUP BY子句,则HAVING的行为与WHERE子句一样.

e.x:SELECT name,math FROM tb_demo083 GROUP BY id HAVING math > &#39;95&#39;
ログイン後にコピー

推荐学习:mysql教程

以上が詳しい理解 ---MySQL マルチテーブル クエリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

MySQL対その他のプログラミング言語:比較 MySQL対その他のプログラミング言語:比較 Apr 19, 2025 am 12:22 AM

他のプログラミング言語と比較して、MySQLは主にデータの保存と管理に使用されますが、Python、Java、Cなどの他の言語は論理処理とアプリケーション開発に使用されます。 MySQLは、データ管理のニーズに適した高性能、スケーラビリティ、およびクロスプラットフォームサポートで知られていますが、他の言語は、データ分析、エンタープライズアプリケーション、システムプログラミングなどのそれぞれの分野で利点があります。

データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース データベース接続の解決問題:Minii/DBライブラリを使用する実用的なケース Apr 18, 2025 am 07:09 AM

小さなアプリケーションを開発する際には、軽量データベース操作ライブラリをすばやく統合する必要性という厄介な問題に遭遇しました。複数のライブラリを試した後、私はそれらがあまりにも多くの機能を持っているか、あまり互換性がないかのどちらかであることがわかりました。最終的に、私は問題を完全に解決したYii2に基づいた単純化されたバージョンであるMinii/DBを見つけました。

Laravel Frameworkインストール方法 Laravel Frameworkインストール方法 Apr 18, 2025 pm 12:54 PM

記事の概要:この記事では、Laravelフレームワークを簡単にインストールする方法について読者をガイドするための詳細なステップバイステップの指示を提供します。 Laravelは、Webアプリケーションの開発プロセスを高速化する強力なPHPフレームワークです。このチュートリアルは、システム要件からデータベースの構成とルーティングの設定までのインストールプロセスをカバーしています。これらの手順に従うことにより、読者はLaravelプロジェクトのための強固な基盤を迅速かつ効率的に築くことができます。

初心者向けのMySQL:データベース管理を開始します 初心者向けのMySQL:データベース管理を開始します Apr 18, 2025 am 12:10 AM

MySQLの基本操作には、データベース、テーブルの作成、およびSQLを使用してデータのCRUD操作を実行することが含まれます。 1.データベースの作成:createdatabasemy_first_db; 2。テーブルの作成:createTableBooks(idintauto_incrementprimarykey、titlevarchary(100)notnull、authorvarchar(100)notnull、published_yearint); 3.データの挿入:InsertIntoBooks(タイトル、著者、公開_year)VA

MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 MySQLモードの問題を解決する問題:TheliamySQLModescheckerモジュールの使用経験 Apr 18, 2025 am 08:42 AM

Theliaを使用してeコマースWebサイトを開発するとき、私はトリッキーな問題に遭遇しました:MySQLモードが適切に設定されていないため、いくつかの機能が適切に機能しません。いくつかの調査の後、TheliamysQlModescheckerというモジュールを見つけました。これは、Theliaが必要とするMySQLパターンを自動的に修正できるため、問題を完全に解決できます。

See all articles