Philipp Hasenfratz: JOIN-Befehl?

Beitrag lesen

Halihallo Vinzenz

Als erstes: Gute Einführung, Vinzenz! Nachfolgend noch ein, zwei Anmerkungen.

Dramatisch vereinfachte Datenbankgrundlagen:

Datenbankgrundlagen in einem Posting zu verfassen impliziert bereits die
Unvollständigkeit :-)

T_CD natürlicher JOIN T_Inhalt -> T_Ergebnis
Den natürlichen JOIN erhälst Du mit folgender SELECT-Anweisung:

SELECT T_CD.*, T_Inhalt.Inhalt_ID, T_Inhalt.Songtitel
  FROM T_CD
    INNER JOIN T_Inhalt ON T_CD.CD_ID = T_Inhalt.CD_ID;

Wenn du schon natürlicher JOIN sagst, dann mach den auch:

SELECT T_CD.*, T_Inhalt.Inhalt_ID, T_Inhalt.Songtitel
   FROM T_CD NATURAL JOIN T_Inhalt

fertig. Dein Query ist zwar genau das selbe, aber länger (zudem kommt dort das Wort
NATURAL nicht vor)... Optional über einen Equi-Join (Join über Gleichwertigkeit von
Attributen).

SELECT T_CD.*, T_Inhalt.Inhalt_CD, T_Inhalt.Songtitel
   FROM T_CD JOIN T_Inhalt USING (CD_ID)

SELECT T_CD.*, T_Inhalt.Inhalt_ID, T_Inhalt.Songtitel
  FROM T_CD;

FROM T_CD, T_Inhalt    (nur der Vollständigkeitshalber)

Beim natürlichen JOIN taucht das Feld, über das die Verknüpfung realisiert ist, nur einmal auf. Nimmst Du alle Spalten aus T_CD und alle aus T_Inhalt, so hast Du den Equi-Join:

Was hat die Ausgabe der Spalten mit einem Equi-Join zu tun?

SELECT T_CD.*, T_Inhalt.*
  FROM T_CD
    INNER JOIN T_Inhalt ON T_CD.CD_ID = T_Inhalt.CD_ID;

USING statt ON, s. oben (deine Lösung ist zwar äquivalent, führt jedoch zu mehr
Tipparbeit)

Zum guten Schluss: Ist der Verknüpfungsoperator kein Gleichheitszeichen, so nennt man das einen Theta-Join (Beispiel denke Dir bitte selbst aus)

Nicht ganz. Ein Theta-Join _kann_, muss jedoch nicht ein Gleichheitszeichen haben. Es
sind alle Operatoren erlaubt. Beim Equi-Join wird das Gleichheitszeichen impliziert
(USING (Spalte) ist gleich ON t1.Spalte=t2.Spalte).

Prinzipiell wäre es nicht verkehrt, Dir irgendwoher ein vernünftiges Tutorial zu SQL zu besorgen. Leider weiß ich im Moment keinen Link zu sowas :-(

Ben: Im Archiv findest du einige.
Vielleicht gleich zu JOIN's: http://www.mysql.com/doc/en/JOIN.html, obwohl da
wohl etwas Grundwissen vorausgesetzt ist; aber zumindest die Syntax ist ersichtlich.

Viele Grüsse

Philipp

PS: Zu beachten ist, dass MySQL eine unvollständige Unterstützung für JOIN's hat. Einige
Möglichkeiten sind über mysql nur mit Theta-Verbund oder INNER JOIN umzusetzen. Auch
einige Queries, die ich hier gepostet habe, funktionieren möglicherweise nicht auf
MySQL.