SQL leren: Subquery
Een vraag in een vraag
"Welke boeken zijn dikker dan gemiddeld?" Makkelijk, denk je, tot je merkt dat je het gemiddelde eerst zelf moet uitrekenen. Of je laat de database twee vragen tegelijk beantwoorden.
Een subquery geeft één waarde
Een subquery is een query tussen haakjes, binnen een andere query. De database voert ze eerst uit en gebruikt het resultaat alsof je het zelf had ingetypt.
Deze subquery berekent het gemiddeld aantal pagina's. De buitenste query houdt de boeken die daarboven zitten.
SELECT titel, paginas FROM boeken WHERE paginas > (SELECT AVG(paginas) FROM boeken)| titel | paginas |
|---|---|
| De stille rivier | 312 |
| Het laatste licht | 401 |
| Draken van het Noorden | 624 |
| The Glass Harbour | 352 |
| De code van Mercator | 336 |
| Sterrenstof | 512 |
| Winter Roads | 298 |
| Moord op de markt | 304 |
Een subquery met IN geeft een lijst
Geeft de subquery meerdere rijen, dan gebruik je IN, net als met een lijst die je zelf typt. Hier geeft de subquery de nummers van boeken die ooit te laat terugkwamen. De buitenste query zoekt er de titels bij.
Zo combineer je twee tabellen zonder JOIN.
SELECT titel FROM boeken WHERE id IN (SELECT boek_id FROM uitleningen WHERE teruggebracht_op > terug_voor)| titel |
|---|
| De stille rivier |
| Nachtwacht in Brugge |
| Draken van het Noorden |
| De code van Mercator |
| Sterrenstof |
Probeer het zelf
Welke leden hebben op dit moment een boek in huis (nog niet teruggebracht)? Toon hun naam.
Klaar voor meer?
De volledige les heeft 6 oefeningen, van makkelijk naar uitdagend, met hints, punten en een reeks die je kan opbouwen.
Begin aan de les