Tutorial voor SQL-subquery’s: typen, gecorreleerde subquery’s en BESTAAN met voorbeelden

  1. Home
  2. Blog
  3. Databases en SQL

Databases en SQL

Tutorial voor SQL-subquery’s: Typen, gecorreleerde subquery’s en BESTAAN met voorbeelden

Een subquery is een query binnen een andere query. Leer elk type en waar het past, begrijp gecorreleerde subquery’s goed en vermijd de NOT IN-val die stilletjes helemaal geen rijen retourneert.

9 min leestijd
Tutorial voor SQL-subquery's: typen, gecorreleerde subquery's en EXISTS met voorbeelden

Belangrijkste punten

  • Een subquery is een query die in een andere query is genest en de buitenste query gebruikt het resultaat ervan.
  • Subquery’s kunnen voorkomen in WHERE, FROM, SELECT en HAVING.
  • Een gecorreleerde subquery verwijst naar de buitenste rij en wordt dus logisch per rij geëvalueerd.
  • Geef de voorkeur aan NOT EXISTS boven NOT IN wanneer NULL’s mogelijk zijn.

Voor het beantwoorden van sommige vragen zijn twee stappen nodig. “Welke bestellingen zijn bovengemiddeld?” vereist dat u eerst het gemiddelde vindt en vervolgens elke bestelling daarmee vergelijkt. Met SQL-subquery’s kunt u beide stappen als één instructie schrijven.

In deze zelfstudie wordt elk type behandeld met behulp van twee kleine tabellen. We hebben deze query’s uitgevoerd in SQLite 3.50 en de weergegeven resultaten zijn afkomstig van die run. De standaardsyntaxis van subquery’s wordt breed ondersteund en we wijzen op de punten waarop databases verschillen.

Wat is een subquery?

Een subquery, ook wel een innerlijke of geneste query genoemd, is een SELECT-instructie die tussen ronde haakjes in een andere instructie wordt geplaatst. Conceptueel gezien levert de binnenste query een resultaat op dat vervolgens door de buitenste query wordt gebruikt.

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

De voorbeeldtabellen

CREATE TABLE customers (id INT, name TEXT, city TEXT);
CREATE TABLE orders (id INT, customer_id INT, total INT);

INSERT INTO customers VALUES
 (1,'Asha','Pune'), (2,'Ben','Delhi'), (3,'Chitra','Pune'), (4,'Dev','Goa');

INSERT INTO orders VALUES
 (101,1,1200), (102,1,800), (103,2,300), (104,3,2500), (105,3,100);

Houd er rekening mee dat Dev geen orders heeft. Dat detail is van belang voor verschillende voorbeelden hieronder.

Soorten subquery’s in één oogopslag

Typ Retouren Typische locatie Algemene operatoren
Scalair Eén waarde WHERE, SELECT =, >, <
Meerdere rijen Eén kolom, veel rijen WAAR IN, ANY, ALL
Tabel (afgeleid) Veel kolommen en rijen VAN Gebruikt als tafel
Gecorreleerd Afhankelijk van de buitenste rij WHERE, SELECT Elke, en EXISTS

Scalaire subquery’s

Een scalaire subquery retourneert precies één waarde, zodat u deze overal kunt gebruiken waar een enkele waarde zinvol is. Hier is de vraag van eerder, met het resultaat. Het gemiddelde van alle bestellingen is 980:

SELECT id, total
FROM orders
WHERE total > (SELECT AVG(total) FROM orders);

-- 101 | 1200
-- 104 | 2500

Je kon niet WHERE total > AVG(total) schrijven, omdat aggregaten niet rechtstreeks in WHERE zijn toegestaan. De subquery omzeilt dit door de waarde afzonderlijk te berekenen.

Wat als een ‘scalaire’ subquery meerdere rijen retourneert? De meeste databases, waaronder PostgreSQL, MySQL en SQL Server, geven een foutmelding. SQLite niet. In onze test gebruikte het stilletjes alleen de eerste rij, die een echte bug zou kunnen verbergen, dus vertrouw niet op dit gedrag.

IN en NIET IN

Wanneer de innerlijke query een lijst retourneert, gebruik dan IN. Dit vindt klanten met minstens één bestelling boven de 1000:

SELECT name FROM customers
WHERE id IN (SELECT customer_id FROM orders WHERE total > 1000);

-- Asha
-- Chitra

NOT IN doet het tegenovergestelde en vindt klanten die nog nooit hebben besteld:

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);

-- Dev

Dat werkt hier, maar NOT IN heeft een gevaarlijk randgeval, dat we hieronder bespreken.

Subquery’s in FROM

Een subquery in FROM fungeert als een tijdelijke tabel, vaak een afgeleide tabel genoemd. Dit is handig als u twee keer moet aggregeren, zoals in deze zoekopdracht voor de gemiddelde uitgaven per klant in elke stad:

SELECT city, AVG(spent) AS avg_spent
FROM (
  SELECT c.city, SUM(o.total) AS spent
  FROM customers c
  JOIN orders o ON o.customer_id = c.id
  GROUP BY c.id, c.city
) AS per_customer
GROUP BY city;

-- Delhi |  300.0
-- Pune  | 2300.0

De binnenste zoekopdracht telt het totaal van elke klant, en de buitenste telt het gemiddelde van deze totalen. Het is een goede gewoonte om de afgeleide tabel een alias te geven, aangezien sommige databases dit vereisen. Als GROUP BY nieuw voor je is, zie dan SQL GROUP BY en HAVING.

Subquery’s in SELECT

Een scalaire subquery kan ook een berekende kolom toevoegen. Deze telt bestellingen per klant:

SELECT name,
       (SELECT COUNT(*) FROM orders o WHERE o.customer_id = c.id) AS order_count
FROM customers c;

-- Asha   | 2
-- Ben    | 1
-- Chitra | 2
-- Dev    | 0

Dev verschijnt met nul. Een inner join zou Dev volledig hebben verwijderd, omdat Dev geen overeenkomende rijen heeft. Je zou hetzelfde resultaat kunnen krijgen met een LEFT JOIN en GROUP BY, wat we uitleggen in SQL-joins uitgelegd.

Gecorreleerde subquery’s

Het vorige voorbeeld is ook gecorreleerd, aangezien de binnenste query verwijst naar c.id uit de buitenste query. Een niet-gecorreleerde subquery kan alleen worden uitgevoerd. Een gecorreleerde kan dat niet, omdat deze afhankelijk is van een waarde uit de huidige buitenste rij.

Dit vindt bestellingen boven het eigen gemiddelde van diezelfde klant:

SELECT o.id, o.customer_id, o.total
FROM orders o
WHERE o.total > (
  SELECT AVG(i.total)
  FROM orders i
  WHERE i.customer_id = o.customer_id
);

-- 101 | 1 | 1200
-- 104 | 3 | 2500

Hier leest u hoe u het kunt lezen. Voor bestelling 101 berekent de interne zoekopdracht het gemiddelde van de bestellingen van klant 1 (1200 en 800), wat 1000 oplevert. Omdat 1200 groter is, wordt de rij behouden. Voor bestelling 102 geldt hetzelfde gemiddelde, maar 800 is niet groter en valt dus weg. De enkele bestelling van klant 2 is gelijk aan zijn eigen gemiddelde, dus deze wordt ook geschrapt.

Functie Niet-gecorreleerd Gecorreleerd
Gebruikt buitenste querywaarden? Nee Ja
Kan op eigen kracht draaien? Ja Nee
Logische uitvoering Een keer Eén keer per buitenste rij
Prestatierisico Meestal laag Kan hoog op grote tafels staan

“Eenmaal per rij” beschrijft de logica, en query-optimalisatieprogramma’s herschrijven deze vaak in iets veel efficiënter. Toch is een langzame gecorreleerde subquery het onderzoeken waard. Een index op de binnenste kolom, hier orders.customer_id, kan een groot verschil maken. Zie SQL-indexen uitgelegd.

BESTAAT en BESTAAT NIET

EXISTS stelt een ja of nee-vraag: retourneert de innerlijke query minstens één rij? Het kan stoppen bij de eerste match, en wat je daarin selecteert, doet er niet toe. Daarom schrijven mensen vaak SELECT 1.

SELECT c.name FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Asha, Ben, Chitra

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.id);

-- Dev

De NOT IN NULL-val

Dit is een van de meest voorkomende subquery-bugs. We hebben een tabel gemaakt met één echte ID en één NULL, en vervolgens beide formulieren erop uitgevoerd:

CREATE TABLE r (customer_id INT);
INSERT INTO r VALUES (1), (NULL);

SELECT name FROM customers
WHERE id NOT IN (SELECT customer_id FROM r);
-- (no rows at all)

SELECT c.name FROM customers c
WHERE NOT EXISTS (SELECT 1 FROM r WHERE r.customer_id = c.id);
-- Ben, Chitra, Dev

Waarom levert de eerste niets op? id NOT IN (1, NULL) betekent id <> 1 AND id <> NULL. Elke vergelijking met NULL is eerder onbekend dan waar, dus de hele voorwaarde kan nooit waar zijn. Er is geen foutmelding en geen waarschuwing, alleen een leeg resultaat dat er plausibel uitziet.

Tip: Gebruik standaard NOT EXISTS voor anti-joins. Als u NOT IN gebruikt, voegt u WHERE customer_id IS NOT NULL toe aan de subquery.

Subquery versus JOIN versus CTE

Veel query’s kunnen op meer dan één manier worden geschreven. Eerder vonden we klanten met een grote bestelling via IN. Hier is hetzelfde resultaat met een join:

SELECT DISTINCT c.name FROM customers c
JOIN orders o ON o.customer_id = c.id AND o.total > 1000;

-- Asha
-- Chitra

Let op de DISTINCT. Een join kan duplicaten opleveren als een klant meerdere matches heeft, terwijl IN en EXISTS dat niet kunnen.

Gebruik Wanneer
DOE MEE Je hebt kolommen uit beide tabellen nodig
IN of BESTAAT U hoeft alleen maar te filteren op de vraag of er een match bestaat
Afgeleide tafel Je moet eerst aggregeren en het blijft kort
CTE De logica bestaat uit verschillende stappen of wordt meerdere keren gebruikt
Raamfunctie Naast elke rij heeft u een cijfer per groep nodig

De prestaties variëren per database en data, en moderne optimizers produceren vaak vergelijkbare plannen. Kies dus eerst de duidelijkste vorm en vink vervolgens EXPLAIN aan als deze langzaam blijkt te zijn.

Veel voorkomende fouten

  • Gebruik = met een resultaat met meerdere rijen. Gebruik IN of zorg ervoor dat de binnenste query één rij retourneert.
  • Gebruik NOT IN voor een null-kolom. Je kunt elke rij stilletjes kwijtraken.
  • Gebruik onduidelijke aliassen. Bij gecorreleerde zoekopdrachten moet u elke kolom kwalificeren, anders kan deze aan de verkeerde tabel worden gekoppeld.
  • Diepe nesting. Drie niveaus zijn moeilijk te lezen, dus converteer ze naar CTE’s.
  • Het toevoegen van ORDER BY aan de binnenkant. Dit heeft meestal geen effect op het uiterlijke resultaat, en sommige databases wijzen dit af.

Tot slot

Subquery’s zijn een natuurlijke manier om vragen in twee stappen uit te drukken. Begin met scalaire subquery’s en IN, en oefen vervolgens met de gecorreleerde subquery’s door één buitenste rij tegelijk te doorlopen. En onthoud NOT EXISTS wanneer NULL’s mogelijk zijn. Om te oefenen kunt u een vraag op drie manieren schrijven, met een subquery, een join en een CTE, en zowel de resultaten als de leesbaarheid vergelijken.

Veelgestelde vragen

Wat is een subquery in SQL?

Een subquery is een SELECT-instructie die tussen haakjes in een andere SQL-instructie is genest. De buitenste instructie gebruikt het resultaat als een waarde, een lijst of een tabel.

Wat is een gecorreleerde subquery?

Het is een subquery die verwijst naar een kolom uit de buitenste query. Het is afhankelijk van de huidige buitenste rij en kan dus niet zelfstandig draaien.

Wat is sneller: een subquery of een JOIN?

Het hangt af van de database en gegevens, en optimizers komen vaak met vergelijkbare plannen. Schrijf eerst de duidelijkste versie en vergelijk vervolgens de uitvoeringsplannen als de prestaties ertoe doen.

Wat is het verschil tussen IN en EXISTS?

IN vergelijkt een waarde met een lijst met resultaten. EXISTS controleert of er überhaupt een rij wordt geretourneerd. Ze gedragen zich anders met NULL’s wanneer ze worden genegeerd.

Kan een subquery meerdere kolommen retourneren?

Ja, bij gebruik in FROM als een afgeleide tabel, en sommige databases staan ​​ook rijvergelijkingen toe. Een scalaire subquery mag slechts één kolom en één rij retourneren.

Blijf leren

Werk met Stack Quora

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.

Blijf lezen

Meer handleidingen over testen, AI en moderne ontwikkeling

Genoten van dit artikel? Kies een onderwerp en ga direct naar onze nieuwste tutorials.

Kunstmatige intelligentie

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 →
DevOps

Omgevingsvariabelen 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 →
Softwareontwikkeling

API-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 →
Testautomatisering

Spotten 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 →
Softwaretesten

Codedekking 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 & SQL

DELETE 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 & SQL

SQL-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 →
Softwareontwikkeling

TypeScript-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 →
Softwareontwikkeling

Python *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 →
Softwareontwikkeling

Python 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 intelligentie

Wat 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 →
DevOps

Monitoring 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 →
DevOps

Docker-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 →
Testautomatisering

TDD 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 →
Softwaretesten

Gebruikersacceptatietesten (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 & SQL

SQL 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 & SQL

SQL 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 →
Softwareontwikkeling

Wat 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 →
Softwareontwikkeling

JavaScript-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Implementatie 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 →
Testautomatisering

Schilferige 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 →
Softwaretesten

Belastingtesten 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 →
Softwaretesten

Testcase 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 & SQL

Optimalisatie 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 & SQL

SQL 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 →
Softwareontwikkeling

JavaScript 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 →
Softwareontwikkeling

Python-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 →
Softwareontwikkeling

Python-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 intelligentie

Wat 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 →
DevOps

Linux-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 →
Testautomatisering

Selenium 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 →
Softwaretesten

Equivalentiepartitionering: testontwerptechniek uitgelegd met uitgewerkte voorbeelden

Equivalentiepartitionering uitgelegd: hoe je geldige en ongeldige partities kunt vinden, uitgewerkte voorbeelden voor leeftijden, wachtwoorden en ko…

Lees artikel →
Softwaretesten

Ernst 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 & SQL

Tutorial 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 & SQL

SQL-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 →
Softwareontwikkeling

Git 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 →
Softwareontwikkeling

Python 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 & SQL

SQL 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 →