BETWEEN, IN en inclusieve grenzen
Randgevallen bij grenzen en de manier waarop BETWEEN eindpunten behandelt
BETWEEN, IN en inclusieve grenzen is een gratis Voorbereiding op SQL-sollicitatiegesprekken-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Voorbereiding op SQL-sollicitatiegesprekken. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Waarom grenswaarden kandidaten punten kosten
Bereik- en verzamelfilters lijken eenvoudig, dus interviewers maken de randgevallen expres lastig. BETWEEN sluit beide eindpunten in, IN verbergt een subtiele NULL-valkuil en datumbereiken zijn de plek waar afwijkingen van één rapportages ongemerkt kunnen vervalsen.
In deze les leer je precies hoe BETWEEN met zijn eindpunten omgaat, wanneer IN duidelijker is dan aaneengeschakelde OR-voorwaarden en welk halfopen bereikpatroon professionals voor datums gebruiken.
BETWEEN sluit beide grenzen in
col BETWEEN a AND b is een korte vorm van col >= a AND col <= b. Beide eindpunten zijn inbegrepen.
price BETWEEN 10 AND 20 levert dus rijen op waarin price precies 10 of precies 20 is, naast alle waarden ertussenin. Het meest voorkomende foute antwoord tijdens interviews is dat de bovengrens niet zou zijn inbegrepen.
SELECT *
FROM products
WHERE price BETWEEN 10 AND 20;
-- equivalent to: price >= 10 AND price <= 20De volgorde van argumenten is belangrijk
BETWEEN vereist eerst de lagere waarde. col BETWEEN 20 AND 10 wordt uitgebreid naar col >= 20 AND col <= 10. Dat kan nooit waar zijn, dus de query levert nul rijen op in plaats van een fout.
Dit is een geliefde valkuil: de query wordt zonder problemen uitgevoerd, levert niets op en de kandidaat neemt aan dat de gegevens leeg zijn. Zet de kleinere grenswaarde altijd eerst.
SELECT *
FROM products
WHERE price BETWEEN 20 AND 10;
-- returns NOTHING, not an errorDe afwijking van één in een datumbereik
Als je vraagt om heel januari, schrijven veel kandidaten order_date BETWEEN '2024-01-01' AND '2024-01-31'. Als order_date een tijdstempel is, valt alles na middernacht op de 31e weg, omdat 2024-01-31 2024-01-31 00:00:00 betekent.
Een bestelling om 14.00 uur op 31 januari wordt uitgesloten. Met zuivere DATE-kolommen werkt dit wel, maar je kunt het type niet zomaar aannemen.
SELECT *
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- silently excludes Jan 31 afternoon if order_date is a timestampDe oplossing met een halfopen bereik
Het professionele patroon voor datums is een halfopen interval: groter dan of gelijk aan de start en strikt kleiner dan de volgende periode. Dit werkt correct voor zowel DATE als TIMESTAMP en vereist geen kennis van de tijdresolutie van de kolom.
Let erop dat de bovengrens de eerste dag van februari is, niet de laatste dag van januari. Zo vang je elk moment in januari.
SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
AND order_date < '2024-02-01';NOT BETWEEN
col NOT BETWEEN a AND b wordt uitgebreid naar col < a OR col > b. Het sluit beide eindpunten en alles ertussen uit.
Let op: als col NULL is, evalueert NOT BETWEEN naar UNKNOWN. NULL-rijen worden dus uitgesloten, net als bij gewone BETWEEN. NULL-waarden voldoen in geen van beide richtingen aan een bereiktest.
SELECT *
FROM products
WHERE price NOT BETWEEN 10 AND 20;
-- price < 10 OR price > 20IN voor lidmaatschap van een verzameling
col IN (a, b, c) is een korte vorm van col = a OR col = b OR col = c. Dit is de duidelijke manier om te testen of een waarde deel uitmaakt van een kleine, vaste verzameling.
Het leest beter dan een reeks OR-voorwaarden en voorkomt het probleem met haakjes rond voorrang volledig, omdat de hele verzamelingstest één predicaat is.
SELECT *
FROM orders
WHERE status IN ('pending', 'shipped', 'delivered');De NULL-valkuil bij NOT IN
Dit is de meest gevreesde IN-vraag. Als de lijst of subquery achter NOT IN één enkele NULL bevat, kan het hele predicaat naar UNKNOWN evalueren en nul rijen opleveren.
De reden: x NOT IN (1, NULL) wordt x <> 1 AND x <> NULL, en x <> NULL is nooit waar maar UNKNOWN. De hele AND kan dus nooit waar zijn.
SELECT *
FROM employees
WHERE manager_id NOT IN (SELECT id FROM managers);
-- returns NOTHING if any managers.id is NULLNOT IN corrigeren
Twee robuuste oplossingen voor de NOT IN-valkuil met NULL:
- Filter NULL-waarden uit de subquery met
WHERE id IS NOT NULL - Beter: herschrijf de query als
NOT EXISTS, dat van nature correct met NULL-waarden omgaat
Interviewers beschouwen NOT EXISTS als het antwoord op seniorniveau, omdat je de valkuil er volledig mee omzeilt en het vaak betere uitvoeringsplannen oplevert.
SELECT e.*
FROM employees e
WHERE NOT EXISTS (
SELECT 1 FROM managers m WHERE m.id = e.manager_id
);IN met een subquery
IN accepteert een subquery die één kolom teruggeeft. WHERE customer_id IN (SELECT customer_id FROM vip) houdt rijen over waarvan de klant deel uitmaakt van de VIP-verzameling.
Gewoon IN, dus niet NOT IN, is veilig met NULL-waarden in de subquery: een NULL in de lijst levert simpelweg nooit een overeenkomst op, maar heeft geen invloed op de rijen die wel overeenkomen. De valkuil geldt specifiek voor NOT IN.
SELECT *
FROM orders
WHERE customer_id IN (SELECT customer_id FROM vip_customers);IN met meerdere kolommen en rijconstructors
Een veelvoorkomende vervolgvraag is: hoe vergelijk je meer dan één kolom tegelijk? Geef een tupel mee aan IN met een rijconstructor. Daarmee vergelijk je de kolommen positioneel en krijg je een veel duidelijker resultaat dan met een keten van OR (a = .. AND b = ..).
- Dit leest duidelijk en werkt ook voor lange lijsten met toegestane waarden.
- Elke tupel moet de kolommen in dezelfde volgorde vermelden.
SELECT *
FROM orders
WHERE (customer_id, status) IN ((101, 'paid'), (102, 'shipped'));Snelle controle
Onthoud hoe BETWEEN met zijn eindpunten omgaat.
Samenvatting
Belangrijkste punten:
BETWEEN a AND bsluit beide eindpunten in; de ondergrens moet eerst komen, anders krijg je nul rijen- Gebruik voor tijdstempelbereiken een halfopen interval:
>= start AND < next_period INis duidelijk voor lidmaatschap van een verzameling en veilig met NULL-waardenNOT INmet eenNULLin de lijst levert niets op; herschrijf dit alsNOT EXISTS
Het terugkerende thema: een filter kan perfect worden uitgevoerd en toch stilletjes de verkeerde rijen opleveren.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “BETWEEN, IN en inclusieve grenzen” gratis?
Ja — de volledige tekst van “BETWEEN, IN en inclusieve grenzen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Voorbereiding op SQL-sollicitatiegesprekken wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Voorbereiding op SQL-sollicitatiegesprekken bevat in totaal 4 lessen.
Wat leer ik in “BETWEEN, IN en inclusieve grenzen”?
Randgevallen bij grenzen en de manier waarop BETWEEN eindpunten behandelt Je oefent met Voorbereiding op SQL-sollicitatiegesprekken door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Voorbereiding op SQL-sollicitatiegesprekken te beginnen?
Ervaring vooraf is niet nodig. Voorbereiding op SQL-sollicitatiegesprekken op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “BETWEEN, IN en inclusieve grenzen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Voorbereiding op SQL-sollicitatiegesprekken?
Ja. Elke les over Voorbereiding op SQL-sollicitatiegesprekken bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- AND/OR-prioriteit en haakjesgebruik
- BETWEEN, IN en inclusieve grenzen
- LIKE, wildcards en escaping
- Filteren op berekende waarden