BETWEEN, IN und inklusive Grenzen
Grenzfälle verstehen und erfahren, wie BETWEEN die Endpunkte behandelt
BETWEEN, IN und inklusive Grenzen ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Warum Grenzwerte Bewerber Punkte kosten
Bereichs- und Mengenfilter wirken trivial, deshalb nehmen Interviewer die Randfälle besonders gern aufs Korn. BETWEEN schließt beide Grenzwerte ein, IN verbirgt eine subtile NULL-Falle, und bei Datumsbereichen führen Fehler um einen Tag unbemerkt zu verfälschten Berichten.
In dieser Lektion erfahren Sie genau, wie BETWEEN seine Grenzwerte behandelt, wann IN sauberer ist als verkettete OR-Ausdrücke und welches halboffene Bereichsmuster Profis für Datumswerte verwenden.
BETWEEN ist an beiden Enden inklusiv
col BETWEEN a AND b ist eine Kurzform für col >= a AND col <= b. Beide Grenzwerte sind eingeschlossen.
price BETWEEN 10 AND 20 liefert also auch Zeilen zurück, deren Preis genau 10 oder genau 20 beträgt, sowie alle Werte dazwischen. Die häufigste falsche Antwort im Vorstellungsgespräch lautet, dass der obere Grenzwert ausgeschlossen sei.
SELECT *
FROM products
WHERE price BETWEEN 10 AND 20;
-- equivalent to: price >= 10 AND price <= 20Die Reihenfolge der Argumente ist wichtig
BETWEEN erwartet zuerst den unteren Wert. col BETWEEN 20 AND 10 wird zu col >= 20 AND col <= 10 erweitert. Das kann niemals wahr sein und liefert daher keine Zeilen statt eines Fehlers.
Das ist eine beliebte Falle: Die Abfrage läuft problemlos, liefert nichts zurück, und der Bewerber nimmt an, die Daten seien leer. Setzen Sie den kleineren Grenzwert immer an die erste Stelle.
SELECT *
FROM products
WHERE price BETWEEN 20 AND 10;
-- returns NOTHING, not an errorDer Off-by-one-Fehler bei Datumsbereichen
Wenn Sie nach dem gesamten Januar fragen, schreiben viele Bewerber order_date BETWEEN '2024-01-01' AND '2024-01-31'. Wenn order_date ein Zeitstempel ist, gehen dabei alle Werte nach Mitternacht am 31. verloren, weil 2024-01-31 2024-01-31 00:00:00 bedeutet.
Eine Bestellung am 31. Januar um 14 Uhr wird ausgeschlossen. Bei reinen DATE-Spalten funktioniert das, aber Sie dürfen den Typ nicht voraussetzen.
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- silently excludes Jan 31 afternoon if order_date is a timestampDie Lösung mit dem halboffenen Bereich
Das professionelle Muster für Datumswerte ist ein halboffenes Intervall: größer oder gleich dem Anfang und strikt kleiner als der nächste Zeitraum. Es ist sowohl für DATE als auch für TIMESTAMP korrekt und setzt keine Kenntnis der zeitlichen Auflösung der Spalte voraus.
Beachten Sie, dass der obere Grenzwert der erste Tag im Februar ist, nicht der letzte Tag im Januar. So wird jeder Zeitpunkt im Januar erfasst.
SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
AND order_date < '2024-02-01';NOT BETWEEN
col NOT BETWEEN a AND b wird zu col < a OR col > b erweitert. Beide Grenzwerte und alle Werte dazwischen werden ausgeschlossen.
Achtung: Wenn col NULL ist, wird NOT BETWEEN zu UNKNOWN ausgewertet. NULL-Zeilen werden daher genauso wie bei einem einfachen BETWEEN ausgeschlossen. NULL-Werte erfüllen einen Bereichstest in keiner der beiden Richtungen.
SELECT *
FROM products
WHERE price NOT BETWEEN 10 AND 20;
-- price < 10 OR price > 20IN als Zugehörigkeit zu einer Menge
col IN (a, b, c) ist eine Kurzform für col = a OR col = b OR col = c. Damit testen Sie sauber, ob ein Wert zu einer kleinen, festgelegten Menge gehört.
Das ist besser lesbar als eine Kette von OR-Ausdrücken und vermeidet das Problem mit der Klammerung aufgrund der Operatorrangfolge vollständig, da der gesamte Mengentest ein einziges Prädikat ist.
SELECT *
FROM orders
WHERE status IN ('pending', 'shipped', 'delivered');Die NULL-Falle bei NOT IN
Dies ist die gefürchtetste IN-Frage. Wenn die Liste oder Unterabfrage hinter NOT IN auch nur ein einziges NULL enthält, kann das gesamte Prädikat zu UNKNOWN ausgewertet werden und keine Zeilen zurückgeben.
Der Grund: x NOT IN (1, NULL) wird zu x <> 1 AND x <> NULL, und x <> NULL ist niemals wahr, sondern UNKNOWN. Das gesamte AND kann daher niemals wahr sein.
SELECT *
FROM employees
WHERE manager_id NOT IN (SELECT id FROM managers);
-- returns NOTHING if any managers.id is NULLNOT IN korrigieren
Es gibt zwei robuste Lösungen für die NOT IN-NULL-Falle:
- Filtern Sie NULL-Werte mit
WHERE id IS NOT NULLaus der Unterabfrage heraus - Noch besser: Schreiben Sie die Abfrage in
NOT EXISTSum, das NULL-Werte konstruktionsbedingt korrekt behandelt
Interviewer betrachten NOT EXISTS als die Antwort auf Senior-Niveau, weil es die Falle vollständig umgeht und häufig auch einen besseren Ausführungsplan ermöglicht.
SELECT e.*
FROM employees e
WHERE NOT EXISTS (
SELECT 1 FROM managers m WHERE m.id = e.manager_id
);IN mit einer Unterabfrage
IN akzeptiert eine Unterabfrage, die eine Spalte zurückgibt. WHERE customer_id IN (SELECT customer_id FROM vip) behält die Zeilen bei, deren Kunde zur VIP-Menge gehört.
Ein einfaches IN (kein NOT IN) ist bei NULL-Werten in der Unterabfrage sicher: Ein NULL-Wert in der Liste findet einfach keine Übereinstimmung, beeinträchtigt aber nicht die Zeilen, die tatsächlich übereinstimmen. Die Falle betrifft ausschließlich NOT IN.
SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM vip_customers);Mehrspaltiges IN mit Row-Constructors
Eine häufige Nachfrage: Wie können Sie nach mehr als einer Spalte gleichzeitig abgleichen? Übergeben Sie ein Tupel an IN, indem Sie einen Row-Constructor verwenden – dadurch werden die Spalten positionsbezogen verglichen, und die Lösung ist wesentlich übersichtlicher als eine Verkettung von OR (a = .. AND b = ..).
- Die Schreibweise ist übersichtlich und lässt sich auf lange Auswahllisten erweitern.
- Jedes Tupel muss die Spalten in derselben Reihenfolge aufführen.
SELECT *
FROM orders
WHERE (customer_id, status) IN ((101, 'paid'), (102, 'shipped'));Kurzer Check
Rufen Sie sich ins Gedächtnis, wie BETWEEN seine Grenzwerte behandelt.
Zusammenfassung
Die wichtigsten Punkte:
BETWEEN a AND bschließt beide Grenzwerte ein; der untere Grenzwert muss zuerst kommen, sonst erhalten Sie keine Zeilen- Verwenden Sie für Zeitstempelbereiche ein halboffenes Intervall:
>= start AND < next_period INprüft die Zugehörigkeit zu einer Menge sauber und ist sicher bei NULL-WertenNOT INliefert nichts zurück, sobald die Liste einNULLenthält; schreiben Sie die Abfrage stattdessen alsNOT EXISTS
Das wiederkehrende Muster: Ein Filter kann problemlos ausgeführt werden und dennoch unbemerkt die falschen Zeilen zurückgeben.
Häufig gestellte Fragen
Ist die Lektion „BETWEEN, IN und inklusive Grenzen“ kostenlos?
Ja — der vollständige Text von „BETWEEN, IN und inklusive Grenzen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „BETWEEN, IN und inklusive Grenzen“?
Grenzfälle verstehen und erfahren, wie BETWEEN die Endpunkte behandelt Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Coding Interview Prep zu starten?
Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „BETWEEN, IN und inklusive Grenzen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?
Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- AND/OR-Rangfolge und Klammerung
- BETWEEN, IN und inklusive Grenzen
- LIKE, Platzhalter und Escaping
- Nach berechneten Werten filtern