ホームページ >データベース >mysql チュートリアル >テーブル間で一致するデータを効率的に取得する方法: 内部結合と結合?

テーブル間で一致するデータを効率的に取得する方法: 内部結合と結合?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-15 11:43:45666ブラウズ

How to Efficiently Retrieve Matching Data Across Tables: Inner Join vs. Union?

クロステーブルデータマッチングのための内部結合とユニオンの比較

複数のテーブル間で一致するデータを取得するには、多くの場合、データベース クエリ方法を慎重に検討する必要があります。 この記事では、このタスクでの INNER JOINUNION の使用を対比し、最も効果的なシナリオに焦点を当てます。

INNER JOIN vs. UNION

  • INNER JOIN: この操作は、指定された列の一致する値に基づいて 2 つ以上のテーブルの行をリンクします。結果セットには、結合されたすべてのテーブルに一致が存在する行のみが含まれます。
  • UNION: これは、2 つ以上の SELECT ステートメントの結果セットを 1 つの結果セットに結合し、重複する行を排除します。 結合されたステートメント内の列の数とデータ型が同一であることが重要です。

具体例

次の 2 つのテーブルについて考えます。

  • tbl_facilitators: ファシリテーター情報が含まれます。
  • tbl_facilitatorClasses: プライマリおよびセカンダリのファシリテーター ID を含むクラスの詳細が含まれます。

目的は、クラス名と、各クラスの主進行役と副進行役の両方の姓名を取得することです。

INNER JOIN 解決策

次のクエリは、INNER JOIN を使用してこれを実現します。

<code class="language-sql">SELECT
  tbl_facilitatorClasses.className,
  tbl_facilitators.facilLname AS primary_facilitator_lname,
  tbl_facilitators.facilFname AS primary_facilitator_fname,
  tbl_facilitators2.facilLname AS secondary_facilitator_lname,
  tbl_facilitators2.facilFname AS secondary_facilitator_fname
FROM tbl_facilitatorClasses
INNER JOIN tbl_facilitators
  ON tbl_facilitatorClasses.primeFacil = tbl_facilitators.facilID
INNER JOIN tbl_facilitators AS tbl_facilitators2
  ON tbl_facilitatorClasses.secondFacil = tbl_facilitators2.facilID;</code>

このクエリは、tbl_facilitatorClassestbl_facilitators を 2 回効率的に結合し (2 回目の結合にエイリアスを使用)、プライマリ ファシリテーターとセカンダリ ファシリテーターの両方に必要な情報を単一の構造化された結果で取得します。

UNION 制限事項

UNION 操作はこのシナリオには適していません。 UNION では、データを大幅に再構築する必要があり、結果の効率性と可読性が低下し、各クラスに必要な結合された行構造が提供されません。

結論

この例で示すように、一致する列値に基づいて複数のテーブルから関連データを取得する場合、INNER JOIN と比較して UNION の方がはるかに適切かつ効率的な選択肢です。 UNION は、リレーショナル キーに基づいてデータを結合するのではなく、類似のクエリからの個別の結果セットを結合するのに適しています。

以上がテーブル間で一致するデータを効率的に取得する方法: 内部結合と結合?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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