SQL WHERE Operatoren

6 Kernkonzepte
Die wichtigsten SQL WHERE Operatoren für präzise Datenfilterung: = · LIKE · IN · BETWEEN · IS NULL · AND / OR / NOT Mit der WHERE-Klausel filtern Sie Daten präzise. Diese Operatoren helfen Ihnen, genau die Datensätze zu finden, die Sie benötigen – von einfachen Vergleichen bis zu komplexen Mustern.

Vergleichsoperatoren – =, <>, >, <, >=, <=

= · <> · > · < · >= · <=
SELECT * FROM produkte WHERE preis >= 100 AND kategorie <> 'Bücher';

Vergleichsoperatoren vergleichen Werte in der WHERE-Klausel. Sie sind die grundlegendsten Operatoren für Datenfilterung.

Übersicht der Vergleichsoperatoren

Operator Bedeutung Beispiel
= Gleich WHERE name = 'Laptop'
<> oder != Ungleich WHERE kategorie <> 'Bücher'
> Größer als WHERE preis > 100
< Kleiner als WHERE preis < 50
>= Größer oder gleich WHERE preis >= 100
<= Kleiner oder gleich WHERE preis <= 50
Beispiele
-- Genaue Übereinstimmung
SELECT * FROM kunden
WHERE name = 'Max Mustermann';
-- Ungleich
SELECT * FROM produkte
WHERE kategorie <> 'Auslauf';
-- Größer als (Preise über 100 €)
SELECT name, preis FROM produkte
WHERE preis > 100;
-- Kombinierte Vergleiche (Preis zwischen 50 und 200)
SELECT * FROM produkte
WHERE preis >= 50 AND preis <= 200;
Tipp: Bei Zeichenkettenvergleichen ist die Groß-/Kleinschreibung datenbankspezifisch. PostgreSQL ist standardmäßig case-sensitive, MySQL und SQL Server sind es nicht.

LIKE – Mustervergleich für Texte

LIKE · % · _ · ESCAPE
SELECT * FROM produkte WHERE name LIKE '%book%';

LIKE ermöglicht die Suche nach Textmustern. Mit % (beliebig viele Zeichen) und _ (genau ein Zeichen) können Sie flexible Suchmuster definieren.

LIKE-Muster

Muster Bedeutung Beispiel
'%wort%' Enthält "wort" LIKE '%book%' → "notebook", "bookshop"
'wort%' Beginnt mit "wort" LIKE 'A%' → "Anna", "Albert"
'%wort' Endet mit "wort" LIKE '%mann' → "Mustermann"
'w_t' w + beliebiges Zeichen + t LIKE 'w_t' → "wit", "wat" (nicht "wort")
'[a-f]%' Beginnt mit a-f (SQL Server) LIKE '[a-f]%' → "apple", "banana"
'%\_%' ESCAPE '\' Enthält einen Unterstrich LIKE '%\_%' ESCAPE '\' → "file_name"
Beispiele
-- Namen die mit "A" beginnen
SELECT * FROM kunden
WHERE name LIKE 'A%';
-- E-Mails die auf ".de" enden
SELECT * FROM kunden
WHERE email LIKE '%.de';
-- Produkte mit "book" im Namen
SELECT * FROM produkte
WHERE name LIKE '%book%';
-- Mit Escape-Zeichen (Unterstrich suchen)
SELECT * FROM dateien
WHERE name LIKE '%\_%' ESCAPE '\';
-- Nicht case-sensitive in PostgreSQL (ILIKE)
SELECT * FROM produkte
WHERE name ILIKE '%book%'; -- PostgreSQL
Tipp: LIKE mit führendem % kann bei großen Tabellen langsam sein, da kein Index genutzt werden kann. Verwenden Sie Volltextsuche (z.B. PostgreSQL tsvector) für komplexe Textsuche.

IN – Mehrere Werte prüfen

IN (wert1, wert2, ...)
SELECT * FROM produkte WHERE kategorie IN ('Elektronik', 'Bücher', 'Kleidung');

IN prüft, ob ein Wert in einer Liste von Werten enthalten ist. Eine elegantere Alternative zu mehreren OR-Bedingungen.

Beispiele
-- Mehrere Kategorien
SELECT * FROM produkte
WHERE kategorie IN ('Elektronik', 'Bücher');
-- Mit Subquery
SELECT * FROM produkte
WHERE hersteller_id IN (
SELECT id FROM hersteller
WHERE land = 'Deutschland'
);
-- NOT IN (Ausschluss)
SELECT * FROM kunden
WHERE status NOT IN ('gesperrt', 'gelöscht');
Tipp: IN mit einer langen Liste von Werten kann die Performance beeinträchtigen. Bei sehr großen Listen sollten Sie eine temporäre Tabelle oder einen JOIN verwenden.

BETWEEN – Wertebereich prüfen

BETWEEN wert1 AND wert2
SELECT * FROM produkte WHERE preis BETWEEN 50 AND 200;

BETWEEN prüft, ob ein Wert in einem inklusiven Bereich liegt. Es ist eine kompakte Alternative zu wert >= x AND wert <= y.

Beispiele
-- Preise zwischen 50 und 200 € (inklusiv)
SELECT name, preis FROM produkte
WHERE preis BETWEEN 50 AND 200;
-- Datumsbereich
SELECT * FROM bestellungen
WHERE datum BETWEEN '2024-01-01' AND '2024-12-31';
-- NOT BETWEEN (außerhalb des Bereichs)
SELECT * FROM produkte
WHERE preis NOT BETWEEN 10 AND 50;
-- Textbereich (alphabetisch)
SELECT * FROM produkte
WHERE name BETWEEN 'A' AND 'M';
Tipp: BETWEEN ist inklusiv – die Grenzwerte werden mit einbezogen. Bei Datumsangaben sollten Sie darauf achten, dass BETWEEN '2024-01-01' AND '2024-12-31' den 31.12. um 00:00 Uhr einschließt.

IS NULL – NULL-Werte prüfen

IS NULL · IS NOT NULL
SELECT * FROM produkte WHERE rabatt IS NULL;

IS NULL prüft, ob ein Feld den Wert NULL (unbekannt / nicht vorhanden) enthält. IS NOT NULL prüft auf Vorhandensein eines Werts.

Beispiele
-- Produkte ohne Rabatt
SELECT * FROM produkte
WHERE rabatt IS NULL;
-- Kunden mit E-Mail-Adresse
SELECT * FROM kunden
WHERE email IS NOT NULL;
-- Wichtig: = NULL funktioniert nicht!
-- FALSCH: WHERE rabatt = NULL
-- RICHTIG: WHERE rabatt IS NULL
Tipp: NULL ist kein Wert, sondern ein Zustand ("unbekannt"). Deshalb funktioniert = NULL nicht – verwenden Sie immer IS NULL oder IS NOT NULL.

Logische Operatoren – AND, OR, NOT

AND · OR · NOT · ()
SELECT * FROM produkte WHERE (preis > 100 OR kategorie = 'Premium') AND bestand > 0;

Logische Operatoren kombinieren Bedingungen. AND verlangt, dass alle Bedingungen erfüllt sind, OR mindestens eine. NOT kehrt eine Bedingung um.

Wichtige Regeln

Operator Beschreibung Priorität
AND Alle Bedingungen müssen wahr sein Höher als OR
OR Mindestens eine Bedingung muss wahr sein Niedriger als AND
NOT Kehrt die Wahrheit einer Bedingung um Höchste Priorität
() Gruppiert Bedingungen Höchste Priorität
Beispiele
-- AND: Alle Bedingungen müssen erfüllt sein
SELECT * FROM produkte
WHERE kategorie = 'Elektronik' AND preis < 100;
-- OR: Mindestens eine Bedingung
SELECT * FROM produkte
WHERE kategorie = 'Elektronik' OR preis < 10;
-- Kombination mit Klammern (AND wird vor OR ausgewertet!)
SELECT * FROM produkte
WHERE (kategorie = 'Elektronik' OR kategorie = 'Bücher')
AND preis > 50;
-- NOT: Bedingung umkehren
SELECT * FROM produkte
WHERE NOT (kategorie = 'Auslauf');
Tipp: AND wird vor OR ausgewertet. Verwenden Sie immer Klammern, wenn Sie AND und OR kombinieren, um die gewünschte Logik sicherzustellen.

WHERE Operatoren im Überblick

= Gleichheit
Exakte Übereinstimmung
LIKE Mustervergleich
%, _ Wildcards
IN Listenvergleich
Mehrere Werte
BETWEEN Wertebereich
Inklusive Grenzen
IS NULL NULL-Prüfung
Fehlende Werte
AND/OR Logische Kombination
Mehrere Bedingungen

Quick Summary

=
Vergleich
IN
Listenvergleich
BETWEEN
Wertebereich
IS NULL
NULL prüfen
AND/OR
Logische Kombination
WHERE preis BETWEEN 50 AND 200 · WHERE name LIKE '%book%' · WHERE kategorie IN ('Elektronik', 'Bücher')