Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 1: Die Sprache erlernen

Unterabfrage in der WHERE-Klausel

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Wer verdient mehr als der Durchschnitt? Um diese Frage zu beantworten, muss über eine Abfrage zuvor eruiert werden, wie hoch eigentlich der Durchschnittsverdienst ist. Dieser kann von einer Unterabfrage in der WHERE-Klausel dann an die Hauptabfrage übergeben werden. Im Beispiel des Videos sehen Sie, wie eine derartige Abfrage gelöst wird.

Transkript

Über Unterabfragen können Sie SELECT-Anweisungen ineinanderschachteln. Wie das geht, zeige ich Ihnen in diesem Video. Dafür möchte ich folgendes Beispiel verwenden. Wir möchten alle Kollegen und Kolleginnen von Mitarbeiterin Kossegg herausfinden. Man könnte das auch anders formulieren: Wer arbeitet in derselben Abteilung wie Kossegg? Die Hauptabfrage liefert mir also alle, die in derselben Abteilung arbeiten wie Kossegg. Über die Unterabfrage müssen wir eruieren, in welcher Abteilung arbeitet denn eigentlich Kossegg? "SELECT FROM wawi.personal", wir nehmen uns die Personalnummer, den Nachnamen, den Vornamen sowie das Abteilungskürzel und schränken ein, "WHERE abtlg =" und hier müssen wir nun über die Unterabfrage klären, in welcher Abteilung arbeitet Kossegg? Die Unterabfrage löst also "SELECT FROM wawi.personal", das ist in dem Fall dieselbe Tabelle und hier benötigen wir ja nur als Kürzel die eine Spalte "abtlg". Als Filterkriterium definieren wir "WHERE nachname = 'kossegg'", damit eruieren wir die Abteilung. Das können wir einmal ausführen, separat, um zu sehen, aha, es handelt sich hier um die Abteilung "Einkauf". Wie können wir nun diese beiden ineinander integrieren? Wir nehmen die Hauptabfrage und fügen hier die Unterabfrage in einem geschwungenen Klammernpaar ein. Achten Sie bitte darauf, wenn Sie die Unterabfrage hineinkopieren oder hineinschreiben, dass Sie hier das Semikolon nicht mitkopieren. In der Unterabfrage darf nämlich kein Semikolon vorkommen. Das Semikolon darf erst ganz am Ende, außerhalb der Abfrage, am Ende der gesamten Abfrage stehen. Ich rücke die Unterabfrage so ein, damit das Ganze auch gut lesbar ist. Ganz fertig sind wir noch nicht. Würden wir nämlich die Anweisung so ausführen, bekommen wir 'Kossegg' selber natürlich auch mit ins Ergebnis, weil sie ja auch in der Hauptabfrage zurückgegeben wird mit dieser Abteilung. Und wir wollen ja nur die Kolleginnen, also alle außer Kossegg selber, deshalb werden wir in der Hauptabfrage noch eine weitere Filterbedingung ergänzen, nämlich "AND nachname != 'Kossegg'". Damit haben wir jetzt die Frage geklärt, wer sind die Kollegen von Kossegg, nämlich die Marion Hoier und der Lorenz Meister. Wenn wir eine Unterabfrage in der WHERE-Klausel so wie hier verwenden, müssen wir darauf achten, dass wir hier ausschließlich eine Spalte und eine Zeile zurückliefern. Widrigenfalls würden wir eine Fehlermeldung bekommen. Schauen wir uns das an. Würde ich hier in der Unterabfrage zur Abteilung z.B. noch das Eintrittsdatum ergänzen, das heißt, zwei Werte zurückliefern, können die hier mit "Abteilung" nicht verglichen werden und wir laufen auf einen Fehler aus. Es darf nur ein einziger Ausdruck in der Auswahlliste, also der SELECT-Klausel, angegeben werden. Außerdem bekommen wir einen Fehler, wenn die Unterabfrage mehr als eine Zeile liefert. Ich provoziere das, indem ich hier einfach die Bedingung ändere und statt "= 'Kossegg'" hier hinein schreibe "LIKE 'K%'", damit werden wir auf jeden Fall mehrere Zeilen bekommen, weil es mehrere gibt, deren Namen mit K beginnt. Wenn ich diese Anweisung nun ausführe, bekommen wir auch eine Fehlermeldung, die Unterabfrage hat eben mehr als einen Wert zurückgegeben. Das darf eben nicht sein, wenn man hier einen Single-Row-Vergleichsoperator verwendet. Was sind Single-Row-Vergleichsoperatoren? Alle außer IN, ANY und ALL. Theoretisch würde das Ganze also funktionieren, wenn wir hier IN verwenden. Bei der Verwendung mit IN wäre es zulässig, dass wir mehrere Zeilen von der Unterabfrage zurückbekommen. Genauso bei ANY und ALL. Diese Anweisung liefert uns jetzt hier keinen Fehler mehr, allerdings ist natürlich die Aussage hier eine ganz andere. Man könnte so sagen, wer hat einen Kollegen dessen Name mit K beginnt? Aber es ist möglich, mehrere Zeilen zurückzuliefern in der Unterabfrage, wenn wir einen entsprechenden Vergleichsoperator so wie hier verwenden. Schauen wir uns also noch ein Beispiel an, mit dem wir z.B. N oder ALL verwenden. Z.B. möchten wir eruieren, alle, die jünger sind als alle anderen, die oder deren Namen mit K beginnen. Dann müssen wir nicht so viel ändern, ich kopiere mir diese Anweisung und in der Unterabfrage wollen wir das Geburtsdatum, also das Geburtsdatum all jener, deren Nachname mit K beginnt. Schauen wir uns die Werte an, die uns die Unterabfrage hier zurückliefert und wenn wir uns jetzt hier anschauen, der Jüngste ist am 14.11.1982 geboren, das heißt, wir müssten nur Werte zurückbekommen dann in der Hauptabfrage, die größer als dieser Wert sind. Jetzt passe ich das hier natürlich auch noch an, indem ich sage "WHERE gebdatum ALL" und schauen wir uns das Ergebnis an. Vielleicht mache ich noch eine Sortierung nach dem Geburtsdatum, dann erkennen wir das Ergebnis noch besser "ORDER BY gebdatum". Und natürlich ergänze ich das Geburtsdatum in der SELECT-Klausel, damit wir es auch sehen, denn sonst hätte das Ganze keine gute Aussagekraft. So, und wir sehen, der Erste, der hier in der Liste auftaucht, ist der Klaus Nürnberger, der 1985 geboren ist. Also auch mit ANY und ALL kann die Unterabfrage mehr als einen Wert zurückliefern. Sie haben in diesem Video nun gesehen, wie Sie über eine Unterabfrage einen Wert eruieren und diesen an die Hauptabfrage zurückgeben. Sie müssen dabei beachten, dass Sie an die Hauptabfrage immer nur einen Wert zurückliefern, das heißt, immer nur eine Spalte und eine Zeile, wenn Sie nicht den Operator IN, ANY oder ALL verwenden.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

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!