Natural Join (SQL): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
(Beispiel)
Zeile 44: Zeile 44:
 
|}
 
|}
  
Bei Bildung des Joins über die beiden Tabellen ergibt sich folgendes Bild.
+
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.
 
<code=sql>
 
<code=sql>
 
SELECT * FROM personentabelle NATURAL JOIN ortstabelle;
 
SELECT * FROM personentabelle NATURAL JOIN ortstabelle;
Zeile 76: Zeile 76:
 
Da es für München keine Person gibt wird dieser Eintrag nicht angezeigt.
 
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.
 +
<code=sql>
 +
SELECT * FROM personentabelle p, ortstabelle o WHERE p.Ort_ID = o.Ort_ID;
 +
</code=sql>
  
 
[[Kategorie:SQL]]
 
[[Kategorie:SQL]]

Version vom 24. November 2008, 11:30 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. <code=sql> SELECT * FROM tabelle1 NATURAL JOIN tabelle2; </code=sql>

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. <code=sql> SELECT * FROM personentabelle NATURAL JOIN ortstabelle; </code=sql>

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. <code=sql> SELECT * FROM personentabelle p, ortstabelle o WHERE p.Ort_ID = o.Ort_ID; </code=sql>