BEISPIEL
Kapitel 8: SQL in Theorie und Praxis
Abbildung 8.31 Abfrageergebnis
Die vorhergehend gezeigte Anweisung liefert z.B. nur einmal den Ort »Buenos Aires«, obwohl mehrere Ein-
träge in der Tabelle abgespeichert sind. Die Datenbasis ist schreibgeschützt.
Im Gegensatz dazu werden bei
SELECT DISTINCTROW Ort
...
nur die mehrfach auftretenden Datensätze unterdrückt, d.h. diejenigen, bei denen alle Feldinhalte überein-
stimmen. Im Fall einer Kundentabelle wären dies, was höchst unwahrscheinlich ist, alle Einträge, bei denen
auch noch Firma, Kontaktperson, Funktion etc. identisch sind. Die Abfrage kann editiert werden. Von
Bedeutung ist DISTINCTROW vor allem bei Abfragen über mehrere Tabellen.
Tabellen verknüpfen
Geht es um das Verknüpfen von Tabellen und deren Realisierung in SQL, stehen Ihnen zwei Varianten zur
Verfügung. Zum einen bietet sich die WHERE-Klausel an, zum anderen können Sie die JOIN-Operatoren
verwenden.
Suchen aller Artikel, die Ihnen eine gewisse Petra Winkler »verhökert« hat.
SELECT
ArtikelNr, Artikelname, Firma, Liefereinheit, Einzelpreis
FROM
Artikel, Lieferanten
WHERE
(Artikel.LieferantenNr = Lieferanten.LieferantenNr) AND
(Lieferanten.Kontaktperson= 'Petra Winkler')
Abbildung 8.32 Abfrageergebnis
442
BEISPIEL
BEISPIEL
Nehmen wir die SQL-Anweisung einmal »auseinander«. Gesucht wird die Kontaktperson »Petra Winkler«.
Das Ergebnis dieser Suche ist ein einzelner Datensatz mit der Lieferantennummer 11. Dieses Ergebnis wird
mit der Bedingung (Artikel.LieferantenNr = Lieferanten.LieferantenNr) UND-verknüpft (AND).
Sie möchten
alle
Artikel und (falls vorhanden) die dazugehörigen Bestellungen ausgeben.
Mit der Anweisung
SELECT
Artikel.Artikelname,
Bestelldetails.Anzahl
FROM
Artikel, Bestelldetails
WHERE
Artikel.ArtikelNr = Bestelldetails.ArtikelNr;
werden jedoch nur die Artikel angezeigt, zu denen auch Bestellungen existieren.
Eine Lösungsmöglichkeit ist der LEFT-/RIGHT-JOIN.
Verknüpfen mit LEFT-JOIN/RIGHT-JOIN
Befinden sich in der »linken« Tabelle Datensätze, zu denen kein Datensatz in der »rechten« Tabelle gehört,
werden die Datensätze trotzdem angezeigt. Die »leeren« Felder werden mit NULL-Werten aufgefüllt.
Abfrage mit LEFT-JOIN
SELECT
Artikel.Artikelname,
Bestelldetails.Anzahl
FROM Artikel
LEFT JOIN Bestelldetails ON Artikel.ArtikelNr = Bestelldetails.ArtikelNr;
Abbildung 8.33 Abfrageergebnis
Verknüpfen mit INNER JOIN
Als direkte Alternative zur Verknüpfung mittels WHERE bietet sich auch ein INNER-JOIN an.
443
Daten abfragen
BEISPIEL
BEISPIEL
Kapitel 8: SQL in Theorie und Praxis
Statt
SELECT
ArtikelNr, Artikelname, Firma, Liefereinheit, Einzelpreis
FROM
Artikel, Lieferanten
WHERE
(Artikel.LieferantenNr = Lieferanten.LieferantenNr) AND
(Lieferanten.Kontaktperson= 'Petra Winkler')
können Sie auch
SELECT
ArtikelNr, Artikelname, Firma, Liefereinheit, Einzelpreis
FROM
Artikel
INNER JOIN
Lieferanten
ON
Artikel.LieferantenNr = Lieferanten.LieferantenNr
WHERE
(Lieferanten.Kontaktperson= 'Petra Winkler')
verwenden. Allerdings ist der Schreibaufwand etwas höher.
Natürlich lassen sich auch mehr als zwei Tabellen zueinander in Beziehung setzen.
Sie suchen alle Bestelldetails für den Kunden »Island Trading«. Dazu müssen vier Tabellen zueinander in
Beziehung gebracht werden.
SELECT
Kunden.Firma, Artikel.Artikelname, Bestelldetails.BestellNr, Bestelldetails.Anzahl
FROM
Kunden INNER JOIN
(Bestellungen INNER JOIN
(Artikel INNER JOIN Bestelldetails ON Artikel.ArtikelNr = Bestelldetails.ArtikelNr)
ON Bestellungen.BestellNr = Bestelldetails.BestellNr)
ON Kunden.KundenCode = Bestellungen.KundenCode
WHERE
Kunden.Firma="Island Trading";
Abbildung 8.34 Abfrageergebnis
444

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.