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

巴扎黑
リリース: 2017-05-10 13:24:37
オリジナル
2505 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!