SQL Grundkurs 1: Die Sprache erlernen

MINUS/EXCEPT

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Was ist nur in der ersten Liste enthalten? MINUS (bei Oracle) oder EXCEPT (bei MS SQL Server) entfernt alles, was in einer Folgeliste ebenso enthalten ist.

Transkript

Dieses Video widme ich der Vorstellung der Setoperatoren "EXCEPT", bzw. "MINUS". "EXCEPT" ist die Implementierung von Microsoft SQL Server, während "MINUS"von Oracle verwendet wird. Mit "EXCEPT" können Sie aus einem Ergebnis alles entfernen, was in einer nachfolgenden Liste ebenso enthalten ist. Ich habe hier zwei Anweisungen vorbereitet. Die erste liefert uns aus der Tabelle "Artikelgruppen" alle Artikelgruppen, die in der Bezeichnung ein "e" enthalten. Das sind 8 Treffer. Diese 8 haben in der Bezeichnung ein "e". Die zweite Liste enthält hier alle Artikelgruppen, die wiederum ein "a" enthalten. Hier sind 2 Artikelgruppen von diesen dreien enthalten, die auch im ersten Ergebnis vorgekommen sind, nämlich "Garten" und "Spielwaren". "Haushalt" enthält ja kein "e", ist also in der ersten Liste nicht enthalten gewesen. Nun kann ich mittels "EXCEPT" aus der ersten Liste all jene herausstreichen, die in der zweiten Liste auch enthalten sind. Ich füge das "EXCEPT" hier zwischen den beiden Anweisungen ein muss natürlich hier noch das Semikolon entfernen, damit es als gesamte Anweisung auch erkannt wird hier hinten füge ich es ein, da hat es noch gefehlt und jetzt führ ich die gesamte Anweisung aus. Zur Erinnerung, wir hatten zuerst 8 Treffer und 2 müssen jetzt aufgrund der zweiten Liste entfernt werden. Und das ist auch so, deshalb bekommen wir hier 6 Datensätze angezeigt. Man kann diesen Vorgang natürlich beliebig oft wiederholen, D.h. ich könnte z.B. sagen, ich möchte jetzt alle mit "w" hier noch entfernen. D.h. ich füge mit "EXCEPT" noch eine Anweisung hinzu ich kopiere mir die gleich, damit ich nicht alles eintippen muss und verwende jetzt hier "w" als Kennzeichen. Zur Kontrolle, da darf jetzt nur eine Zeile herauskommen. Eigentlich sind es 2, aber nur eine, die unsere betrifft, weil die "Spielwaren" ja ohnehin schon im Ergebnis nicht mehr enthalten sind. D.h., wenn wir jetzt alle 3 gemeinsam ausführen, wird aus der Liste zuerst das separiert, was in der zweiten enthalten ist, und danach zusätzlich noch das, was in der dritten enthalten ist. Es wird also immer weniger, D.h. gesamt müssten jetzt noch 5 Zeilen zurückkommen. Und das ist auch so, das sind alle Artikelgruppen, die in der Bezeichnung ein "e" haben, aber kein "a" und kein "w". Dieses Trivial-Beispiel können Sie natürlich mit einer einfachen WHERE-Klausel auch lösen, aber dieses Beispiel soll Ihnen die Funktionsweise von "EXCEPT" erläutern. Wenn Sie das Ganze unter Oracle verwenden, müssen Sie "EXCEPT" durch "MINUS" ersetzen. Ich kopiere mir die Anweisung daher in unseren Oracle-Editor und tausche hier "EXCEPT" durch "MINUS" aus. Ansonsten ist die Funktionsweise exakt dieselbe, wir können hier uns die Teilanweisungen anschauen. Zuerst haben wir hier unsere 8 Zeilen alle, die ein "e" enthalten. Die zweite Anweisung liefert uns alle, die ein "a" enthalten und die dritte alle, die ein "w" enthalten. Und die Gesamtanweisung, wiederum, muss uns die 5 Zeilen liefern, die uns auch die Lösung beim SQL Server geliefert hat. Und hier sehen wir auch das entsprechende Ergebnis. Verwenden Sie also "MINUS" bei Oracle, um aus einer Liste Ergebnisse zu entfernen, die in der nachfolgenden Liste auch enthalten sind. Wenn Sie bei Oracle ganz auf Nummer sicher gehen möchten und verhindern möchten, dass hier Groß und Kleinschreibung das Ergebnis beeinflusst, dann verwenden Sie hier jeweils die LOWER-Funktion, um die Zeichenfolgen hier zu nivellieren. Dann kann es hier keine falschen oder ungewollt andere Ergebnisse geben. Wenden wir uns nun unserem dritten System zu, MySQL. In MySQL gibt es weder "EXCEPT" noch "MINUS", deshalb müssen Sie dieses substituieren. Dazu gäbe es verschiedene Möglichkeiten: Man könnte es mit einem "JOIN" machen. Unter Umständen, je mehr Spalten hier enthalten sind in der Anweisung, kann das aufwändig sein. Die einfachste Variante ist meiner Ansicht nach hier die Verwendung einer synchronen, einer parallelen Unterabfrage. D.h. ich möchte aus der ersten Anweisung nur jene anzeigen, die in der zweiten nicht enthalten sind, sprich deren Kombination aus Artikelgruppenkürzel und Artikelgruppenbezeichnung nicht vorkommt. D.h. ich verwende jetzt hier anstelle des "EXCEPT", das es ja ohnehin nicht gibt, ein "und" um eine zweite Bedingung zu definieren und definiere hier das Paar aus den zwei Spalten "Artikelgruppe" sowie "Gruppentext". Ich möchte aber nur alle anzeigen, die nicht in der Liste enthalten sind, die die zweite Anweisung liefert, also "NOT IN". An dieser Stelle hier kopiere ich diese Anweisung. Ich muss das hier noch etwas einrücken, damit das Ganze auch ein Gesicht bekommt. Und ich beende hier die Unterabfrage mit einer schließenden Klammer. Diese Unterabfrage liefert uns alle Artikelgruppen, die ein "a" enthalten, und nur alle die in dieser Liste nicht enthalten sind, werden hier angezeigt. Testen wir dieses Zwischenergebnis gleich einmal aus und wir bekommen 6 Datensätze, so wie wir es auch bei den anderen Systemen im ersten Schritt erhalten haben. Um nun auch im zweiten Schritt die Artikelgruppen mit einem "w" in der Bezeichnung herauszufiltern, ergänze ich hier noch eine dritte Bedingung und das können wir hier kopieren und einfügen und hier die dritte Anweisung einbauen. Auch hier rücke ich wieder ein, in der Unterabfrage, damit das Ganze besser lesbar ist und schließe die Unterabfrage mit einer schließenden runden Klammer. Die zweite Unterabfrage liefert mir alle Kombinationen aus Artikelgruppenkürzel und Artikelgruppentext, bei denen der Text ein "w" enthält. Und ich möchte im ersten Ergebnis nur die anzeigen, die in dieser Liste nicht enthalten sind, "NOT IN". Damit filtere ich auch diese hier heraus. Ich führe nun diese Anweisung aus und bekomme jetzt auch hier diese 5 Artikelgruppen als Ergebnis. In diesem Video habe ich Ihnen nun gezeigt, wie Sie aus einer Liste alles entfernen, was in einer der Folgelisten ebenso enthalten ist. Für den Microsoft SQL Server verwenden Sie dazu den Setoperator "EXCEPT", für Oracle verwenden Sie den Setoperator "MINUS" und bei MySQL substituieren Sie diese beiden über eine parallele Unterabfrage.

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!