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

Mehrere Werte: IN, ANY und ALL

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Sollen mehrere Werte in einem Aufwasch auf Treffer untersucht werden, sind IN, ANY und ALL die richtigen Operatoren. Außerdem können Sie mit IN in bestimmten Situationen komfortabel ODER-Bedingungen abbilden.

Transkript

In SQL gibt es Operatoren, die in der Lage sind, mehrere Werte zu vergleichen. Wie sie diese einsetzen können, zeige ich Ihnen in diesem Video. Den Anfang mache ich mit dem Operator "IN". Dieser ist der gebräuchlichste unter den erwähnten. Dieser vergleicht mehrere Werte auf Gleichheit. Z.B. ich möchte aus meiner Artikeltabelle filtern und nehme hier die Artikelnummer, die Bezeichnung, die Artikelgruppe sowie den Verkaufspreis und möchte jetzt aber nur jene Artikel anzeigen, die z.B. einer der drei Gruppen "Besteck", "Geschirr" und "Kochgeschirr" angehören. Diese drei Artikelgruppen haben die Kürzel BE, GE und KG. Die verwende ich jetzt hier. Anstelle mehrere Bedingungen definieren zu müssen, kann ich jetzt hier den Operator "IN" verwenden. "IN" wird gefolgt von einem Klammernpaar und hier gebe ich jetzt der Reihe nach alle Werte ein, die ich vergleichen möchte, wie erwähnt, ist es in diesem Beispiel "Besteck" oder auch "Geschirr" und auch das "Kochgeschirr". Am Ende schließe ich die Klammer wieder und beende meine Anweisung mit einem Semikolon. Ich führe diese Anweisung aus und wir bekommen hier mehrere Treffer. Der Editor vom SQL Server ruft hier nur einmal die ersten 50 Zeilen ab, d.h. ich gehe einmal mit Strg+Ende zum letzten Datensatz, um zu sehen wie viele es gesamt sind. Und gesamt sind es 498 Treffer. Wichtig war es, da wir uns hier momentan bei Oracle befinden, dass ich hier in Großbuchstaben die Vergleichswerte eingegeben habe, da Oracle zwischen Groß- und Kleinschreibung unterscheidet. Es ist nicht bedeutend, wie viele Werte ich angebe, ich kann beliebig viele angeben, jeweils mit Komma getrennt, auch müssen diese nicht in sortierter aufsteigender Reihenfolge angeben werden, so wie ich das hier zufälligerweise gemacht habe. Ich zweige Ihnen das anhand eines zweiten Beispiels, indem ich auf die Personaltabelle zugreife und nun Informationen aus dieser Abfrage, die Personalnummer, den Nachnamen, den Vornamen sowie das Geburtsdatum und die Abteilung hole ich mir hier heraus. Und diesmal möchte ich auch die Abteilung filtern. Ich möchte aus mehreren Abteilungen hier Mitarbeiter anzeigen, also wäre Abteilung "IN" und ich möchte jetzt die Abteilungen "Marketing", "Einkauf", "Verkauf" und die "Geschäftsführung" haben. Ich gebe jetzt bewusst die Reihenfolge nicht sortiert vor, das heißt, ich fange mit MA an, MA steht für "Marketing" das Kürzel, dann nehme ich EK, EK steht für "Einkauf", danach den VK für "Verkauf" und GF für die "Geschäftsführung", d.h. ich habe das nicht alphabetisch sortiert eingegeben, dennoch wird hier das Ergebnis in gleichermaßen richtiger Folge erzeugt. Sie sehen, dass man natürlich hier genau aufpassen muss, was man eintippt. Sie sehen, es sieht so aus, als gäbe es in der Geschäftsführung gar keine Mitarbeiter, weil das Kürzel GF in der Form nicht gültig ist. Das richtige Kürzel wäre GL für "Geschäftsleitung". Das Gleiche passiert ja bei Orakel zur Erinnerung, wenn ich GL z.B. in Kleinbuchstaben hier eintippe, dann wird standardmäßig keine Übereinkunft gefunden, da ja hier "case-sensitive" gearbeitet wird. Aber sobald ich das GL nun auch hier in Großbuchstaben eintippe, wird das Ganze hier funktionieren und nun bekommen auch die drei Mitglieder aus der Geschäftsleitung ihren Platz im Ergebnis. "IN" prüft also der Reihe nach, ob einer dieser angegebenen Werte entspricht und sobald einer davon, d.h. es ist eine Art Oder-Logik, die hier abgebildet wird. Es bedeutet nichts anderes als zu sagen, Abteilung ist entweder MA oder EK oder VK oder GL. Immer, wenn es einen Treffer aus der Liste gibt, dann wird die Bedingung als wahr ausgewertet und in dem Fall wird der Datensatz dann hier auch angezeigt. Natürlich ist jetzt "IN" nicht nur auf Character Datentypen beschränkt oder kann auch bei numerischen Datentypen als auch bei Datums-Datentypen eingesetzt werden. Dafür möchte ich Ihnen noch ein Beispiel zeigen, ich kopiere mir hier die ersten Anweisungsteile und möchte jetzt z.B. filtern auf das Geburtsdatum. Ich möchte all jene filtern, die eines der folgenden drei Geburtsdaten aufweisen. Ich achte jetzt natürlich hier auf das Format der Eingabe bei mir gilt momentan das deutsche Standardformat hier bei Oracle, deshalb tippe ich es in dieser Form ein, entweder den 14.11.1982 oder den 14.02.1985 möchte ich hier verwenden als Vergleichsdatum und als drittes noch den 7. Dezember 1976. Wenn ich diese Anweisung ausführe, bekomme ich genau zu diesen drei Geburtsdaten, da es hier ja Treffer gibt, diese drei hier angezeigt. Dieselben Anweisungen funktionieren natürlich analog bei MySQL auch bei Microsoft SQL Server. Ich habe sie hier nochmals eingegeben, um sie Ihnen noch einmal auszuführen. Sie sehen, auch hier habe ich dasselbe Ergebnis, die 498 Artikel aus diesen drei Gruppen oder hier eben aus den vier Abteilungen meine 14 Mitarbeiter und natürlich auch das Geburtsdatum hier, habe ich das Standard Format für Datumseingaben von MySQL verwendet, damit ich hier kein explizites Konvertieren vornehmen muss, um diese drei Treffer hier zu erzielen. Und dasselbe noch beim SQL Server. Sie sehen exakt dieselben Anweisungen, die ich eigentlich nur mit Copy-Paste vom einen Editor in den anderen übernommen habe. Dieselben Ergebnisse werden hier geliefert, auch der SQL Server unterscheidet nicht zwischen Groß- und Kleinschreibung in der Standard-Konfiguration und auch hier habe ich jetzt das allgemeingültige Datumsformat von Microsoft SQL Server verwendet, das immer funktioniert, damit ich nicht explizit hier in ein Datum konvertieren muss und bekomme dasselbe Ergebnis auf diese Art und Weise. Soviel zum ersten Vergleichsoperator aus dieser Reihe, dem Vergleichsoperator "IN". Die weiteren sind zwar meiner Meinung nach in der Praxis nicht so relevant, aber dennoch möchte ich sie Ihnen zeigen. Und zwar geht es um die zwei Operatoren "ANY" und "ALL". "ANY" und "ALL" werden immer mit einem Größer/Kleiner oder natürlich auch Größer-Gleich oder Kleiner-Gleich kombiniert verwendet. So wie bei "IN" werden mehrere Werte angegeben und die werden nach folgender Logik ausgewertet, größer als "ANY", also größer als irgendeiner heißt nichts anderes als größer als der kleinste enthaltene Wert. Kleiner als irgendeiner heißt zumindest kleiner als der größte Wert. Hingegen bedeutet größer als "ALL", als alle, es muss größer als der größte Wert sein, genau so wie kleiner als "ALL" heißt, kleiner als der kleinste Wert. Z.B. verwende ich jetzt hier mein letztes Beispiel und kopiere es mir und ändere jetzt hier "IN" ab auf "ANY" und sage größer als "ANY". Was bedeutet das? Größer als "ANY" bedeutet natürlich größer als irgendeiner, d.h. zumindest größer als der kleinste Wert. Der kleinste hier enthaltene Wert ist hier der 07.12.1976. Wenn ich also diese Anweisung nun ausführe, bekomme ich nur Personen, die zumindest später, wir sehen es an der Jahreszahl, geboren sind. Wenn ich hingegen anstelle von "ANY" "ALL" verwende, bedeutet das größer als alle Werte, die ich angegeben habe. In dem Falle der größte wäre der 14. Februar 1985. Und wenn ich diese Anweisung nun ausführe, dann bekommen wir nur Personen, die später geboren sind. Sie sagen jetzt zurecht, warum schreiben wir nicht gleich hin "größer als 14.02.1985". Wozu benötigen wir das Ganze hier? Hier gebe ich Ihnen Recht. In der Praxis werden "ANY" und "ALL" typischerweise mit sogenannten Unterabfragen, "Subqueries" verwendet. "Subqueries" lernen Sie in einem eigenen Video kennen. Diese liefern diese Werte dynamisch, d.h. nicht auf diese Art und Weise hier, in der ich sie manuell eingetragen habe. In dieser Konstellation würde ich es in der Praxis nicht tun, habe die Variante allerdings dazu verwendet, um Ihnen die Wirkungsweise von "ANY" und "ALL" zu zeigen. Oracle ist außerdem das einzige System, das "ANY" und "ALL" ohne eine Unterabfrage, d.h. mit direkter Eingabe der Werte unterstützt. Das heißt, um Ihnen dieselbe Funktionsweise bei MySQL und dem SQL Server zu zeigen, musste ich hier etwas tricksen und diese Form in eine Unterabfrage mit "UNION" verpacken. Beide Themen, "UNION" als auch Unterabfragen, werden in gesonderten Videos behandelt. Ich möchte Ihnen hier also nur zeigen, dass die Funktionsweise von "ALL" und "ANY" auch gegeben ist, indem ich hier einerseits diese Anwendung ausführe und in dem Fall alle bekomme, die größer sind als alle Werte, die hier zurück geliefert werden und dasselbe abschließend auch beim Microsoft SQL Server. Auch hier funktioniert diese Form. Allerdings nur über eine Unterabfrage. D.h. "ANY" und "ALL" vergleichen so wie "IN" mehrere Werte. Der Unterschied ist, "IN" prüft auf Gleichheit, "ANY" und "ALL" eben auf Größer oder Kleiner.

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!