SQL Serverでは、一致する行に加えて、一方または両方のテーブルから一致しない行を取得する必要がある場合があります。 このような操作は外部結合と呼ばれます。
例1および2は、自然結合と対応する外部結合の違いを示しています。 (このセクションのすべての例では、employee_enhテーブルを使用します。,)
例1
同じ都市に住んでいて働いている部門の場所を含むすべての従業員の完全な詳細を取得します。
結果は次のとおりです。
例1では、自然結合を使用して行の結果セットを表示します。 従業員の他の既存の住んでいる場所をすべて知りたい場合は、(左)外部結合を使用する必要があります。 これは、右側のテーブルに一致する行があるかどうかにかかわらず、演算子の左側のテーブルのすべての行が返されるため、左外部結合と呼ばれます。, つまり、右側のテーブルに一致する行がない場合でも、外部結合は左側のテーブルから行を返し、他のテーブルの各列にNULLを返します(例2を参照)。 データベースエンジンでは、左外部結合の演算子を使用して、左外部結合を指定します。
右外部結合は似ていますが、シンボルの右側にあるテーブルのすべての行を返します。 データベースエンジンでは、右外部結合を指定するために演算子RIGHT OUTER JOINを使用します。,
例2
すべての従業員の詳細を取得します。
結果は次のようになります。
一致する行がない場合、ご覧のとおり、一致する行がない場合は、
ご覧のとおり、一致する行がない場合右側のテーブル(この場合はdepartment)では、左外部結合は左側のテーブル(employee_enh)の行を返し、もう一方のテーブルの列にはnull値が設定されます。, 例3は、右外部結合操作の使用方法を示しています。
例3
部門の場所または従業員の居住および職場のいずれかであるすべての都市について、すべての部門および従業員のすべての居住場所の完全な詳細を取得します。
結果は次のとおりです。
左右に加えて、外部結合には、左外部結合と右外部結合の和集合として定義される完全外部結合もあります。 つまり、両方のテーブルのすべての行が結果セットで表されます。, いずれかのテーブルに対応する行がない場合、その列はNULL値で返されます。 この操作は、FULL OUTER JOIN演算子を使用して指定します。
すべての外部結合操作は、UNION演算子とNOT EXISTS関数を使用してシミュレートできます。 例4は、左外部結合を持つ例と同じです(例2)。,
例4
居住場所のみ、または従業員の居住場所と作業場所の両方であるすべての都市について、部門の場所を含むすべての従業員の完全な詳細を取得します。
unionの最初のSELECTステートメントは、結合列domicileとlocationを持つemployee_enhテーブルとdepartmentテーブルの自然結合を指定します。 このSELECTステートメントは、各従業員の居住場所と作業場所を同時に取得するすべての都市を取得します。, Union内の第二のSELECTステートメントは、さらに、employee_enhテーブルから、自然結合の条件に一致しないすべての行を取得します。