Meerdere CTE's aan elkaar koppelen
Een pijplijn met benoemde stappen maken die naar elkaar verwijzen
Meerdere CTE's aan elkaar koppelen 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 CTE's koppelen
Echte problemen uit sollicitatiegesprekken passen zelden in één stap. Door CTE's te koppelen bouw je een pijplijn met benoemde stappen, waarbij elke stap de uitvoer van de vorige stap transformeert. Dit weerspiegelt hoe een ervaren ontwikkelaar een moeilijke query opsplitst in beheersbare onderdelen.
In plaats van subquery's drie niveaus diep te nesten, schrijf je elke stap één keer, geef je die een naam en laat je latere stappen ernaar verwijzen.
De syntaxis met komma's
Om meerdere CTE's te definiëren schrijf je WITH één keer en scheid je elk benoemd blok met een komma. Je herhaalt het sleutelwoord WITH dus niet.
- Eén
WITHbovenaan. - Een komma tussen elke CTE-definitie.
- Geen komma vóór de uiteindelijke hoofdquery.
WITH a AS (
SELECT customer_id FROM orders
),
b AS (
SELECT customer_id FROM a
)
SELECT *
FROM b;Latere CTE's kunnen naar eerdere verwijzen
Hier zit de kracht van koppelen: een CTE kan gegevens lezen uit elke CTE die ervoor is gedefinieerd. Dankzij deze zichtbaarheid in één richting kun je een afhankelijkheidsketen opbouwen.
Een eerdere CTE kan een latere niet zien, dus de volgorde is belangrijk. Rangschik je stappen van onbewerkte gegevens naar de uiteindelijke vorm.
WITH filtered AS (
SELECT *
FROM events
WHERE event_type = 'purchase'
),
per_user AS (
SELECT user_id, COUNT(*) AS purchases
FROM filtered
GROUP BY user_id
)
SELECT *
FROM per_user;Uitgewerkt voorbeeld: pijplijn met drie stappen
Vraag: wat is de gemiddelde besteding van klanten die meer dan 1000 dollar hebben uitgegeven? Deel het op in drie stappen: bereken de totale besteding per klant, filter de grote besteders en bereken daarna hun gemiddelde.
Elke CTE-naam beschrijft het doel, zodat een beoordelaar de opbouw meteen begrijpt.
WITH spend AS (
SELECT customer_id, SUM(amount) AS total
FROM orders
GROUP BY customer_id
),
big_spenders AS (
SELECT customer_id, total
FROM spend
WHERE total > 1000
)
SELECT AVG(total) AS avg_big_spend
FROM big_spenders;De volgorde van definiëren is belangrijk
Omdat de zichtbaarheid alleen vooruit werkt, moet een CTE die afhankelijk is van een andere na die afhankelijkheid worden vermeld. Als je verwijst naar een naam die nog niet is gedefinieerd, geeft de database een foutmelding: 'relatie bestaat niet'.
Een goede gewoonte: lees je lijst met CTE's van boven naar beneden en controleer of elke gebruikte naam al erboven staat.
Eén CTE vanuit meerdere andere gebruiken
Eén CTE kan gegevens leveren aan meerdere volgende CTE's. Hier zie je waarom koppelen beter werkt dan geneste subquery's: je berekent één keer een basisresultaat en vertakt daar vanaf.
Hier lezen zowel active als recent uit base, waardoor dubbele logica wordt vermeden.
WITH base AS (
SELECT * FROM users WHERE deleted = false
),
active AS (
SELECT id FROM base WHERE last_login > NOW() - INTERVAL '7 days'
),
recent AS (
SELECT id FROM base WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT (SELECT COUNT(*) FROM active) AS active_cnt,
(SELECT COUNT(*) FROM recent) AS recent_cnt;Twee CTE's samenvoegen
Gekoppelde CTE's worden in de hoofdquery vaak samengevoegd. Bereken beide kanten afzonderlijk en combineer ze daarna. Zo blijft elke berekening op zichzelf staan en blijft het samenvoegen eenvoudig.
Hieronder berekenen we onafhankelijk het aantal bestellingen en het aantal terugbetalingen en voegen we die daarna per klant samen.
WITH orders_cte AS (
SELECT customer_id, COUNT(*) AS orders
FROM orders GROUP BY customer_id
),
refunds_cte AS (
SELECT customer_id, COUNT(*) AS refunds
FROM refunds GROUP BY customer_id
)
SELECT o.customer_id, o.orders, COALESCE(r.refunds, 0) AS refunds
FROM orders_cte o
LEFT JOIN refunds_cte r ON r.customer_id = o.customer_id;Leesbaarheid boven nesten
Vergelijk een subquery die drie niveaus diep is genest met een pijplijn van drie CTE's. Bij de geneste versie moet de lezer de structuur mentaal van binnen naar buiten uitpakken. De CTE-versie leest in uitvoervolgorde, van boven naar beneden.
Interviewers waarderen de CTE-aanpak omdat dit de vorm is die ze in productie zouden willen onderhouden. Elke stap een naam geven is documentatie die nooit veroudert.
Een veelgemaakte fout bij het koppelen
Beginners zetten vaak een komma na de laatste CTE, direct vóór de hoofdquery met SELECT. Die afsluitende komma veroorzaakt een syntaxisfout.
- Komma's staan alleen tussen CTE-definities.
- Na het laatste sluithaakje volgt direct de hoofdquery, zonder komma.
Een andere valkuil: vergeten dat elke CTE een volledige SELECT tussen de haakjes nodig heeft.
Wordt elke stap afzonderlijk uitgevoerd?
Een genuanceerd punt voor sollicitatiegesprekken: logisch gezien leest de pijplijn als een reeks afzonderlijke stappen, maar de optimizer kan ze samenvoegen tot één uitvoeringsplan. In de meeste databases hoef je niet te betalen voor het materialiseren van tussenresultaten.
Door CTE's te koppelen kun je de query dus beter begrijpen zonder dat dit noodzakelijkerwijs ten koste gaat van de prestaties. Noem dit om diepgang te tonen.
Stappen benoemen als een pijplijn
Goede namen voor stappen maken van een query zelfdocumenterende code. Kies bij voorkeur namen die de uitvoer van elke stap beschrijven, niet de bewerking.
spendenbig_spenderszijn beter danstep1enstep2.- Een lezer moet de volledige opbouw alleen uit de CTE-namen kunnen afleiden.
- Consistente naamgeving in alle stappen maakt het samenvoegen in de hoofdquery vanzelfsprekend.
Tijdens een sollicitatiegesprek laat een duidelijke naamgeving van stappen zien dat je onderhoudbare SQL voor productie schrijft.
Korte controle
Controleer hoe goed je begrijpt hoe gekoppelde CTE's naar elkaar verwijzen.
Samenvatting: CTE's koppelen
Je hebt geleerd pijplijnen te bouwen: één WITH, CTE-definities gescheiden door komma's en zichtbaarheid die alleen vooruit werkt, waarbij elke stap eerdere stappen kan lezen.
- Orden CTE's van onbewerkte gegevens naar het uiteindelijke resultaat.
- Gebruik één basis-CTE opnieuw in meerdere volgende stappen.
- Geen afsluitende komma vóór de hoofdquery.
- Koppelen verbetert de leesbaarheid zonder noodzakelijkerwijs de prestaties te schaden.
Volgende stap: CTE's vergelijken met subquery's en tijdelijke tabellen.
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 “Meerdere CTE's aan elkaar koppelen” gratis?
Ja — de volledige tekst van “Meerdere CTE's aan elkaar koppelen” 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 “Meerdere CTE's aan elkaar koppelen”?
Een pijplijn met benoemde stappen maken die naar elkaar verwijzen 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 “Meerdere CTE's aan elkaar koppelen”?
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
- Uw eerste CTE schrijven
- Meerdere CTE's aan elkaar koppelen
- CTE versus subquery versus tijdelijke tabel
- Geneste query's herstructureren tot CTE's