9. Lehreinheit
From DHVLab
Zur Vertiefung des Erlernten werden wir im Folgenden eine etwas komplexere Datenbankabfrage über mehrere Tabellen erarbeiten. Ziel unserer Beispielabfrage ist es, XXXXXXXXXXX
Die Verbindung der Personen mit ihren Grabstätten erfolgt über die Verknüpfungstabelle "begraben". Zum besseren Verständnis gehen wir Schritt für Schritt vor.
Zunächst joinen wir nur die Tabelle "personen" mit der Tabelle "begraben":
→ SELECT personen.name, personen.funktion, begraben.id_grabstaette, begraben.bestattungsart, begraben.komplett FROM personen INNER JOIN begraben ON personen.id_person = begraben.id_person;
Im nächsten Schritt fügen wir in einem zweiten Schritt[A 1] die Grabstättenbezeichnung hinzu: → SELECT personen.name, personen.funktion, begraben.bestattungsart, begraben.komplett, grabstaette.name, grabstaette.geokoordinate1, grabstaette.geokoordinate2 FROM personen INNER JOIN (begraben INNER JOIN grabstaette ON begraben.id_grabstaette = grabstaette.id_grabstaette) ON personen.id_person = begraben.id_person
Nun möchten wir noch den Ort der Grabstätte mit einfließen lassen: → SELECT personen.name, personen.funktion, begraben.bestattungsart, begraben.komplett, grabstaette.name, ort.ortsname, grabstaette.geokoordinate1, grabstaette.geokoordinate2 FROM personen INNER JOIN (begraben INNER JOIN (grabstaette INNER JOIN ort ON grabstaette.id_ort = ort.id_ort) ON begraben.id_grabstaette = grabstaette.id_grabstaette) ON personen.id_person = begraben.id_person
Wie wir in den vorangehenden Einheiten zu SELECT-Abfragen gelernt haben, können wir die Abfrage nun noch weiter spezifizieren, z.B. durch eine WHERE-Klausel. Wir möchten uns im Folgenden nur noch diejenigen Fälle ausgeben lassen, bei denen es sich um eine Körperbestattung (= "Typ 1") handelt: → SELECT personen.name, personen.funktion, begraben.bestattungsart, begraben.komplett, grabstaette.name, ort.ortsname, grabstaette.geokoordinate1, grabstaette.geokoordinate2 FROM personen INNER JOIN (begraben INNER JOIN (grabstaette INNER JOIN ort ON grabstaette.id_ort = ort.id_ort) ON begraben.id_grabstaette = grabstaette.id_grabstaette) ON personen.id_person = begraben.id_person WHERE bestattungsart = "1"
In der nun ausgegebenen Ergebnisliste finden sich aber noch Fälle, bei denen zwar der Körper begraben wurde, jedoch nicht komplett, d.h. andere Körperteile (Herz, Eingeweide) liegen andernorts. Filtern wir diese Fälle nun noch heraus, um nur die Ganzkörperbestattungen zu erfassen: → SELECT personen.name, personen.funktion, begraben.bestattungsart, begraben.komplett, grabstaette.name, ort.ortsname, grabstaette.geokoordinate1, grabstaette.geokoordinate2 FROM personen INNER JOIN (begraben INNER JOIN (grabstaette INNER JOIN ort ON grabstaette.id_ort = ort.id_ort) ON begraben.id_grabstaette = grabstaette.id_grabstaette) ON personen.id_person = begraben.id_person WHERE bestattungsart = "1" AND komplett = "1"
Merke: Bei zunehmender Komplexität der Abfrage nimmt die Zahl der Ergebnisse entsprechend ab.
Anmerkungen
- ↑ Es können beliebig viele Tabellen miteinander gejoint werden. Berücksichtigt werden müssen dabei die Regeln der Algebra (in sich geschlossene Abfragen, Klammerregeln)