9. Lehreinheit

From DHVLab

Revision as of 12:13, 29 March 2017 by Jschulz (talk | contribs) (Created page with "Zur Vertiefung des Erlernten werden wir im Folgenden eine etwas komplexere Datenbankabfrage über mehrere Tabellen erarbeiten. Ziel unserer Beispielabfrage ist es, XXXXXXXXXXX...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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

  1. Es können beliebig viele Tabellen miteinander gejoint werden. Berücksichtigt werden müssen dabei die Regeln der Algebra (in sich geschlossene Abfragen, Klammerregeln)