Chris Hunter
SQL:Joins
So ich erbarme mich mal und schreibe auch mal ein Tutorial für mein Lieblingsforum.
Mein zweites glaub ich ... *grübel*->egal
Worum gehts: Um JOINS
Wofür braucht man diese JOINS. Nun manchmal kommt es vor das man Daten aus
zwei verschiedenen Tabellen SELECTen muss. Dafür müssen wir beide Tabellen JOINen.
Tabellen innerhalb der Datenbank kann man mit einander verknüpfen. Um die Relationen
darzustellen verwendet man IDs oder sog. Schlüssel. Es ist sinvoll diese "Verknüpferchen"
in der DB-Struktur mit einem Index auszustatten, sonst kann das SELECT bei wachsendem
Datenvolumen schon ein wenig langsam werden. Ich sag gerne "verbottelnecken"
Nehmen wir einmal ein Beispiel zur Hand um den Sinn und Zweck dieser Verknüpfungen zu verstehen:
Wir haben zum Beispiel in einer Bildergallerie eine Tabelle:
gallerie
Mit folgenden Feldern
gal_id
beschreibung
Kategorie
ect.
In dieser Gallerietabelle halten wir die Eigenschaften einer jeder Gallerie fest.
So jetzt gibt es noch eine Tabelle:
pic
Mit folgenden Feldern
pic_id
gal_id
dateiname
beschreibung
datum
ect.
Oben habe ich geschrieben das wir Tabellen mit IDs verknüpfen. Die Verknüpfung
passiert über das Feld gal_id. Hier verbinden wir beide Tabellen damit wir nicht
in jedem Bilddatensatz die kompletten Galleriedaten mitschreiben müssen, denn
das wäre unnötiger Speicherplatz den wir belegen.
Also:
"gal_id" ist der Primärschlüssel der Tabelle gallerie und die Verknüpfung in der Tabelle pic
"pic_id" ist der Primärschlüssel der Tabelle pic
Die "gal_id" in der Tabelle pic wird verwendet um beide Tabellen zu verknüpfen.
So und jetzt RAN!
Zwei Tabellen verknüpfen OHNE JOIN
Wir können die Daten beider Tabellen SELECTieren in dem wir sie in Relation setzen:
Beispiel:
Welche Gallerien mit Inhalt gibt es und welche Bilder sind darin?
Ups? War ja gar kein JOIN???!?!?? Und was ist dieses AS?
Mit dem AS definiert man einen Alias für den gefundenen Wert. Also aus der
Galleriebeschriftung wird gal_text und für die Bilderbeschriftung wird pic_text.
Das braucht man, weil ja in beiden Tabellen ein Wert beschriftung existiert.
Mit dem AS sorgt man dann für ein Besseres Verständnis wenn es darum geht mit
den Ergebnissen des Querys zu arbeiten.
Das obige Beispiel kam jetzt ohne JOIN aus.Wir können die Daten auch mit
einem INNER JOIN selecten:
So wird die Verknüpfung schon deutlicher als im vorherigen Beispiel.
Beide SELECTS sind möglich. Und bringen das gleiche Ergebnis.
HINWEIS:
Der INNER JOIN gibt alle Zeilen von beiden Tabellen aus bei denen eine
Übereinstimmung gefunden wird. Gibt es Datensätze in der Tabelle gallerie der
über die gal_id keine DAtensätze der Tabelle pic zugeordnet sind, wird diese
nicht ausgegeben!!!
Verwenden von LEFT JOIN
Beispiel:
Zeige alle Gallerien und die enthaltenen Bilder, wenn es welche gibt.
HINWEIS:
Das LEFT JOIN gibt alle Zeilen der Tabelle gallerie zurück,
auch wenn hierzu keine passenden Datensätze in der Tabelle pic gefunden wurden.
Verwenden von RIGHT JOIN
Beispiel:
Zeige alle Bilder, und in welcher Gallerie Sie sind, wenn Sie in einer Gallerie sind.
HINWEIS:
Das RIGHT JOIN gibt alle Zeilen der pic Tabelle zurück, auch wenn hierzu kein
passender Datensatz in der gallerie Tabelle gefunden wurde.
So, noch Fragen?
So ich erbarme mich mal und schreibe auch mal ein Tutorial für mein Lieblingsforum.
Mein zweites glaub ich ... *grübel*->egal
Worum gehts: Um JOINS
Wofür braucht man diese JOINS. Nun manchmal kommt es vor das man Daten aus
zwei verschiedenen Tabellen SELECTen muss. Dafür müssen wir beide Tabellen JOINen.
Tabellen innerhalb der Datenbank kann man mit einander verknüpfen. Um die Relationen
darzustellen verwendet man IDs oder sog. Schlüssel. Es ist sinvoll diese "Verknüpferchen"
in der DB-Struktur mit einem Index auszustatten, sonst kann das SELECT bei wachsendem
Datenvolumen schon ein wenig langsam werden. Ich sag gerne "verbottelnecken"
Nehmen wir einmal ein Beispiel zur Hand um den Sinn und Zweck dieser Verknüpfungen zu verstehen:
Wir haben zum Beispiel in einer Bildergallerie eine Tabelle:
gallerie
Mit folgenden Feldern
gal_id
beschreibung
Kategorie
ect.
In dieser Gallerietabelle halten wir die Eigenschaften einer jeder Gallerie fest.
So jetzt gibt es noch eine Tabelle:
pic
Mit folgenden Feldern
pic_id
gal_id
dateiname
beschreibung
datum
ect.
Oben habe ich geschrieben das wir Tabellen mit IDs verknüpfen. Die Verknüpfung
passiert über das Feld gal_id. Hier verbinden wir beide Tabellen damit wir nicht
in jedem Bilddatensatz die kompletten Galleriedaten mitschreiben müssen, denn
das wäre unnötiger Speicherplatz den wir belegen.
Also:
"gal_id" ist der Primärschlüssel der Tabelle gallerie und die Verknüpfung in der Tabelle pic
"pic_id" ist der Primärschlüssel der Tabelle pic
Die "gal_id" in der Tabelle pic wird verwendet um beide Tabellen zu verknüpfen.
So und jetzt RAN!
Zwei Tabellen verknüpfen OHNE JOIN
Wir können die Daten beider Tabellen SELECTieren in dem wir sie in Relation setzen:
Beispiel:
Welche Gallerien mit Inhalt gibt es und welche Bilder sind darin?
|
||||
Ups? War ja gar kein JOIN???!?!?? Und was ist dieses AS?
Mit dem AS definiert man einen Alias für den gefundenen Wert. Also aus der
Galleriebeschriftung wird gal_text und für die Bilderbeschriftung wird pic_text.
Das braucht man, weil ja in beiden Tabellen ein Wert beschriftung existiert.
Mit dem AS sorgt man dann für ein Besseres Verständnis wenn es darum geht mit
den Ergebnissen des Querys zu arbeiten.
Das obige Beispiel kam jetzt ohne JOIN aus.Wir können die Daten auch mit
einem INNER JOIN selecten:
|
||||
So wird die Verknüpfung schon deutlicher als im vorherigen Beispiel.
Beide SELECTS sind möglich. Und bringen das gleiche Ergebnis.
HINWEIS:
Der INNER JOIN gibt alle Zeilen von beiden Tabellen aus bei denen eine
Übereinstimmung gefunden wird. Gibt es Datensätze in der Tabelle gallerie der
über die gal_id keine DAtensätze der Tabelle pic zugeordnet sind, wird diese
nicht ausgegeben!!!
Verwenden von LEFT JOIN
Beispiel:
Zeige alle Gallerien und die enthaltenen Bilder, wenn es welche gibt.
|
||||
HINWEIS:
Das LEFT JOIN gibt alle Zeilen der Tabelle gallerie zurück,
auch wenn hierzu keine passenden Datensätze in der Tabelle pic gefunden wurden.
Verwenden von RIGHT JOIN
Beispiel:
Zeige alle Bilder, und in welcher Gallerie Sie sind, wenn Sie in einer Gallerie sind.
|
||||
HINWEIS:
Das RIGHT JOIN gibt alle Zeilen der pic Tabelle zurück, auch wenn hierzu kein
passender Datensatz in der gallerie Tabelle gefunden wurde.
So, noch Fragen?