LXLogicExcel
🔥
0
0

SQL-WHERE-Klauseln: Praxisleitfaden für Excel-Anwender

By the LogicExcel Editorial TeamUpdated June 202611 min read2,117 words

SQL-WHERE-Klauseln: Praxisleitfaden für Excel-Anwender

Ein Mann sitzt am Schreibtisch und prüft sorgfältig SQL-WHERE-Klauseln.

Die WHERE-Klausel filtert Zeilen in SQL-Abfragen. Sie steht nach FROM und entscheidet, welche Datensätze SELECT, UPDATE oder DELETE betreffen. Ein Minimalbeispiel:

SELECT name, umsatz
FROM kunden
WHERE umsatz > 1000;

Diese Abfrage gibt nur Kunden zurück, deren Umsatz über einem bestimmten Schwellenwert liegt. Alle anderen Zeilen werden ausgeschlossen. Für Excel-Anwender ist das der Moment, wo SQL-Filterlogik greifbar wird: statt Autofilter zu klicken, verwendet man eine Bedingung. Wer SQL-Abfragebedingungen direkt im Browser üben will, findet bei Logicexcel SQL-Übungen sofort einsetzbare Aufgaben mit Feedback.

> Kernregel: WHERE filtert Zeilen, nicht Spalten. Spalten wählt SELECT aus. Diese Trennung ist der wichtigste Gedanke für saubere Abfragen.

Profi-Tipp: Schreib WHERE-Bedingungen so spezifisch wie möglich. Je selektiver die Bedingung, desto weniger Zeilen muss die Datenbank prüfen, und desto schneller läuft die Abfrage. *

Inhaltsverzeichnis

Wie funktioniert die Grundsyntax mit WHERE?

Die WHERE-Klausel folgt immer auf FROM und gilt für SELECT, UPDATE und DELETE:

SELECT spalte1, spalte2
FROM tabelle
WHERE bedingung;

UPDATE tabelle
SET spalte = wert
WHERE bedingung;

DELETE FROM tabelle
WHERE bedingung;

Vergleichsoperatoren

OperatorBedeutungBeispiel
=GleichWHERE land = 'DE'
<>UngleichWHERE status <> 'inaktiv'
>Größer alsWHERE preis > 50
<Kleiner alsWHERE alter < Schwellenwert
>=Größer oder gleichWHERE menge >= 100
<=Kleiner oder gleichWHERE rabatt <= Schwellenwert

Mengenoperatoren: IN, NOT IN und Unterabfragen

IN ersetzt mehrere OR-Bedingungen durch eine kompakte Liste:

SELECT * FROM bestellungen
WHERE land IN ('DE', 'AT', 'CH');

IN funktioniert auch mit einer Unterabfrage:

SELECT name FROM kunden
WHERE id IN (SELECT kunden_id FROM bestellungen WHERE betrag > 500);

BETWEEN wählt Werte innerhalb eines Bereichs, inklusive beider Grenzen. WHERE preis BETWEEN 10 AND 50 entspricht WHERE preis >= 10 AND preis <= 50. Für exklusive Grenzen nutzt man > und < direkt.

IS NULL und IS NOT NULL prüfen fehlende Werte. WHERE email = NULL funktioniert nicht, weil NULL kein Wert ist, mit dem Gleichheitsoperatoren arbeiten. Richtig ist WHERE email IS NULL.

Aggregatfunktionen wie SUM oder COUNT gehören nicht in WHERE. Wer Gruppen filtern will, braucht HAVING nach GROUP BY.

Profi-Tipp: NOT IN mit einer Unterabfrage, die NULL-Werte enthält, gibt keine Zeilen zurück. Immer sicherstellen, dass die Unterabfrage keine NULLs liefert. *

AND, OR und NOT: Wie kombiniert man Bedingungen richtig?

AND verknüpft Bedingungen, OR erweitert die Auswahl, NOT kehrt das Ergebnis um. Die Auswertungsreihenfolge lautet: NOT vor AND vor OR. Ohne Klammern kann das zu unerwarteten Ergebnissen führen.

Jemand gibt SQL-Bedingungen am Computer ein.

Ein Beispiel, das viele falsch lesen:

-- Ohne Klammern: AND bindet stärker als OR
SELECT * FROM produkte
WHERE kategorie = 'Elektronik' OR kategorie = 'Bücher' AND preis < 20;

-- Gemeint war wahrscheinlich:
SELECT * FROM produkte
WHERE (kategorie = 'Elektronik' OR kategorie = 'Bücher') AND preis < 20;

Die erste Abfrage gibt alle Elektronik-Produkte zurück (egal welcher Preis) plus Bücher unter 20 €. Die zweite filtert beide Kategorien auf Preis unter 20 €. Kleiner Unterschied, großer Effekt.

Profi-Tipp: Schreib immer Klammern, wenn AND und OR in einer Bedingung gemischt werden. Auch wenn die Klammern technisch nicht nötig sind, machen sie die Absicht sofort lesbar.

Kurzaufgabe: Was gibt diese Abfrage zurück?

SELECT * FROM mitarbeiter
WHERE abteilung = 'IT' OR gehalt > 5000 AND standort = 'Berlin';

Antwort: Alle IT-Mitarbeiter (unabhängig von Gehalt und Standort) plus Mitarbeiter mit Gehalt über 5.000 in Berlin. AND bindet zuerst.

*

Wie sucht man mit LIKE nach Textmustern?

Der LIKE-Operator erlaubt Mustervergleiche in Textspalten. Zwei Wildcards stehen zur Verfügung:

  • % steht für beliebig viele Zeichen (auch null)
  • _ steht für genau ein Zeichen
Typische Muster:
WHERE name LIKE 'A%'       -- beginnt mit A
WHERE name LIKE '%mann'    -- endet mit "mann"
WHERE name LIKE '%GmbH%'   -- enthält "GmbH" irgendwo
WHERE code LIKE 'DE_2%'    -- DE, dann ein Zeichen, dann 2, dann beliebig

Enthält der Suchbegriff selbst ein % oder _, braucht man ein Escape-Zeichen:

WHERE kommentar LIKE '%30!%%' ESCAPE '!'

Case-Sensitivity und Collation

Ob LIKE zwischen Groß- und Kleinschreibung unterscheidet, hängt von der Collation der Datenbank ab. PostgreSQL bietet ILIKE für Groß-/Kleinschreibungs-unabhängige Suche. MySQL verhält sich je nach Collation unterschiedlich. SQL Server folgt der Datenbankeinstellung.

Profi-Tipp: LOWER(name) LIKE 'a%' normalisiert zuverlässig, verhindert aber die Nutzung eines Index auf der Spalte. Besser: eine Collation wählen, die bereits Groß-/Kleinschreibung ignoriert, oder einen funktionsbasierten Index anlegen. *

Was muss man bei BETWEEN für Datums- und Bereichsfilter beachten?

BETWEEN ist inklusive, schließt also beide Grenzen ein. Das klingt selbstverständlich, führt aber bei Datumsangaben zu Fallen.

  • Zahlen: WHERE preis BETWEEN 10 AND 50 gibt Preise von 10 bis 50 zurück.
  • Datum: WHERE bestelldatum BETWEEN '2024-01-01' AND '2024-12-31' schließt den 31. Dezember ein, aber nur bis Mitternacht. Bestellungen am 31.12. zu späteren Uhrzeiten werden ausgeschlossen.
  • Zeichenketten: Lexikographische Sortierung gilt. BETWEEN 'B' AND 'D' schließt nicht alle Namen ein, die mit D beginnen, da die lexikographische Reihenfolge nicht alle Namen mit D umfasst.
DatentypFalleLösung
Datum mit UhrzeitEndgrenze schließt den Tagesbeginn ein< '2025-01-01' statt <= '2024-12-31'
ZeichenkettenLexikographische GrenzenExplizite Bedingungen mit >= und <
NULL-WerteBedingung wird UNKNOWNNULL explizit prüfen
Wenn ein Operand NULL ist, kann die gesamte BETWEEN-Bedingung UNKNOWN werden, und die Zeile wird ausgeschlossen. *

WHERE und JOINs: Was gehört wohin?

JOIN-Bedingungen gehören in die ON-Klausel. Filter gehören in WHERE. Diese Trennung verbessert Lesbarkeit und verhindert logische Fehler bei OUTER JOINs.

Schritt-für-Schritt-Infografik: So funktioniert die SQL WHERE-Klausel
-- Sauber: ON für Verknüpfung, WHERE für Filter
SELECT k.name, b.betrag
FROM kunden k
INNER JOIN bestellungen b ON k.id = b.kunden_id
WHERE b.betrag > 200 AND k.land = 'DE';

Würde man b.betrag > 200 in die ON-Klausel schreiben, verändert das bei einem LEFT JOIN das Ergebnis: Kunden ohne passende Bestellung würden trotzdem erscheinen, aber mit NULL-Werten für die Bestellspalten.

Performance-Regeln für WHERE:

  • Indexe nutzen: Spalten in WHERE-Bedingungen sollten indiziert sein, wenn die Tabelle groß ist.
  • Selektive Filter zuerst: Die Datenbank kann oft früh viele Zeilen ausschließen.
  • Funktionen auf Spalten vermeiden: WHERE YEAR(bestelldatum) = 2024 verhindert Indexnutzung. Besser: WHERE bestelldatum >= '2024-01-01' AND bestelldatum < '2025-01-01'.
Profi-Tipp: Füge Filter in Übungen schrittweise hinzu. Erst eine Bedingung, Ergebnis prüfen, dann die nächste. So erkennst du, welche Bedingung welche Zeilen ausschließt. *

Welche Fehler passieren bei WHERE am häufigsten?

Typische Stolpersteine:

  • NULL mit = vergleichen: WHERE email = NULL gibt immer keine Zeilen zurück. Richtig: WHERE email IS NULL.
  • Implizite Typkonvertierung: WHERE id = '42' kann funktionieren, muss aber nicht. Typen explizit angleichen.
  • Falsche Klammerung bei AND/OR: Ohne Klammern bindet AND stärker als OR.
  • BETWEEN-Grenzen bei Datum: Zeitanteile werden oft vergessen.
  • LIKE mit falscher Collation: Groß-/Kleinschreibung verhält sich datenbankabhängig.
Debug-Checkliste:
  • Einzelne Bedingungen separat testen, um die Fehlerquelle einzugrenzen.
  • NULL-Fälle explizit prüfen: Gibt es NULL-Werte in der gefilterten Spalte?
  • Testdaten mit Randwerten verwenden (NULL, leere Strings, Grenzwerte).
  • EXPLAIN oder den Abfrageplan ansehen, wenn die Abfrage langsam ist.
> Sicherheitshinweis: WHERE-Bedingungen niemals durch Zeichenkettenverkettung mit Benutzereingaben bauen. Das öffnet SQL-Injection-Angriffe. Stattdessen immer Parameterbindung verwenden: WHERE name = ? mit einem vorbereiteten Statement. *

Drei Übungen zur WHERE-Klausel mit Lösungen

Musterdatensatz produkte: id, name, kategorie, preis, lager_datum

Übung 1: Einfacher Filter mit = und IN

Aufgabe: Alle Produkte der Kategorien „Elektronik“ und „Zubehör“ mit einem Preis unter 100 ausgeben.

SELECT name, preis
FROM produkte
WHERE kategorie IN ('Elektronik', 'Zubehör')
  AND preis < 100;

Erwartetes Ergebnis: Nur Zeilen, wo kategorie einer der beiden Werte ist und preis kleiner 100.

Übung 2: Kombinierte Bedingungen mit AND/OR

Aufgabe: Produkte, die entweder teurer als 500 sind oder im Lager seit vor dem 1. Januar 2023 liegen, aber nicht aus der Kategorie „Auslauf“.

SELECT name, preis, lager_datum
FROM produkte
WHERE (preis > 500 OR lager_datum < '2023-01-01')
  AND kategorie <> 'Auslauf';

Ohne die äußeren Klammern würde AND die OR-Bedingung aufteilen. Ergebnis wäre falsch.

Übung 3: LIKE und BETWEEN mit Datum

Aufgabe: Produkte, deren Name mit „Pro“ beginnt und die zwischen dem 1. März 2023 und dem 31. Dezember 2023 eingelagert wurden.

SELECT name, lager_datum
FROM produkte
WHERE name LIKE 'Pro%'
  AND lager_datum >= '2023-03-01'
  AND lager_datum < '2024-01-01';

Warum < '2024-01-01' statt <= '2023-12-31'? Weil Datumsfelder mit Zeitanteil den 31.12. um 23:59 Uhr sonst ausschließen würden.

> Für alle drei Übungen gilt: Wer diese Abfragen direkt im Browser ausprobieren will, findet bei den SQL-Übungen von Logicexcel passende interaktive Aufgaben mit sofortigem Feedback.

Profi-Tipp: Schreib die Lösung zuerst ohne WHERE, prüfe die Gesamtmenge, und füge dann die Bedingungen schrittweise hinzu. So siehst du sofort, wie viele Zeilen jede Bedingung ausschließt. *

Wichtige Erkenntnisse

Die WHERE-Klausel ist der zentrale Filtermechanismus in SQL: richtig eingesetzt, verbessert sie gleichzeitig Korrektheit, Lesbarkeit und Abfragegeschwindigkeit.

ThemaDetails
Position und GeltungsbereichWHERE folgt auf FROM und gilt für SELECT, UPDATE und DELETE.
NULL-BehandlungNiemals = NULL schreiben; immer IS NULL oder IS NOT NULL verwenden.
Klammerung bei AND/ORAND bindet stärker als OR; Klammern immer setzen, wenn beide gemischt werden.
Performance-RegelFunktionen auf Spalten in WHERE vermeiden, da sie die Indexnutzung verhindern.
LogicexcelInteraktive SQL-Übungen mit sofortigem Feedback, kostenlos und ohne Anmeldung.
*

Warum aktives Üben bei WHERE-Klauseln den Unterschied macht

Wer SQL-Filterbedingungen nur liest, versteht sie halb. Wer sie schreibt und das Ergebnis sofort sieht, versteht sie ganz. Das ist der Gedanke hinter Logicexcel: nicht erklären, bis der Leser nickt, sondern eine Aufgabe stellen, bis er die richtige Antwort tippt.

Logicexcel bietet über 77 Lektionen, darunter SQL-Aufgaben, die genau diese WHERE-Logik trainieren. Kein Account nötig, keine Installation. Der Fortschritt wird lokal gespeichert. Wer möchte, legt einen Account an. Das Feedback kommt sofort nach jeder Eingabe, nicht am Ende eines Kapitels.

Für Excel-Anwender ist das besonders nützlich: SQL-Filterlogik und Excel-Bedingungslogik (etwa die WENN-Funktion) denken ähnlich. Wer beides parallel übt, baut schneller ein stabiles mentales Modell auf.

*

Kostenlos SQL üben: Jetzt direkt starten

Wer WHERE-Klauseln wirklich beherrschen will, braucht keine langen Kurse. Logicexcel bietet kostenlose SQL-Übungen direkt im Browser: interaktive Aufgaben, sofortiges Feedback, kein Anmeldezwang.

Logicexcel

Die Aufgaben decken genau die Themen ab, die dieser Artikel behandelt: einfache Filter, kombinierte Bedingungen, LIKE-Muster und BETWEEN-Bereiche. Einfach die Übungsseite öffnen und die erste Aufgabe starten.

*

Weiterführende Dokumentation und Referenzen

Für datenbank-spezifische Details lohnt sich ein Blick in die offiziellen Quellen:

  • Microsoft Learn: WHERE (Transact-SQL) — vollständige Syntaxreferenz für SQL Server und Azure SQL
  • Microsoft Learn: LIKE (Transact-SQL) — Wildcard-Verhalten, Collation und Escape-Zeichen
  • Microsoft Learn: BETWEEN (Transact-SQL) — inklusive Grenzen, NULL-Verhalten
  • MariaDB: BETWEEN AND — Typkonvertierung und Zeichenkettenfallen
  • LearnSQL.de: WHERE-Klausel — deutschsprachige Einführung mit Beispielen
  • Snowflake: WHERE-Klausel — ON/WHERE-Trennung bei JOINs
  • Wikibooks: Einführung in SQL — Performance-Regeln und Indexnutzung
Collation-Einstellungen und datenbankspezifische Besonderheiten immer in der Dokumentation des jeweiligen Datenbanksystems nachschlagen. *

FAQ

Was macht die WHERE-Klausel in SQL?

WHERE filtert Zeilen in einer Abfrage basierend auf einer logischen Bedingung. Sie steht nach FROM und gilt für SELECT, UPDATE und DELETE.

Warum funktioniert WHERE spalte = NULL nicht?

NULL ist kein Wert, sondern ein unbekannter Zustand. Vergleiche mit = liefern immer UNKNOWN. Richtig ist WHERE spalte IS NULL.

Was ist der Unterschied zwischen WHERE und HAVING?

WHERE filtert einzelne Zeilen vor der Gruppierung. HAVING filtert Gruppen nach GROUP BY und erlaubt Aggregatfunktionen wie SUM oder COUNT.

Wie verhält sich LIKE bei Groß- und Kleinschreibung?

Das hängt von der Collation der Datenbank ab. PostgreSQL bietet ILIKE für Groß-/Kleinschreibungs-unabhängige Suche; SQL Server folgt der Datenbankeinstellung.

Wo kann ich SQL-WHERE-Klauseln kostenlos üben?

Logicexcel bietet interaktive SQL-Aufgaben direkt im Browser, ohne Anmeldung und mit sofortigem Feedback.

Empfehlung