Die Angabe einer Join-Tabelle (joined_table) ist ein möglicher Bestandteil einer FROM TABLE-Spezifikation from_table_spec.
<joined_table> ::=
<from_table_spec> CROSS JOIN <from_table_spec>
| <from_table_spec> [INNER] JOIN <from_table_spec> <join_spec>
| <from_table_spec> [LEFT [OUTER] | RIGHT
[OUTER] | FULL [OUTER]] JOIN <from_table_spec> <join_spec>
<join_spec> ::= ON <search_condition>
Besteht eine FROM TABLE-Spezifikation aus einer Join-Tabelle, so wird das Ergebnis wie folgt erzeugt:
Sei FT1 die Menge aller Zeilen der Tabelle, die durch die erste FROM TABLE-Spezifikation angegeben wird. FT2 sei die Menge aller Zeilen der Tabelle, die durch die zweite FROM TABLE-Spezifikation angegeben wird.
● Wenn die Join-Tabelle als CROSS JOIN angegeben ist, wird eine Tabelle erzeugt, die aus allen möglichen Kombinationen von FT1 und FT2 besteht. Es wird also im mathematischen Sinn das kartesische Produkt beider Tabellen gebildet.
● Wenn die Join-Tabelle mit dem Schlüsselwort JOIN ohne Angabe der optionalen Schlüsselwörter INNER, LEFT, RIGHT, FULL oder OUTER angegeben wird, so wird als Join-Typ INNER angenommen.
Sei T die Menge von Ergebniszeilen, die aus allen möglichen Kombinationen von FT1 und FT2 besteht und für die gilt, dass jede Ergebniszeile die JOIN-Spezifikation join_spec erfüllt.
● Wenn die Join-Tabelle mit dem Join-Typ INNER angegeben wird, ist das Ergebnis die Menge T.
● Wenn die Join-Tabelle mit dem Join-Typ LEFT angegeben wird, ist das Ergebnis die Menge T ergänzt um jene Zeilen aus FT1, die nicht in T eingegangen sind. Die nicht aus FT1 gebildeten Ergebnisspalten erhalten den NULL-Wert.
● Wenn die Join-Tabelle mit dem Join-Typ RIGHT angegeben wird, ist das Ergebnis die Menge T ergänzt um jene Zeilen aus FT2, die nicht in T eingegangen sind. Die nicht aus FT2 gebildeten Ergebnisspalten erhalten den NULL-Wert.
● Wenn Join-Tabelle mit dem Join-Typ FULL angegeben wird, ist das Ergebnis die Menge T ergänzt um jene Zeilen, die durch die Join-Typen LEFT und RIGHT hinzugefügt werden.
Für die JOIN-Spezifikation ON <search_condition> gelten die für die WHERE-Bedingung angegebenen Regeln mit der Einschränkung, dass keine Verknüpfungen mit dem booleschen Operator OR zugelassen sind.
Siehe auch:
JOIN-Prädikat (join_predicate)
Änderbare Join-View-Tabelle (CREATE VIEW-Anweisung)
Join-View-Tabelle in INSERT-Anweisungen