Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 15: Filtern mit Unterabfrage

Testen Sie unsere 2021 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Welche Mitarbeiter sind jünger als der Durchschnitt ihrer Abteilung? Setzen Sie zum Filtern eine Unterabfrage ein.

Transkript

In diesem Video wollen wir uns ein Beispiel vornehmen, bei dem wir eine Unterabfrage in der WHERE-Klausel benötigen. Wir wollen die sehr, sehr wichtige Frage klären, welche Mitarbeiter sind jünger, als der Durchschnitt ihrer Abteilung. Um das zu lösen, gebe ich Ihnen noch Folgendes mit auf den Weg - nämlich, wie können Sie mit dem Geburtsdatum und dem aktuellen Datum, bei unseren drei Systemen jeweils das Alter berechnen, damit Sie in weiterer Folge damit das Durchschnittsalter in der Unterabfrage ermitteln können. Die einfachste Lösung finden wir bei Oracle. Mit der Funktion TRUNC kann ich eine Zahl immer abrunden, mit der Funktion months_between kann ich einmal das Alter in Jahren eruieren, und zwar zwischen SYSDATE, dem Systemdatum, dem aktuellen Datum und dem Geburtsdatum. Um auf Jahre zu kommen muss ich das Ergebnis durch 12 dividieren. Da wir ja erst mit dem Geburtsdatum ein Jahr älter werden, und ich bin das von meiner Frau gewohnt, das darf ich nicht einmal einen Tag früher machen, sonst kriege ich gleich eine ordentliche Schelte, deshalb verwenden wir die Funktion TRUNC, abrunden. Oracle liefert uns das sehr genau mit dieser Berechnungsmethode, als Kommazahl das Jahr, und mit TRUNC können wir abrunden, und wenn ich daher diese Anweisung so ausführe, bekomme ich exakt das korrekt berechnete Alter. Wenn Sie dieses Beispiel letztendlich ausführen, kann es natürlich zu einem anderen Ergebnis kommen, denn dieses Ergebnis bezieht sich ja auf den Zeitpunkt der Aufnahme dieses Films. Etwas aufwendiger ist es, das Alter unter MySQL und dem MS SQL Server zu berechnen, da es leider keine Funktion gibt, die uns die Differenz in Jahren als Kommazahl liefert, deshalb müssen wir zum Beispiel die Differenz der Jahre ausrechnen. Mit diesem Ausdruck YEAR(NOW()) - YEAR(gebdatum), bekomme ich diese Spalte, ich habe sie hier alter_ungenau genannt, das ist einfach die Differenz in Jahren. Jetzt kann es aber sein, dass jemand in diesem Jahr noch gar nicht Geburtstag gehabt hat, deshalb zum Beispiel noch gar nicht, wie hier der Konstantin 51 ist, weil er erst im August Geburtstag haben wird, sondern noch 50, daher berechne ich jetzt hier so eine Art Korrekturfaktor. Dazu verwende ich die Funktion bei MySQL DAYOFYEAR; die mir vom Jahr den Tag ausgibt, den wievielten Tag im Jahr. Und wenn jetzt der Jahrestag oder Tag im Jahr vom heutigen Datum kleiner ist als derselbe fürs Geburtsdatum, dann bedeutet das, dass das Geburtsdatum noch in der Zukunft liegt, und deshalb der Wert um -1 zu korrigieren ist, sonst bleibt er gleich, das heißt, mit diesem CASE berechne ich diesen Korrekturfaktor, das heißt, bei all jenen, die in dem Jahr noch nicht geboren sind, Sie sehen, jetzt ist der 13. April, am 04. April hier hat es schon Geburtstag gegeben, für die Edita Kirschner, deshalb gibt es hier keine Korrektur mehr. Und, um auf das korrekte Alter zu kommen, verwende ich jetzt den ersten Ausdruck, nämlich die Differenz in Jahren minus - und rechne diesen Korrekturfaktor hier weg, CASE WHEN DAYOFYEAR - dem und so weiter, dann 1, Achtung hier nämlich positiven Wert 1, weil ich das Minus hier schon vor dem CASE verwendet habe. Achten Sie darauf, wenn Sie "alter" als Aliasname verwenden, dass ein reservierter Begriff aus der Data Definition Language ist ALTER, müssen Sie es unter doppelte Hochkomma setzen. Ähnlich haben wir das Problem beim Microsoft SQL Server. Die DATEDIFF-Funktion mit der ich eine Differenz in Jahren ausrechnen kann, liefert mir nur dasselbe, wie wir es gerade bei MySQL gesehen haben, die Differenz der Jahreszahlen, als ganze Werte, deshalb brauchen wir auch hier den entsprechenden Korrekturfaktor, weil wir hier das gleiche Problem mit dem ungenauen Alter haben, hier brauchen wir die Korrektur. Wie kommen wir zu dieser? Zum Beispiel mit der Funktion DATEPART. DATEPART hat auch einen Wert, DAYOFYEAR, das heißt, welcher Tag im Jahr ist es, und wenn das hier kleiner ist für das aktuelle Datum, als für das Geburtsdatum, dann müssen wir noch korrigieren. Diesen kleinen Unsicherheitsfaktor, das es Schaltjahre gibt, wo sich das manchmal um einen Tag verschieben kann, diese Ungenauigkeit nehme ich jetzt hier einmal in Kauf. Damit können wir also mit diesen Ausdrücken die Sie gesehen haben, jeweils das Alter berechnen. Verwenden Sie das jetzt weiter, um das Durchschnittsalter in einer UND-Abfrage zu verwenden, und damit auf jene zu filtern, die älter als dieses Durchschnittsalter sind. Diesmal müssen Sie nicht auf Pause schalten, um das Ergebnis umzusetzen, Sie können das natürlich tun, damit Sie die Angabe am Bildschirm behalten - warum, die Lösung kommt in separaten Videos für die drei Datenbankmanagementsysteme, da das von der Gesamtlösung hier für ein Video doch sehr lang wäre. Aber wenn Sie natürlich die Unterschiede zwischen den Systemen interessieren, können Sie natürlich auch die Lösungen für alle drei Systeme, und nicht nur für Ihr verwendetes System betrachten.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!