この記事では、SQL結合:内側、左、右、完全な外側、クロス結合について説明します。機能、ユースケース、パフォーマンスへの影響を詳しく説明しています。適切な結合タイプを選択することは、片側または両方のタブからすべての行が必要かどうかによって異なります
さまざまな種類のSQLが結合します
SQL結合は、それらの間の関連列に基づいて2つ以上のテーブルから行を組み合わせるために使用されます。いくつかのタイプの結合が存在し、それぞれが異なる目的を果たしています:
LEFT JOIN
前に指定されたテーブル)からすべての行が返されます。右のテーブルに一致する左のテーブルの行の場合、右のテーブルからの対応する列が含まれています。一致しない場合、右のテーブルの列にNULL
値があります。LEFT JOIN
の鏡像です。左のテーブルに一致がない場合でも、右のテーブルからすべての行を返します。左のテーブルから一致する行が含まれています。それ以外の場合、左のテーブル列にはNULL
値があります。NULL
値があります。これは、一致に関係なく、両方のテーブルからのすべてのデータを示す最も包括的な結果を提供します。JOIN
条件の指定を忘れた場合、それはしばしば意図せずに使用されます。左結合と内側の結合を選択します
左のテーブルからすべての行を取得し、右のテーブルから一致する行を含める必要がある場合は、 INNER JOIN
の代わりにLEFT JOIN
を使用する必要がありますが、右のテーブルに一致していない場合でも、左のテーブルから行を表示する必要があります。
たとえば、 Customers
テーブルとOrders
テーブルがあると想像してください。 INNER JOIN
、注文を行った顧客のみを返します。 LEFT JOIN
すべての顧客を返し、注文がある場合は注文を表示し、注文の詳細については、注文のNULL
を確認していない場合が表示されます。これにより、すべての顧客の完全な写真とその注文ステータスを見ることができます。 LEFT JOIN
、一方のマッチに関係なく、一方のテーブルからすべてのデータを保存する必要がある場合に重要です。
完全な外側結合と左右の結合
FULL OUTER JOIN
LEFT JOIN
とRIGHT JOIN
の両方の結果を組み合わせます。左と右のテーブルの両方からすべての行を返します。結合条件に基づいて行が一致する場合、対応する列が含まれています。 1つのテーブルに一致しない場合、そのテーブルの列にはNULL
値が含まれます。
左LEFT JOIN
には左のテーブルからのすべての行のみが含まれ、 RIGHT JOIN
には右のテーブルからのすべての行のみが含まれます。 FULL OUTER JOIN
最も包括的であり、どちらのテーブルからもデータが失われないようにします。対応するエントリがあるかどうかに関係なく、両方のテーブルからのデータの完全な画像が必要な場合に特に便利です。ただし、すべてのデータベースシステムがFULL OUTER JOIN
をサポートしているわけではないことに注意してください。
さまざまな結合タイプのパフォーマンスへの影響
さまざまな結合タイプのパフォーマンスは大きく異なり、テーブルのサイズ、インデックス作成戦略、および使用されているデータベースシステムに大きく依存します。
INNER JOIN
は最も効率的であり、特に結合列に適切なインデックスがあります。データベースは、一致する行をすばやく識別することにより、クエリを最適化できます。INNER JOIN
より効率が低くなります。 NULL
値の処理もオーバーヘッドを追加します。適切なインデックス作成は、このパフォーマンスへの影響を大幅に軽減できます。CROSS JOIN
ESは一般に最も効率的ではありません。なぜなら、それらはデカルト製品を作成し、元のテーブルよりも大幅に大きい結果セットをもたらすからです。これは計算上の高価であり、絶対に必要でない限り避けるべきです。結合列のインデックス付け、適切なクエリヒントを使用した、テーブル構造の最適化などの最適化戦略は、すべての結合タイプのパフォーマンスを改善するために重要ですが、特にLEFT
、 RIGHT
、 FULL OUTER JOIN
Sでは結合タイプの選択は、完全なデータとパフォーマンスの考慮事項の必要性と常にバランスをとる必要があります。
以上がSQL(内側、左、右、フル、クロス)の結合のさまざまなタイプは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。