IN
Abfragen verfeinern
Der IN-Operator prüft, ob ein Wert in einer Liste mehrerer Werte vorkommt. Er ist eine kurze, gut lesbare Abkürzung für viele mit OR verkettete Gleichheits-Bedingungen.
Syntax
SELECT Spalten FROM Tabelle WHERE Spalte IN (Wert1, Wert2, Wert3);
Statt:
WHERE Stadt = 'Berlin' OR Stadt = 'Köln' OR Stadt = 'Bonn'
schreibst du einfach:
WHERE Stadt IN ('Berlin', 'Köln', 'Bonn')
Beispiel
SELECT Name, Stadt
FROM Kunden
WHERE Stadt IN ('Berlin', 'Köln');
| Name | Stadt |
|---|---|
| Müller GmbH | Berlin |
| Maier & Co | Köln |
Mit NOT IN kehrst du die Bedingung um – alle Kunden, die nicht in diesen Städten sitzen.
Vorschau: IN mit Subquery
Besonders mächtig wird IN mit einer Unterabfrage statt einer festen Liste. So findest du z. B. alle Kunden, die mindestens eine Bestellung aufgegeben haben:
SELECT Name FROM Kunden WHERE KundenID IN (SELECT KundenID FROM Bestellungen);
Die innere Abfrage liefert eine Liste von KundenIDs, und IN prüft jede Kundenzeile dagegen. Mehr dazu in den Lektionen zu Unterabfragen.
Stolperfalle: NULL und NOT IN
Vorsicht, wenn die Werteliste (oder die Subquery) ein NULL enthält: NOT IN liefert dann oft gar keine Zeilen, weil ein Vergleich mit NULL nie wahr wird. Beispiel: WHERE KundenID NOT IN (1, 2, NULL) ergibt für alle Zeilen ein unbekanntes Ergebnis. Filtere NULL in der Subquery vorher heraus oder nutze stattdessen NOT EXISTS.