ホームページ データベース mysql チュートリアル MySQL で WHERE 句を使用して複数のテーブルを結合する方法

MySQL で WHERE 句を使用して複数のテーブルを結合する方法

May 10, 2017 pm 01:24 PM

WHERE 句の重要性

結合関係を確立するために WHERE 句を使用するのは少し奇妙に思えるかもしれませんが、実際には十分な理由があります。 SELECT ステートメントで複数のテーブルを結合する場合、対応するリレーションシップがその場で構築されることに注意してください。データベース テーブルの定義には、MySQL にテーブルの結合方法を指示するものは何もありません。これは自分で行う必要があります。 2 つのテーブルを結合する場合、実際に行っていることは、最初のテーブルのすべての行と 2 番目のテーブルのすべての行をペアにすることです。 WHERE 句はフィルターとして機能し、指定された条件 (ここでは結合条件) に一致する行のみが含まれます。 WHERE 句を使用しない場合、最初のテーブルのすべての行は、論理的に適合するかどうかに関係なく、2 番目のテーブルのすべての行とペアになります。

デカルト積 結合条件のないテーブル リレーションシップによって返される結果は、デカルト積です。取得される行数は、最初のテーブルの行数と 2 番目のテーブルの行数を乗算したものになります。

入力:

select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;
ログイン後にコピー

分析: 対応するデカルト積は、私たちが望むものではありません。ここで返されるデータは各製品と各サプライヤーを照合しており、誤ったサプライヤーからの

製品が含まれています。実際、サプライヤーの中には製品をまったく持っていないところもあります。

WHERE 句を忘れないでください。すべての結合に WHERE 句があることを確認してください。そうしないと、MySQL は必要以上のデータを返します。同様に、WHERE 句の正確性も保証する必要があります。フィルター条件が正しくないと、MySQL は間違ったデータを返します。

クロス結合 クロス結合と呼ばれる、デカルト積を返す結合タイプを耳にすることがあります。

内部結合

これまでに使用された結合は等結合と呼ばれ、2 つのテーブル間の等価性テストに基づいています。この接続は内部接続とも呼ばれます。実際には、この種の結合には少し異なる構文を使用して、結合の種類を明示的に指定できます。次の SELECT ステートメントは、前の例とまったく同じデータを返します。

入力:

select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id = products.vend_id;
ログイン後にコピー

分析: このステートメントの SELECT は前の SELECT ステートメントと同じですが、FROM 句が異なります。ここで、2 つのテーブル間の関係は FROM 句の一部であり、INNERJOIN で指定されています。この構文を使用する場合、結合条件は WHERE 句ではなく特定の ON 句で指定されます。 ON に渡される実際の条件は、WHERE に渡される条件と同じです。

どの構文を使用するか? ANSI SQL 仕様では INNER JOIN 構文が推奨されます。さらに、WHERE 句を使用して結合を定義する方が確かに簡単ですが、明示的な結合構文を使用すると、パフォーマンスに影響を与える可能性がある結合条件が忘れられることがなくなります。


複数のテーブルを結合する

SQL では、SELECT ステートメントで結合できるテーブルの数に制限はありません。結合を作成するための基本的なルールは同じです。まずすべてのテーブルをリストし、次にテーブル間の関係を定義します。例:

入力:

select prod_name,vend_name,prod_price,quantity from orderitems,products,vendors where products.vend_id = vendors.vend_id and orderitems.prod_id = products.products.prod_id and order_num = 20005;
ログイン後にコピー

出力:

MySQL で WHERE 句を使用して複数のテーブルを結合する方法

分析: この例は、注文番号 20005 の品目を示しています。注文アイテムは orderitem テーブルに保存されます。各製品は製品 ID によって保存され、製品テーブル内の製品を参照します。これらの製品は、各製品のレコードに保存されているベンダー ID を介して、ベンダー テーブル内の対応するベンダーにリンクされています。ここの FROM 句は 3 つのテーブルをリストし、WHERE 句はこれら 2 つの結合条件を定義し、3 番目の結合条件は 20005 番目の項目をフィルタリングするために使用されます。

パフォーマンスに関する考慮事項 MySQL は、実行時に結合を処理するために指定された各テーブルを関連付けます。この処理はリソースを非常に消費する可能性があるため、不必要なテーブルを結合しないように注意する必要があります。結合するテーブルが増えるほど、パフォーマンスの低下が大きくなります。

さらに実験してみる ご覧のとおり、通常、特定の SQL 操作を実行するには複数の方法があります。絶対に正しい方法や絶対に間違った方法があることはほとんどありません。パフォーマンスは、操作のタイプ、テーブル内のデータ量、インデックスまたはキーの存在、およびその他のいくつかの条件によって影響を受ける可能性があります。したがって、さまざまな選択メカニズムを試して、特定の状況に最適なものを見つける必要があります。

【関連おすすめ】

1. mysqlサブクエリとは何ですか?サブクエリを使用してフィルタリングするにはどうすればよいですか?

2.mysql はサブクエリを使用して計算フィールドを作成します

3.mysql の結合とリレーショナル テーブルとは何ですか?

4. コネクションを使用する理由とコネクションの作成方法

以上がMySQL で WHERE 句を使用して複数のテーブルを結合する方法の詳細内容です。詳細については、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? PHP を使用して MySQL テーブルを作成するにはどうすればよいですか? Jun 04, 2024 pm 01:57 PM

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracleデータベースとmysqlの違い Oracleデータベースとmysqlの違い May 10, 2024 am 01:54 AM

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。

See all articles