検索
ホームページデータベースmysql チュートリアル詳しい理解 ---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 はサブクエリ内の値と等しくない
>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 サイトの他の関連記事を参照してください。

声明
この記事はsinaで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
酸性の特性(原子性、一貫性、分離、耐久性)を説明します。酸性の特性(原子性、一貫性、分離、耐久性)を説明します。Apr 16, 2025 am 12:20 AM

酸性属性には、原子性、一貫性、分離、耐久性が含まれ、データベース設計の基礎です。 1.原子性は、トランザクションが完全に成功するか、完全に失敗することを保証します。 2.一貫性により、データベースがトランザクションの前後に一貫性を保証します。 3.分離により、トランザクションが互いに干渉しないようにします。 4.永続性により、トランザクションの提出後にデータが永久に保存されることが保証されます。

MySQL:データベース管理システムとプログラミング言語MySQL:データベース管理システムとプログラミング言語Apr 16, 2025 am 12:19 AM

MySQLは、データベース管理システム(DBMS)であるだけでなく、プログラミング言語にも密接に関連しています。 1)DBMSとして、MySQLはデータを保存、整理、取得するために使用され、インデックスを最適化するとクエリのパフォーマンスが向上する可能性があります。 2)SQLとPythonに埋め込まれたプログラミング言語とSQLalchemyなどのORMツールを使用すると、操作を簡素化できます。 3)パフォーマンスの最適化には、インデックス、クエリ、キャッシュ、ライブラリ、テーブル分割、およびトランザクション管理が含まれます。

MySQL:SQLコマンドでデータの管理MySQL:SQLコマンドでデータの管理Apr 16, 2025 am 12:19 AM

MySQLはSQLコマンドを使用してデータを管理します。 1.基本コマンドには、select、挿入、更新、削除が含まれます。 2。高度な使用には、参加、サブクエリ、および集計関数が含まれます。 3.一般的なエラーには、構文、ロジック、パフォーマンスの問題が含まれます。 4。最適化のヒントには、インデックスの使用、Select*の回避、制限の使用が含まれます。

MySQLの目的:データを効果的に保存および管理しますMySQLの目的:データを効果的に保存および管理しますApr 16, 2025 am 12:16 AM

MySQLは、データの保存と管理に適した効率的なリレーショナルデータベース管理システムです。その利点には、高性能クエリ、柔軟なトランザクション処理、豊富なデータ型が含まれます。実際のアプリケーションでは、MySQLはeコマースプラットフォーム、ソーシャルネットワーク、コンテンツ管理システムでよく使用されますが、パフォーマンスの最適化、データセキュリティ、スケーラビリティに注意を払う必要があります。

SQLとMySQL:関係を理解するSQLとMySQL:関係を理解するApr 16, 2025 am 12:14 AM

SQLとMySQLの関係は、標準言語と特定の実装との関係です。 1.SQLは、リレーショナルデータベースの管理と操作に使用される標準言語であり、データの追加、削除、変更、クエリを可能にします。 2.MYSQLは、SQLを運用言語として使用し、効率的なデータストレージと管理を提供する特定のデータベース管理システムです。

Innodb Redoログの役割を説明し、ログを元に戻します。Innodb Redoログの役割を説明し、ログを元に戻します。Apr 15, 2025 am 12:16 AM

INNODBは、レドログと非論的なものを使用して、データの一貫性と信頼性を確保しています。 1.レドログは、クラッシュの回復とトランザクションの持続性を確保するために、データページの変更を記録します。 2.Undologsは、元のデータ値を記録し、トランザクションロールバックとMVCCをサポートします。

説明出力(タイプ、キー、行、追加)で探す重要なメトリックは何ですか?説明出力(タイプ、キー、行、追加)で探す重要なメトリックは何ですか?Apr 15, 2025 am 12:15 AM

説明コマンドのキーメトリックには、タイプ、キー、行、および追加が含まれます。 1)タイプは、クエリのアクセスタイプを反映しています。値が高いほど、constなどの効率が高くなります。 2)キーは使用されているインデックスを表示し、nullはインデックスがないことを示します。 3)行はスキャンされた行の数を推定し、クエリのパフォーマンスに影響します。 4)追加の情報を最適化する必要があるというFilesortプロンプトを使用するなど、追加情報を提供します。

説明の一時的なステータスを使用し、それを回避する方法は何ですか?説明の一時的なステータスを使用し、それを回避する方法は何ですか?Apr 15, 2025 am 12:14 AM

Temporaryを使用すると、MySQLクエリに一時テーブルを作成する必要があることが示されています。これは、異なる列、またはインデックスされていない列を使用して順番に一般的に見られます。インデックスの発生を回避し、クエリを書き直し、クエリのパフォーマンスを改善できます。具体的には、expliect出力に使用を使用する場合、MySQLがクエリを処理するために一時テーブルを作成する必要があることを意味します。これは通常、次の場合に発生します。1)個別またはグループビーを使用する場合の重複排除またはグループ化。 2)Orderbyに非インデックス列が含まれているときに並べ替えます。 3)複雑なサブクエリを使用するか、操作に参加します。最適化方法には以下が含まれます。1)OrderbyとGroupB

See all articles

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境