Natural Join (SQL): Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: Der Natural Join ist eine Erweiterung des Cross Joins, dabei wird automatisch die Ergebnismenge der beiden Tabellen gefiltert. Diese Einschrän...) |
K |
||
(6 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Der Natural Join ist eine Erweiterung des [[Cross | + | Der Natural Join ist eine Erweiterung des [[Cross Join (SQL) | Cross Joins]], dabei wird automatisch die Ergebnismenge der beiden [[Tabelle (SQL) | Tabellen]] gefiltert. Diese Einschränkung basiert auf gleichen Spaltennamen. |
+ | ===Syntax=== | ||
+ | Verbunden werden die beiden Tabellen mit den Schlüsselwörtern '''NATURAL JOIN'''. | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | SELECT * FROM tabelle1 NATURAL JOIN tabelle2; | ||
+ | </syntaxhighlight> | ||
+ | ===Beispiel=== | ||
+ | Tabelle 1 - Personentabelle: | ||
+ | {| {{Prettytable}} | ||
+ | ! Person_ID | ||
+ | ! Name | ||
+ | ! Ort_ID | ||
+ | |- | ||
+ | | 1 | ||
+ | | person1 | ||
+ | | 1 | ||
+ | |- | ||
+ | | 2 | ||
+ | | person2 | ||
+ | | 1 | ||
+ | |- | ||
+ | | 3 | ||
+ | | person3 | ||
+ | | 2 | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | Tabelle 2 - Ortstabelle: | ||
+ | {| {{Prettytable}} | ||
+ | ! Ort_ID | ||
+ | ! Ortsname | ||
+ | |- | ||
+ | | 1 | ||
+ | | Berlin | ||
+ | |- | ||
+ | | 2 | ||
+ | | Hamburg | ||
+ | |- | ||
+ | | 3 | ||
+ | | München | ||
+ | |- | ||
+ | |} | ||
+ | |||
+ | Bei Bildung des Joins über die beiden Tabellen, werden die Spalten ''Ort_ID'' verbunden und somit ergibt sich folgendes Bild. Gäbe es noch mehr gleichnamige Spalten würden diese auch verwendet werden. | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | SELECT * FROM personentabelle NATURAL JOIN ortstabelle; | ||
+ | </syntaxhighlight> | ||
+ | {| {{Prettytable}} | ||
+ | ! Person_ID | ||
+ | ! Name | ||
+ | ! Ort_ID | ||
+ | ! Ort_ID | ||
+ | ! Ortsname | ||
+ | |- | ||
+ | | 1 | ||
+ | | person1 | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | Berlin | ||
+ | |- | ||
+ | | 2 | ||
+ | | person2 | ||
+ | | 1 | ||
+ | | 1 | ||
+ | | Berlin | ||
+ | |- | ||
+ | | 3 | ||
+ | | person3 | ||
+ | | 2 | ||
+ | | 2 | ||
+ | | Hamburg | ||
+ | |} | ||
+ | |||
+ | Da es für München keine Person gibt wird dieser Eintrag nicht angezeigt. | ||
+ | |||
+ | ==Alternativen== | ||
+ | Eine Alternative zum Natural Join ist der Cross Join mit einer Beschränkung der Ergebnisse. Hier wird die Menge des [[Kartesische Produkt | kartesischen Produkts]] durch die '''WHERE''' Bedingung so eingegrenzt das es nur die Elemente zulässt wo die beiden IDs gleich sind. | ||
+ | <syntaxhighlight lang="sql"> | ||
+ | SELECT * FROM personentabelle p, ortstabelle o WHERE p.Ort_ID = o.Ort_ID; | ||
+ | </syntaxhighlight> | ||
[[Kategorie:SQL]] | [[Kategorie:SQL]] |
Aktuelle Version vom 2. April 2018, 14:43 Uhr
Der Natural Join ist eine Erweiterung des Cross Joins, dabei wird automatisch die Ergebnismenge der beiden Tabellen gefiltert. Diese Einschränkung basiert auf gleichen Spaltennamen.
Syntax
Verbunden werden die beiden Tabellen mit den Schlüsselwörtern NATURAL JOIN.
SELECT * FROM tabelle1 NATURAL JOIN tabelle2;
Beispiel
Tabelle 1 - Personentabelle:
Person_ID | Name | Ort_ID |
---|---|---|
1 | person1 | 1 |
2 | person2 | 1 |
3 | person3 | 2 |
Tabelle 2 - Ortstabelle:
Ort_ID | Ortsname |
---|---|
1 | Berlin |
2 | Hamburg |
3 | München |
Bei Bildung des Joins über die beiden Tabellen, werden die Spalten Ort_ID verbunden und somit ergibt sich folgendes Bild. Gäbe es noch mehr gleichnamige Spalten würden diese auch verwendet werden.
SELECT * FROM personentabelle NATURAL JOIN ortstabelle;
Person_ID | Name | Ort_ID | Ort_ID | Ortsname |
---|---|---|---|---|
1 | person1 | 1 | 1 | Berlin |
2 | person2 | 1 | 1 | Berlin |
3 | person3 | 2 | 2 | Hamburg |
Da es für München keine Person gibt wird dieser Eintrag nicht angezeigt.
Alternativen
Eine Alternative zum Natural Join ist der Cross Join mit einer Beschränkung der Ergebnisse. Hier wird die Menge des kartesischen Produkts durch die WHERE Bedingung so eingegrenzt das es nur die Elemente zulässt wo die beiden IDs gleich sind.
SELECT * FROM personentabelle p, ortstabelle o WHERE p.Ort_ID = o.Ort_ID;