Musterlösungen zu „Einfache SQL-Abfragen“
Musterlösungen zu „Einfache SQL-Abfragen“
Common Table Expressions
Work in Progress - to be continued soon! « ### ### »
Unterabfragen
Einfache Unterabfragen
Nicht immer stehen Tabellen so zur Verfügung, wie wir die Daten benötigen. Gelegentlich müssen wir uns Hilfsabfragen bauen. Eine Abfrage stellt, wie auch eine Tabelle, eine Menge von Datensätzen dar. Insoweit darf sie überall dort verwendet werden, wo wir auch eine Tabelle verwenden können.
Eine solche Abfrage nennen wir dann auch abgeleitete Tabelle.Sie ist in Klammern zu notieren und mit einem Aliasbezeichner zu versehen.
Mengen-Operationen
SQL ist bereits angewandte Mengenlehre, wenn Sie so wollen. Dennoch bietet SQL die typischen aus der Mengenlehre bekannten Mengen-Operationen Vereinigung, Schnitt und Differenz, explizit an, um verschiedene Ergebnismengen damit zu verknüpfen.
Vereinigungsmenge UNION
Der UNION
-Operator ermöglicht es Ihnen, mehrere SELECT
-Statements zu einer Ergebnismenge zusammenzufassen, zu vereinigen. Dabei kennt er zwi Spielarten, ohne und mit dem Zusatz ALL
.
Daten gruppieren
Bis hierher haben wir die Daten als originäre Datensätze betrachtet, wie sie in den abgefragten Tabellen stehen. In der Praxis haben wir jedoch oft das Bedürfnis, Datensätze nach verschiedenen Kriterien zu gruppieren, z.B. um die Umsätze eines Jahres zu aggregieren. Das Jahr bildet dann eine Gruppe mit einer Umsatzsumme.
GROUP
BY
Zum Gruppieren bietet SQL die Klausel GROUP
BY
an. Alle dahinter notierten Spalten werden hinsichtlich gleicher Attributwerte zusammengefasst.
Tabellen verknüpfen
Nur mit einer Tabelle hantieren zu können, wie wir es bisher getan haben, ist langweilig. Zudem haben Sie in Kapitel „Entwurf und Implementierung“ gelernt, dass mithilfe der Normalisierung die Daten in einer relationalen Datenbank so auf verschiedene Tabellen verteilt werden, dass sich mögliche Redundanzen (weitestgehend) auf Schlüsselattribute beschränken. Die dahinter stehende Idee war/ist es, ein Datenmodell zu wählen, welches der Integrität der Daten einer Datenbank förderlich ist. Damit geht in der Regel einher, Daten, wenn wir sie abfragen wollen, wieder „zusammensetzen“ zu müssen. Wir benötigen daher oftmals mehr als nur eine Tabelle in einer Abfrage, um die interessierenden Daten vollständig anzuzeigen. Z.B. steht in der Tabelle der geleisteten Zahlungen lediglich ein Verweis auf den Kunden, der diese jeweils geleistet hat, um bei unserer Beispieldatenbank zu bleiben. Wir müssen ihn in einer verwiesenen Tabelle nachsehen. Wenn wir wissen wollen, welche Schauspieler in einem Film mitgewirkt haben, so müssen wir auch das in anderen Tabellen nachschlagen.
Daten filtern
Im letzten Kapitel haben Sie gelernt, erste Abfragen zu formulieren. Sie hatten lediglich Einfluss auf die Auswahl der auszugebenden Spalten und die Reihenfolge der auszugebenden Datensätze. Ansonsten waren die Abfragen dadurch gekennzeichnet, stets alle in einer Tabelle vorhandenen Datensätze zurückzugeben. Mithilfe von DISTINCT
konnten Sie lediglich die Ausgabe von Dubletten unterbinden.
In diesem Kapitel sehen wir uns an, wie wir gezielt Datensätze für die Ausgabe auswählen können.
Beispieldatenbank: DVD-Verleih
Wir werden die DVD-Verleih-Datenbank namens dvdrental
verwenden, um die Funktionen von SQL im Allgemeinen und PostgreSQL im Speziellen kennenzulernen.
Die DVD-Verleih-Datenbank stellt die Geschäftsprozesse eines DVD-Verleihgeschäfts dar. Die DVD-Verleih-Datenbank enthält viele Objekte, darunter:
- 17 Tabellen
- 1 Trigger
- 7 Sichten
- 8 Funktionen
- 1 Domäne
- 13 Sequenzen