IN, BETWEEN und LIKE
Kurz gesagt: IN prüft, ob ein Wert in einer Liste steht, BETWEEN, ob er zwischen zwei Grenzen liegt, und LIKE vergleicht einen Teil eines Textes mit einem Muster aus % und _.
Problem
Drei Städte, drei ORs
Der Kurierdienst für den Nordosten und die Küste beliefert Varna, Burgas und Ruse. Du brauchst die Kunden aus diesen Städten:
Es funktioniert, aber bei zehn Städten wird die Bedingung zu einer Zeile voller ORs, in der man leicht eines vergisst.
Die Idee
IN: eines aus der Liste
IN prüft, ob ein Wert in einer Liste steht:
Dasselbe Ergebnis, und die Liste liest sich auf einen Blick. NOT IN ist das Gegenteil: alles außer den aufgeführten.
Die Idee
BETWEEN: zwischen zwei Grenzen
BETWEEN a AND b heißt „von a bis b“, einschließlich a und b:
Datumsangaben stehen in der Datenbank als Text wie 2026-03-31. Solcher Text sortiert sich so wie Datumsangaben, also funktioniert BETWEEN auch dafür. Die Bestellungen aus dem ersten Quartal 2026:
Genauer, für Neugierige
Hat das Datum auch eine Uhrzeit (2026-03-31 18:20), verpasst BETWEEN '2026-01-01' AND '2026-03-31' den 31. März nach Mitternacht, denn '2026-03-31 18:20' kommt nach '2026-03-31'. Dann ist es sicherer, ordered_at >= '2026-01-01' AND ordered_at < '2026-04-01' zu schreiben.
Probier es aus
Die offenen Bestellungen
Zeige Nummer, Datum und Status der Bestellungen, die weder zugestellt (delivered) noch storniert (cancelled) sind.
Lösung
SELECT id, ordered_at, status FROM orders
WHERE status NOT IN ('delivered', 'cancelled');WHERE status NOT IN ('delivered', 'cancelled'). 32 Bestellungen warten: new, paid oder shipped.
Die Idee
LIKE: nach einem Teil des Textes
LIKE vergleicht mit einem Muster. Im Muster bedeutet % „beliebiger Text, auch keiner“ und _ „genau ein Zeichen“.
'%brot%' findet jeden Namen, in dem irgendwo „brot“ steht. 'brot%' würde Namen suchen, die damit beginnen, und '%brot' solche, die damit enden.
Sieh es dir an
Groß- und Kleinschreibung
Welche Produkte heißen „butter“ und „äpfel“? Beides klein geschrieben. Führe aus:
„Butter“ kommt heraus, obwohl es mit großem B gespeichert ist. „Äpfel“ fehlt. In SQLite ignoriert LIKE die Groß- und Kleinschreibung, aber nur für die Buchstaben A–Z. Für Umlaute sind ein großes Ä und sein kleines ä zwei verschiedene Zeichen: Auf den deutschen Seiten dieses Kurses findet eine Suche nach dem klein geschriebenen „äpfel“ die „Äpfel“ nicht. Dasselbe gilt für Ö und Ü.
Genauer, für Neugierige
Datenbanken unterscheiden sich hier. In PostgreSQL beachtet LIKE immer die Schreibweise, und ILIKE ignoriert sie für jedes Alphabet. In MySQL hängt es von der Einstellung für den Textvergleich ab (Collation), und meist wird die Schreibweise ignoriert. Wenn eine Suche für jedes Alphabet funktionieren soll, braucht SQLite eine Erweiterung (ICU), oder du führst eine eigene Spalte mit dem Text in Kleinbuchstaben.
Probier es aus
Die Milch
Zeige Name und Preis der Produkte mit „milch“ im Namen.
Lösung
SELECT name, price FROM products WHERE name LIKE '%milch%';WHERE name LIKE '%milch%': die Frischmilch. Joghurt ist ein Milchprodukt, aber das Wort steht nicht in seinem Namen. Eine Suche findet den Text, nicht die Bedeutung.
Übung
Zwei Aufgaben
1. Die Bestellungen aus dem Sommer 2026 (Juni, Juli, August): Nummer, Kunde und Datum.
Die Bestellungen zwischen dem 1. Juni und dem 31. August 2026:
Lösung
SELECT id, customer_id, ordered_at FROM orders
WHERE ordered_at BETWEEN '2026-06-01' AND '2026-08-31';WHERE ordered_at BETWEEN '2026-06-01' AND '2026-08-31'. Es geht auch mit >= und <=.
2. Die Kunden, deren Name mit „M“ beginnt: Name und Stadt.
Die Kunden, deren Name mit „M“ beginnt:
Lösung
SELECT name, city FROM customers WHERE name LIKE 'M%';WHERE name LIKE 'M%'. Maria und Martin.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: SELECT: Spalten auswählen · WHERE: Zeilen filtern
- Geht weiter in: NULL: kein Wert · Textfunktionen · CASE und fehlende Werte · Unterabfragen
- Aufgaben zum Thema: Daten lesen