クロステーブルデータマッチングのための内部結合とユニオンの比較
複数のテーブル間で一致するデータを取得するには、多くの場合、データベース クエリ方法を慎重に検討する必要があります。 この記事では、このタスクでの INNER JOIN
と UNION
の使用を対比し、最も効果的なシナリオに焦点を当てます。
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_facilitatorClasses
と tbl_facilitators
を 2 回効率的に結合し (2 回目の結合にエイリアスを使用)、プライマリ ファシリテーターとセカンダリ ファシリテーターの両方に必要な情報を単一の構造化された結果で取得します。
UNION
制限事項
UNION
操作はこのシナリオには適していません。 UNION
では、データを大幅に再構築する必要があり、結果の効率性と可読性が低下し、各クラスに必要な結合された行構造が提供されません。
結論
この例で示すように、一致する列値に基づいて複数のテーブルから関連データを取得する場合、INNER JOIN
と比較して UNION
の方がはるかに適切かつ効率的な選択肢です。 UNION
は、リレーショナル キーに基づいてデータを結合するのではなく、類似のクエリからの個別の結果セットを結合するのに適しています。
以上がテーブル間で一致するデータを効率的に取得する方法: 内部結合と結合?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。