内部結合の概要

内部結合は、2つ以上の表間の関連する列またはフィールドに適用される結合述語に基づいて、それらの表の行を結合して新しい行を生成する操作です。結果セットには、結合述語を満たす結合された行のみが含まれています。

概念的には、内部結合は次のように機能します:

3つの表(A、BおよびC)の内部結合を実行する必要があるとします。表AとBが最初に結合されます。つまり、表AにN個の行とn個の列があり、表BにM個の行とm個の列がある場合、表Aのすべての行が表Bのすべての行と結合されます。このため、結果の表ABには、(N * M)行と(n + m)列があります。同様に、表ABが表Cと結合され、表ABCを形成します。次に、WHERE句の結合述語が表ABCに適用されます。結合述語には、結合される表のすべてのシャード・キー列間の等価述語が含まれている必要があります。最終的な結果セットには、関連する表の一致する行のみが含まれています。

結合する表は、SELECT文のFROM句およびWHERE句の結合述語で指定します。結合述語は、結合する1つ以上の表の列またはフィールドを参照し、それらに適用する必要があるフィルタ条件を指定する述語です。内部結合の場合、WHERE句には、関連する表のすべてのシャード・キーに対する等価述語が含まれている必要があります。

SELECT句に「*」を使用すると、表内のすべてのフィールドが返されます。結果セット内のフィールドの順序は、FROM句で表を指定する順序によって異なります。SELECT句でフィールドのリストを指定した場合、結果セット内のフィールドの順序はSELECT句で指定された順序になります。

内部結合の実行中には、次のことが適用されます:
  • 同じ表階層内の表間の結合のみが許可されます。
  • 祖先と子孫の関係にある表と、祖先と子孫の関係にない表の結合がサポートされます。
  • 結合述語には、結合される表のすべてのシャード・キー列間の等価述語が含まれている必要があります。シャード・キーの詳細は、CREATE TABLEを参照してください。つまり、結合される表のペアで、一方の表の行がもう一方の表の行と一致するのは、両方の表のシャード・キー列が同じ値である場合のみです。シャード・キーを識別するには、DESCRIBE TABLE文を使用できます。
  • WHERE句の残りの述語は、これらの一致する行に適用されます。
内部結合は、主に次の点でNESTED TABLESおよび左外部結合とは異なります:
  • 内部結合は使用する表のシャード・キーの一致に基づきますが、NESTED TABLESと左外部結合は使用する表の主キーの一致に基づきます。
  • 内部結合の結果セットには、一致する行のみが含まれます。一方、NESTED TABLESおよび左外部結合の場合、左側の表の不一致行も結果セットに返され、右側の表の対応するNULL行が付加されます。
  • 内部結合を使用して、祖先と子孫の関係にない表を結合できます。これは、左外部結合およびNESTED_TABLESの場合は実行できません。詳細は、内部結合とLOJとNESTED TABLESの比較を参照してください。

基本的に、祖先と子孫の関係にある表は、3つのタイプの結合のいずれかを使用して結合できます。ユース・ケースに基づいていずれかを使用することを選択できます。結合する表が祖先と子孫の関係にない場合は、内部結合を使用する必要があります。