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.