Wat is een Subquery in SQL?

Een subquery in SQL is gewoon een query binnen een andere query. Het klinkt misschien ingewikkeld, maar het is eigenlijk heel handig! Denk aan een subquery als een soort “vraag binnen een vraag” die een resultaat oplevert dat de hoofdquery vervolgens kan gebruiken om verder te filteren of te berekenen.

Hoe Werkt een Subquery?

Een subquery wordt altijd tussen haakjes () geplaatst. Het kan binnen de WHERE-clausule of FROM-clausule staan en haalt eerst een resultaat op, dat de hoofquery dan gebruikt.

Stel je voor dat je een tabel klanten hebt en een tabel bestellingen. Je wilt klanten vinden die meer dan 2 bestellingen hebben geplaatst. Een subquery kan dit heel eenvoudig doen.

Voorbeeld van een Subquery in de WHERE-clausule

Stel, je hebt de volgende tabellen:

  • klanten: Bevat informatie over klanten, zoals klant_id en naam.
  • bestellingen: Bevat informatie over bestellingen, zoals bestel_id, klant_id, en bedrag.

Je wilt de namen van klanten vinden die meer dan 2 bestellingen hebben geplaatst.

Je kunt dat doen door een subquery te gebruiken:

SELECT naam
FROM klanten
WHERE klant_id IN (
    SELECT klant_id
    FROM bestellingen
    GROUP BY klant_id
    HAVING COUNT(*) > 2
);

Wat gebeurt hier?

  1. De binnenste query:
    • SELECT klant_id FROM bestellingen GROUP BY klant_id HAVING COUNT(*) > 2;
    • Deze zoekt naar klanten die meer dan 2 bestellingen hebben geplaatst.
  2. De buitenste query:
    • SELECT naam FROM klanten WHERE klant_id IN (...)
    • Dit haalt de namen van de klanten op die voldoen aan de resultaten van de subquery.

Dus de subquery zegt “Geef me alle klanten die meer dan 2 bestellingen hebben geplaatst”, en de buitenste query haalt vervolgens die klanten op uit de klanten-tabel.


Voorbeeld van een Subquery voor het Gemiddelde

Stel, je wilt klanten vinden die meer hebben besteed dan het gemiddelde bestedingsbedrag. Dit kan met een subquery:

SELECT naam
FROM klanten
WHERE klant_id IN (
    SELECT klant_id
    FROM bestellingen
    WHERE bedrag > (
        SELECT AVG(bedrag)
        FROM bestellingen
    )
);

Wat gebeurt hier?

  1. De binnenste subquery:
    • SELECT AVG(bedrag) FROM bestellingen
    • Dit berekent het gemiddelde bestedingsbedrag.
  2. De middelste subquery:
    • SELECT klant_id FROM bestellingen WHERE bedrag > (...)
    • Dit haalt de klant_id’s van klanten op die meer dan het gemiddelde hebben besteed.
  3. De buitenste query:
    • SELECT naam FROM klanten WHERE klant_id IN (...)
    • Dit haalt de klantnamen op van klanten die aan die voorwaarden voldoen.

In dit voorbeeld combineert de subquery het berekenen van een gemiddelde en het vinden van klanten die meer hebben besteed dan dat gemiddelde.


Wanneer Gebruik je een Subquery?

Je gebruikt een subquery wanneer:

  1. Je een voorwaarde wilt baseren op een andere query.
    • Bijvoorbeeld: Klanten die een bestelling hebben geplaatst met een bedrag groter dan het gemiddelde.
  2. Je een waarde nodig hebt die je niet direct kunt ophalen uit de hoofdquery.
    • Bijvoorbeeld: Het gemiddelde bedrag van bestellingen of de hoogste waarde van een bepaalde kolom.
  3. Je gegevens wilt filteren met behulp van een andere query.
    • Bijvoorbeeld: Je wilt klanten die bestellingen hebben gedaan in een bepaalde periode maar weet niet precies wanneer.

Samenvatting:

  • Een subquery is een query binnen een query die wordt uitgevoerd om een resultaat te leveren dat door de buitenste query wordt gebruikt.
  • Het wordt vaak gebruikt in de WHERE-clausule om je zoekresultaten te filteren.
  • Het is handig voor het ophalen van gegevens die je niet direct in je hoofdquery kunt vinden, maar die je wel via een andere query kunt krijgen.

Subquery in de WHERE-clausule:

SELECT naam
FROM klanten
WHERE klant_id IN (
    SELECT klant_id
    FROM bestellingen
    WHERE bedrag > 100
);

Dit zoekt naar klanten die bestellingen boven de 100 hebben geplaatst.