SQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen
NULL veroorzaakt enkele van de stilste bugs in SQL, met query’s die zonder fouten worden uitgevoerd en toch rijen verliezen of gemiddelden scheeftrekken. Leer hoe NULL zich echt gedraagt, met geteste voorbeelden, en hoe u er veilig mee om kunt gaan.
- NULL betekent een ontbrekende of onbekende waarde. Het is niet nul en het is geen lege string.
- Test het met
IS NULL, want= NULLkomt nooit met iets overeen. - De meeste berekeningen met NULL leveren NULL op, en
WHEREbehoudt alleen rijen die zeker waar zijn. - Aggregaten slaan NULL’s over, waardoor een gemiddelde stilletjes kan worden gewijzigd.
Een zoekopdracht wordt zonder fouten uitgevoerd en retourneert een redelijk ogend getal, maar er ontbreken rijen en het gemiddelde is verkeerd. SQL NULL-waarden zijn vaak de oorzaak. NULL gedraagt zich niet als een normale waarde, en dat valt zowel beginners als ervaren ontwikkelaars op.
Deze handleiding laat precies zien hoe NULL zich gedraagt. We hebben elke query uitgevoerd in SQLite 3.50 en de weergegeven resultaten zijn afkomstig van die run. Het grootste deel van dit gedrag is standaard-SQL, en we merken op waar databases verschillen, zoals de NULL-sorteervolgorde en de manier waarop Oracle met lege tekenreeksen omgaat.
Wat is NULL?
NULL is een markering die betekent dat een waarde ontbreekt of onbekend is. Het is geen waarde in de gebruikelijke zin, dus dit zijn allemaal verschillende dingen:
| Waarde | Betekenis | Voorbeeld voor een telefoonzuil |
|---|---|---|
NUL |
Onbekend of niet verstrekt | Wij kennen het nummer niet |
'' |
Een bekende, lege tekstwaarde | Als blanco ingediend |
0 |
Het getal nul | Niet relevant voor tekst, maar reëel voor bedragen |
Het verschil is vooral van belang voor de bedragen. Een bonus van 0 betekent dat de persoon niets heeft ontvangen. Een NULL-bonus betekent dat niemand het nog weet.
De voorbeeldtafel
CREATE TABLE employees (
id INT, name TEXT, phone TEXT, bonus INT, manager_id INT
);
INSERT INTO employees VALUES
(1,'Meera','555-0101',500,NULL),
(2,'Arjun',NULL,300,1),
(3,'Sara','',NULL,1),
(4,'Ravi',NULL,NULL,2);
Merk op dat Sara een lege string voor de telefoon heeft, terwijl Arjun en Ravi NULL hebben. De twee worden heel verschillend behandeld.
Testen op NULL
Dit is de fout die bijna iedereen in eerste instantie maakt:
SELECT name FROM employees WHERE phone = NULL;
-- (no rows)
SELECT name FROM employees WHERE phone IS NULL;
-- Arjun
-- Ravi
SELECT name FROM employees WHERE phone IS NOT NULL;
-- Meera
-- Sara
De eerste query is geldige SQL en geeft geen fout. Het retourneert eenvoudigweg niets, omdat het vergelijken van iets met NULL nooit waar is. Sara verschijnt onder IS NOT NULL, omdat een lege string een echte waarde is. In Oracle wordt een lege string echter behandeld als NULL, wat een opmerkelijke uitzondering is.
Driewaardige logica
In de meeste programmeertalen is een voorwaarde waar of onwaar. SQL voegt een derde resultaat toe: onbekend. Als je een waarde niet kent, kun je niet zeggen of deze gelijk is aan 5. En van twee onbekende waarden is niet bekend dat ze gelijk zijn, en daarom is NULL = NULL niet waar. In onze test retourneerden al deze NULL:
SELECT NULL = NULL, NULL <> 1, 1 + NULL, 'a' || NULL;
-- NULL | NULL | NULL | NULL
Het combineren van voorwaarden volgt zorgvuldige regels. Hier zijn de resultaten van onze run, waarbij 1 waar is en 0 onwaar:
| Expressie | Resultaat | Waarom |
|---|---|---|
WAAR EN NUL |
NUL | Hangt af van het onbekende deel |
ONWAAR EN NIETIG |
Vals | Vals, wat het onbekende ook is |
WAAR OF NUL |
Waar | Waar, wat het onbekende ook is |
ONWAAR OF NUL |
NUL | Hangt af van het onbekende deel |
NIET NUL |
NUL | Het tegenovergestelde van onbekend is onbekend |
Rijen die verdwijnen van WAAR
WHERE behoudt een rij alleen als de voorwaarde waar is. Rijen waarvan het resultaat onbekend is, worden geschrapt, samen met de rijen die onwaar zijn. Dit leidt tot verrassende resultaten:
SELECT name FROM employees WHERE phone <> '555-0101';
-- Sara
Je zou verwachten dat Arjun en Ravi verschijnen, aangezien hun telefoon zeker niet dat nummer is. Maar hun telefoon is onbekend, dus het resultaat is onbekend, en ze verdwijnen. Om ze op te nemen, moet je dat expliciet zeggen: WHERE phone <> '555-0101' OR phone IS NULL. Negeren helpt ook niet:
SELECT name FROM employees WHERE NOT (bonus > 400);
-- Arjun
Sara en Ravi hebben geen bonus, dus verschijnen ze niet in bonus > 400 en ook niet in de tegenovergestelde film. Dit is een belangrijk ding om te onthouden: een voorwaarde en de ontkenning ervan bestrijken niet altijd elke rij.
COALESCE: zorg voor een terugval
COALESCE retourneert de eerste niet-NULL-waarde in de lijst en werkt in alle grote databases:
SELECT COALESCE(NULL, NULL, 'third', 'fourth');
-- third
SELECT name, COALESCE(phone, 'no phone') FROM employees;
-- Meera | 555-0101
-- Arjun | no phone
-- Sara |
-- Ravi | no phone
Sara lijkt nog steeds leeg, omdat een lege string niet NULL is. Soortgelijke functies bestaan, zoals IFNULL in MySQL en SQLite, ISNULL in SQL Server en NVL in Oracle. COALESCE is de draagbare keuze. Ons eerdere punt over berekeningen is hier ook van toepassing. bonus + 100 geeft NULL voor iedereen zonder bonus, dus schrijf COALESCE(bonus, 0) + 100 als het behandelen van een ontbrekende bonus als nul correct is voor uw bedrijf.
NULLIF: verander een waarde in NULL
NULLIF(a, b) retourneert NULL als de twee waarden gelijk zijn, en retourneert anders a. Twee toepassingen zijn bijzonder nuttig. Het kan tijdelijke waarden opschonen:
SELECT name, NULLIF(phone, '') FROM employees WHERE id = 3;
-- Sara | NULL
SELECT name FROM employees
WHERE COALESCE(NULLIF(phone, ''), '') = '';
-- Arjun
-- Sara
-- Ravi
Die tweede query is een handige manier om waarden te vinden die “ontbrekend of leeg” zijn. Het kan ook beschermen tegen delen door nul, wat in veel databases een fout veroorzaakt:
SELECT total / NULLIF(quantity, 0) FROM sales;
Wanneer quantity 0 is, levert dit NULL op in plaats van dat het mislukt. In onze test retourneerde SELECT 100 / NULLIF(0, 0) NULL.
Aggregaten slaan NULL over
Dit is waar NULL de meeste schade aanricht aan rapporten:
SELECT COUNT(*), COUNT(bonus), SUM(bonus), AVG(bonus),
AVG(COALESCE(bonus, 0))
FROM employees;
-- 4 | 2 | 800 | 400.0 | 200.0
| Expressie | Resultaat | Wat het betekent |
|---|---|---|
COUNT(*) |
4 | Alle rijen |
COUNT(bonus) |
2 | Alleen rijen met een bonus |
SUM(bonus) |
800 | NULL’s worden genegeerd |
AVG(bonus) |
400 | 800 gedeeld door 2, niet door 4 |
AVG(COALESCE(bonus, 0)) |
200 | 800 gedeeld door 4 |
Dus wat is de gemiddelde bonus, 400 of 200? Het hangt af van wat NULL betekent in uw gegevens. Als NULL betekent dat er geen bonus is betaald, dan is 200 juist. Als het betekent ‘nog niet besloten’, dan heeft 400 wellicht gelijk. De database kan deze beslissing niet voor u nemen, dus de vraag moet naar iemand gaan die de business kent.
Een gerelateerde valkuil: SUM zonder waarden is NULL in plaats van 0. Toen we alleen rijen optelden zonder bonus, kregen we NULL, terwijl COUNT 0 retourneerde. Applicatiecode die een getal verwacht, kan hierop crashen, dus wrap it: COALESCE(SUM(bonus), 0).
Tip: Als het totaal van een rapport er niet goed uitziet, vergelijk dan COUNT(*) met COUNT(column). Elke opening ertussen vertelt u meteen hoeveel NULL’s die kolom heeft.
GROUP BY, sorteren en DISTINCT
Hoewel NULL’s in vergelijkingen “niet gelijk” zijn, behandelen deze bewerkingen ze als één groep:
SELECT bonus, COUNT(*) FROM employees GROUP BY bonus ORDER BY bonus;
-- NULL | 2
-- 300 | 1
-- 500 | 1
SELECT DISTINCT bonus FROM employees;
-- 500, 300, NULL
Zie SQL GROUP BY en HAVING voor meer informatie over groeperen. Sorteervolgorde is waar databases echt van verschillen. SQLite en MySQL behandelen NULL als de kleinste waarde, terwijl PostgreSQL en Oracle deze als de grootste behandelen. Dus dezelfde ORDER BY bonus DESC kan NULL’s als laatste in de ene en als eerste in de andere plaatsen. Met PostgreSQL, Oracle en moderne SQLite kunt u dit rechtstreeks aangeven met behulp van NULLS FIRST of NULLS LAST.
Sluit zich aan
Een join-voorwaarde die gebruik maakt van = komt nooit overeen met NULL, dus rijen met een NULL-sleutel vallen weg uit een inner join:
SELECT e.name FROM employees e
JOIN employees m ON m.id = e.manager_id;
-- Arjun, Sara, Ravi (Meera is gone)
SELECT e.name, m.name FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
-- Meera | NULL
-- Arjun | Meera
-- Sara | Meera
-- Ravi | Arjun
Meera heeft geen manager, dus een inner join laat stilletjes dat rijtje vallen. A LEFT JOIN behoudt het, en creëert ook eigen NULL’s voor de ontbrekende zijde. Lees meer in SQL-joins uitgelegd.
De NIET IN-val
Eén enkele NULL in een NOT IN lijst wist elk resultaat:
SELECT name FROM employees WHERE manager_id NOT IN (1);
-- Ravi
SELECT name FROM employees WHERE manager_id NOT IN (1, NULL);
-- (no rows)
De tweede vorm betekent manager_id <> 1 AND manager_id <> NULL, en dat laatste kan nooit waar zijn. Dit is vooral gevaarlijk bij subquery’s, waarbij een NULL onopgemerkt kan binnenkomen. Gebruik in plaats daarvan NOT EXISTS, zoals uitgelegd in onze tutorial over SQL-subquery’s. Meera ontbreekt ook in het eerste resultaat, omdat manager_id van die rij NULL is.
Ontwerpen met NULL
- Gebruik standaard
NOT NULL. Sta NULL alleen toe als er echt een waarde kan ontbreken. - Voeg zinvolle standaardwaarden toe. Bijvoorbeeld
quantity INT NOT NULL DEFAULT 0. - Gebruik geen magische waarden. Een datum van 01-01-1900 of een leeftijd van -1 die in de plaats komt van ‘onbekend’ zal uw berekeningen verpesten.
- Ken het UNIEKE gedrag. De meeste databases staan meerdere NULL’s toe in een
UNIQUEkolom, en onze test heeft er twee zonder fouten ingevoegd. SQL Server is een uitzondering, omdat dit normaal gesproken toegestaan is. - Houd er rekening mee dat een primaire sleutel niet NULL kan zijn. Zie primaire sleutel versus externe sleutel.
- Test met NULL’s. Testgegevens zonder NULL’s verbergen deze bugs. Voeg ze expres toe, net als bij andere randgevallen.
Tot slot
Behandel NULL als “onbekend”, en het meeste gedrag begint logisch te worden: onbekend plus één is onbekend, en onbekend is gelijk aan onbekend waarvan niet bekend is dat het waar is. Controleer deze week een van uw eigen rapporten. Controleer null-kolommen met behulp van COUNT(*) tegen COUNT(column), zoek naar NOT IN en beslis wat NULL in elk gemiddelde zou moeten betekenen.
Veelgestelde vragen
Wat is NULL in SQL?
NULL is een markering voor een ontbrekende of onbekende waarde. Het verschilt van nul en van een lege string, en vereist een speciale behandeling bij vergelijkingen.
Waarom werkt = NULL niet?
Als je iets vergelijkt met NULL, krijg je onbekend in plaats van waar, dus WHERE gooit de rij weg. Gebruik IS NULL of IS NOT NULL om dit te testen.
Wat is het verschil tussen COALESCE en ISNULL?
COALESCE is standaard SQL en accepteert veel argumenten. ISNULL is specifiek voor SQL Server en er zijn er twee nodig. Voor draagbare code geeft u de voorkeur aan COALESCE.
Bevat COUNT NULL-waarden?
COUNT(*) telt alle rijen, inclusief de rijen met NULL’s. COUNT(kolom) telt alleen rijen waarbij die kolom niet NULL is, wat een kleiner getal kan opleveren.
Is NULL hetzelfde als een lege string?
Nee, in de meeste databases. Een lege tekenreeks is een bekende waarde zonder tekens, en NULL betekent onbekend. Oracle is een opmerkelijke uitzondering, omdat het lege strings als NULL behandelt.
Blijf leren
Hulp nodig met testen, WordPress of SEO?
We helpen teams betere software te leveren en hun sites te laten groeien. Vertel ons waar u mee bezig bent en wij stellen een duidelijke volgende stap voor.
Meer handleidingen over testen, AI en moderne ontwikkeling
Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.
AI-hallucinaties uitgelegd: waarom taalmodellen dingen verzinnen en hoe ze te verminderen
AI-hallucinaties uitgelegd: wat ze zijn, waarom taalmodellen ze produceren, veelvoorkomende typen, hoe je ze kunt verminderen met aarding en aanwijz…
Lees artikel →DevOpsOmgevingsvariabelen uitgelegd: .env-bestanden, geheimen en configuratie goed gedaan
Omgevingsvariabelen uitgelegd met Python-voorbeelden die we hebben uitgevoerd: ze lezen en instellen, waarom elke waarde een string is, .env-bestand…
Lees artikel →SoftwareontwikkelingAPI-snelheidsbeperking uitgelegd: algoritmen, headers en afhandeling van 429-fouten
API-snelheidsbeperking uitgelegd met een simulatie die we hebben uitgevoerd: token-bucket, vast venster, schuifvenster, 429 reacties, headers van sn…
Lees artikel →TestautomatiseringSpotten in Python: unittest.mock, patch en de fouten die tests doen liegen
Spotten in Python met unittest.mock, getest: Mock en return_value, side_effect, patchen waar een naam wordt gebruikt, spec en autospec, spotdatums e…
Lees artikel →SoftwaretestenCodedekking uitgelegd: lijn versus filiaaldekking en wat 100% werkelijk betekent
Codedekking uitgelegd met een echte dekking.py-run: dekking van lijnen, vertakkingen en condities, een rapport lezen, waarom 100% dekking nog steeds…
Lees artikel →Databases & SQLDELETE versus TRUNCATE versus DROP in SQL: verschillen, terugdraaien en wanneer elk te gebruiken
DELETE versus TRUNCATE versus DROP uitgelegd met geteste SQL: wat elk verwijdert, terugdraaien, triggers, identiteitsreset, snelheid en hoe PostgreS…
Lees artikel →Databases & SQLSQL-weergaven uitgelegd: creëer, gebruik en vermijd de valkuilen, met voorbeelden
SQL-weergaven uitgelegd met query's die we hebben uitgevoerd: een weergave maken, live resultaten, kolommen verbergen, prestaties, bijwerkbare en ge…
Lees artikel →SoftwareontwikkelingTypeScript-interface versus type: echte verschillen, getest met de compiler
TypeScript-interface versus type, gecontroleerd met de echte compiler: wat beide kunnen doen, wat slechts één kan doen, samenvoegen van declaraties,…
Lees artikel →SoftwareontwikkelingPython *args en **kwargs uitgelegd: flexibele functies met duidelijke voorbeelden
Python *args en **kwargs uitgelegd met code die we hebben uitgevoerd: in- en uitpakken, parametervolgorde, argumenten die alleen trefwoorden en posi…
Lees artikel →SoftwareontwikkelingPython Lambda-functies: syntaxis, echt gebruik en wanneer u ze niet moet gebruiken
Python lambda-functies uitgelegd met code die we hebben uitgevoerd: syntaxis, sorteren met sleutel, kaart en filter, sluitingen, de laat-bindende va…
Lees artikel →Kunstmatige intelligentieWat zijn AI-agenten? Hoe ze werken, met een eenvoudige agentloop die u kunt uitvoeren
Wat zijn AI-agenten? Een duidelijke gids voor de agentenlus, tools, geheugen en vangrails, met een kleine Python-lus die we hebben uitgevoerd, echte…
Lees artikel →DevOpsMonitoring versus waarneembaarheid: het echte verschil, met logboeken, statistieken en sporen
Monitoring versus waarneembaarheid uitgelegd: bekende en onbekende fouten, logboeken, statistieken en sporen, een walkthrough voor afrekenincidenten…
Lees artikel →DevOpsDocker-volumes versus bindingsmounts: bewaar containergegevens op de juiste manier
Docker-volumes versus bind-mounts uitgelegd: waarom containergegevens verdwijnen, benoemde volumes, bind-mounts, tmpfs, Compose-voorbeelden, back-up…
Lees artikel →TestautomatiseringTDD versus BDD: belangrijkste verschillen, één functie die op beide manieren is gebouwd en wanneer deze moet worden gebruikt
TDD versus BDD uitgelegd met één kortingsfunctie die in beide richtingen is gebouwd: rood-groen-refactor met code die we hebben uitgevoerd, gegeven-…
Lees artikel →SoftwaretestenGebruikersacceptatietesten (UAT): proces, checklist en echte voorbeelden
Gebruikersacceptatietesten uitgelegd: wie voert het uit, hoe het verschilt van QA, een proces in zeven stappen, een UAT-testcase-sjabloon, een check…
Lees artikel →Databases & SQLSQL NULL-waarden uitgelegd: IS NULL, COALESCE, NULLIF en de te vermijden vallen
SQL NULL-waarden uitgelegd met query's die we hebben uitgevoerd: logica met drie waarden, IS NULL, COALESCE, NULLIF, hoe aggregaten, joins en sorter…
Lees artikel →Databases & SQLSQL CASE WHEN-instructie: syntaxis, echte voorbeelden en veelvoorkomende fouten
SQL CASE WHEN uitgelegd met vragen die we hebben uitgevoerd: eenvoudige en doorzochte formulieren, volgorde van de voorwaarden, draaipunten met SUM,…
Lees artikel →SoftwareontwikkelingWat is JWT? JSON-webtokens uitgelegd met een werkend voorbeeld
Wat is JWT? JSON Web Tokens uitgelegd: de drie delen, een token gebouwd en waarmee is geknoeid in de code die we hebben uitgevoerd, JWT versus sessi…
Lees artikel →SoftwareontwikkelingJavaScript-gebeurtenislus uitgelegd: call-stack, microtaken en timers met voorbeelden
De JavaScript-gebeurtenislus uitgelegd met code die we hebben uitgevoerd: call-stack, taak- en microtask-wachtrijen, waarom setTimeout 0 niet onmidd…
Lees artikel →SoftwareontwikkelingPython-generatoren en opbrengst uitgelegd: bespaar geheugen met echte voorbeelden
Python-generatoren en opbrengst uitgelegd met code die we hebben uitgevoerd: hoe ze pauzeren en hervatten, gemeten geheugenbesparingen, pijplijnen, …
Lees artikel →Kunstmatige intelligentieWat zijn inbeddingen? Vectoren en cosinusovereenkomst eenvoudig uitgelegd
Wat zijn insluitingen? Een gids in duidelijke taal over vectoren, cosinusovereenkomst en semantisch zoeken, met een klein voorbeeld dat we hebben ui…
Lees artikel →DevOpsImplementatie van blauwgroen versus kanarie: verschillen, afwegingen en hoe te kiezen
Blauw-groen versus kanarie-implementatie uitgelegd: hoe elk werkt, kosten, risico's en terugdraaien, stabiele gebruikersbucket die we hebben getest,…
Lees artikel →TestautomatiseringSchilferige tests: wat de oorzaak ervan is en hoe u ze voorgoed kunt oplossen
Zwakke tests uitgelegd met demo's die we hebben uitgevoerd: de belangrijkste oorzaken, hoe je er een kunt bevestigen en diagnosticeren, goede oploss…
Lees artikel →SoftwaretestenBelastingtesten versus stresstesten: verschillen, statistieken en k6-voorbeelden
Belastingtesten versus stresstesten uitgelegd: wat elk bewijst, piek- en soak-tests, de statistieken die er toe doen, waarom gemiddelden misleiden, …
Lees artikel →SoftwaretestenTestcase versus testscenario: belangrijkste verschillen, voorbeelden en wanneer deze te gebruiken
Testcase versus testscenario uitgelegd: duidelijke definities, een tabel naast elkaar, één functie voor het opnieuw instellen van wachtwoorden, over…
Lees artikel →Databases & SQLOptimalisatie van SQL-query's: lees uitvoeringsplannen en repareer langzame query's, met timing
Optimalisatie van SQL-query's getest op een miljoen rijen: lees uitvoeringsplannen, voeg de juiste indexen toe, repareer niet-sargeerbare filters, g…
Lees artikel →Databases & SQLSQL UNION versus UNION ALL: verschillen, voorbeelden en geteste prestaties
SQL UNION versus UNION ALL uitgelegd met de query's die we hebben uitgevoerd: duplicaten, de regels volgen beide, een echte databug, gemeten prestat…
Lees artikel →SoftwareontwikkelingJavaScript Fetch API-tutorial: GET, POST, foutafhandeling en time-outs
Een JavaScript Fetch API-tutorial getest tegen een lokale server: GET en POST, waarom 404 niet gooit, een herbruikbare helper, queryreeksen, time-ou…
Lees artikel →SoftwareontwikkelingPython-bestandsverwerking: lezen, schrijven, CSV, JSON en pathlib met voorbeelden
Het verwerken van Python-bestanden uitgelegd met code die we hebben uitgevoerd: open modi, met het lezen van grote bestanden, CSV, JSON, pathlib, bi…
Lees artikel →SoftwareontwikkelingPython-klassen en -objecten: OOP-zelfstudie met echte voorbeelden
Python-klassen en -objecten uitgelegd met code die we hebben uitgevoerd: __init__, methoden, klasse versus instantie-attributen, overerving, eigensc…
Lees artikel →Kunstmatige intelligentieWat is een groot taalmodel? Hoe LLM's werken, uitgelegd zonder de hype
Wat is een groot taalmodel? LLM's uitgelegd in duidelijke taal: tokens, inbedding, aandacht, training, temperatuur- en contextvensters, een kleine d…
Lees artikel →DevOpsLinux-opdrachten voor beginners: de essentiële terminalgids met voorbeelden
Linux-opdrachten voor beginners, gegroepeerd op taak: navigatie, bestanden, logboeken bekijken, grep, pipelines, machtigingen, processen en archieve…
Lees artikel →TestautomatiseringSelenium versus toneelschrijver: belangrijkste verschillen, code vergeleken en welke te kiezen
Selenium versus Playwright vergeleken: architectuur, wachten, browser- en taalondersteuning, debuggen, dezelfde test in beide tools, migratieadvies …
Lees artikel →SoftwaretestenEquivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden
Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…
Lees artikel →SoftwaretestenErnst versus prioriteit bij het testen van software: verschillen, matrix en echte voorbeelden
Ernst versus prioriteit bij het testen van software uitgelegd: duidelijke definities, een vierwegmatrix met voorbeelden, niveauschalen, wie deze bep…
Lees artikel →Databases & SQLTutorial voor SQL-subquery's: typen, gecorreleerde subquery's en BESTAAN met voorbeelden
Een SQL-subquery-tutorial met query's die we hebben uitgevoerd: scalaire, IN-, FROM- en SELECT-subquery's, gecorreleerde subquery's, EXISTS, de NOT …
Lees artikel →Databases & SQLSQL-transacties en ACID uitgelegd: COMMIT-, ROLLBACK- en isolatieniveaus
SQL-transacties en ACID uitgelegd met een bankoverschrijving die we hebben uitgevoerd: COMMIT, ROLLBACK, savepoints, locks, isolatieniveaus, dirty r…
Lees artikel →SoftwareontwikkelingGit merge vs rebase: verschillen, voorbeelden en wanneer je wat gebruikt
Git merge vs rebase uitgelegd met echte logoutput, een vergelijkingstabel, de gouden regel van rebase en een veilige teamwerkwijze.
Lees artikel →SoftwareontwikkelingPython list comprehension: syntaxis, voorbeelden en wanneer je het vermijdt
Python list comprehension uitgelegd: syntaxis, filteren, if-else, geneste lussen, gemeten tijden en wanneer een gewone for-lus beter is.
Lees artikel →Databases & SQLSQL JOIN uitgelegd met voorbeelden (Inner, Left, Right, Full)
Begrijp SQL joins stap voor stap met voorbeeldtabellen en queries: INNER, LEFT, RIGHT, FULL, CROSS en SELF, plus veelgemaakte fouten en prestatietips.
Lees artikel →