Vergleichsoperatoren


In SQL gibt es, um Abfragen zu vereinfachen, zusätzlich zu den bereits kennen gelernten Operatoren, noch weiter Operatoren, die im WHERE verwendet werden können. Diese Operatoren sind vor allem bei der Verwendung von Unterabfragen oft sinnvoll. 

Vier wichtige Operatoren sind:

  1. IN
  2. ANY/SOME
  3. ALL
  4. EXISTS

Der IN Operator gibt alle Einträge zurück, bei denen das gesuchte Merkmal in einer Menge von Werten vorkommt. Werden zum Beispiel alle Kunden mit dem Nachnamen "Berger", "Evans" oder "Hill" gesucht, würde die Abfrage dazu folgendermaßen aussehen:

SELECT * FROM Customer WHERE LastName IN ('Berger', 'Evans', 'Hill');
text/x-csharp

Die Ausgabe dieser Abfrage:

Der ANY Operator dient dazu, um abzufragen, ob die gewünschte Bedingung auf IRGENDEIN Ergebnis der Unterabfrage zutrifft. Dagegen dient der ALL Operator dazu, abzufragen, ob die gewünschte Bedingung auf ALLE Ergebnisse der Unterabfrage zutrifft. Wichtig ist dabei, zu beachten, dass die Unterabfragen als Ergebnis nur eine Spalte liefern darf.

Sollte man alle Artikel abfragen wollen, deren Gewicht kleiner als 10 ist, und die trotzdem einen höheren Preis als irgendein Artikel, der schwerer als 300 ist, hat, wäre die SQL-Abfrage folgende:

SELECT * FROM Article WHERE Weight < 10 AND Price > ANY (SELECT Price FROM Article WHERE Weight > 300);
text/x-csharp

Der Operator SOME ist äquivalent zu ANY, das heißt, statt ANY könnte man auch SOME angeben.

Wäre die Aufgabestellung aber, alle Artikel auszugeben, die leichter als 10 sind, und trotzdem teurer als ALLE Artikel, die schwerer als 300 sind, so wäre die Abfrage folgende:

SELECT * FROM Article WHERE Weight < 10 AND Price > ALL (SELECT Price FROM Article WHERE Weight > 300);
text/x-csharp

Der EXISTS Operator ist vor allem dann sinnvoll, wenn in der Unterabfrage auf die äußere Abfrage zugegriffen wird. Er überprüft, ob die Unterabfrage überhaupt einen Eintrag liefert oder nur eine leere Tabelle. Ein Beispiel dafür ist folgendes:

SELECT * FROM Article WHERE EXISTS (SELECT * FROM OrderArticle WHERE ArticleId = Article.Id);
text/x-csharp

Hier wird in der Unterabfrage auf die Artikel ID der äußeren Abfrage zugegriffen, und so geprüft, ob dieser Artikel schon irgendwann einmal bestellt worden ist. Somit gibt die Abfrage letztendlich alle Artikel aus, die schon irgendwann einmal bestellt worden sind. Diese Operatoren können auch mit NOT verwendet werden, um die Evaluierung zu true oder false umzukehren, um zum Beispiel alle Artikel auszugeben, die noch nie bestellt worden sind:

SELECT * FROM Article WHERE NOT EXISTS (SELECT * FROM OrderArticle WHERE ArticleId = Article.Id);
text/x-csharp
Subquery

Tutorial zu Unterabfragen/Subqueries mit Beispiel

UNION Operator

Tutorial zur Vereinigung von zwei Abfragen mit dem UNION Operator

WHERE Statement

Tutorial zur Verwendung von WHERE Statements mit Erklärung zu AND und OR

INNER JOIN

Tutorial zu Abfragen auf mehreren Tabellen mit JOINs, insbesondere dem INNER JOIN

SQL Tutorials

Hast du noch Fragen oder bist dir bei einer Aufgabe unsicher? Wirf einen Blick auf die SQL Tutorials!

Übersicht der Katas

Hier findest du die Erklärung zum Begriff "Katas" und eine Übersicht aller Programmierübungen.

Dojo - virtueller Übungsraum

Löse die Dojo-Aufgaben und werde Programmier-Profi!

SQL durchschaut?

Dann beweise dein Können im SQL Dojo!

SQL Dojo

Über Digital Dojo

Das Digital Dojo ist der virtuelle Übungsraum von COUNT IT.

Angehende Programmierer*innen, Code-Neulinge, Wiedereinsteiger*innen und Fortgeschrittene finden hier das nötige Rüstzeug für ihre Karriere.

Du möchtest deine Lehre bei COUNT IT starten? Dann bist du hier richtig - besiege deine Gegner im Dojo Game und sichere dir deine Lehrstelle!

Inspire your career.

Newsletter abonnieren

Der COUNT IT Newsletter liefert viermal jährlich interessante Neuigkeiten über das Unternehmen. Gleich anfordern!