Aanmelden met Microsoft
Meld u aan of maak een account.
Hallo,
Selecteer een ander account.
U hebt meerdere accounts
Kies het account waarmee u zich wilt aanmelden.

Soms wilt u de resultaten van een query gebruiken als een veld in een andere query of als criterium voor een queryveld. Stel dat u het interval tussen orders voor elk van uw producten wilt zien. Als u een query wilt maken die dit interval weergeeft, moet u elke orderdatum vergelijken met andere orderdatums voor dat product. Voor het vergelijken van deze orderdatums is ook een query vereist. U kunt deze query nesten in uw hoofdquery met behulp van een subquery.

U kunt een subquery schrijven in een expressie of in een sql-instructie (Structured Query Language) in SQL-weergave.

In dit artikel

De resultaten van een query gebruiken als een veld in een andere query

U kunt een subquery gebruiken als een veldalias. Gebruik een subquery als veldalias als u de subqueryresultaten wilt gebruiken als veld in uw hoofdquery.

Opmerking: Een subquery die u als veldalias gebruikt, kan niet meer dan één veld retourneren.

U kunt een subquery-veldalias gebruiken om waarden weer te geven die afhankelijk zijn van andere waarden in de huidige rij. Dit is niet mogelijk zonder een subquery te gebruiken.

Laten we bijvoorbeeld terugkeren naar het voorbeeld waarin u het interval tussen orders voor elk van uw producten wilt zien. Om dit interval te bepalen, moet u elke orderdatum vergelijken met andere orderdatums voor dat product. U kunt een query maken die deze informatie weergeeft met behulp van de databasesjabloon Northwind.

  1. Klik op het tabblad Bestand op Nieuw.

  2. Klik onder Beschikbare sjablonen op Voorbeeldsjablonen.

  3. Klik op Northwind en klik vervolgens op Maken.

  4. Volg de aanwijzingen op de pagina Noordenwind BV (op het objecttabblad van het opstartscherm) om de database te openen en sluit vervolgens het aanmeldingsvenster.

  5. Klik op het tabblad Maken in de groep Query's op Queryontwerp.

  6. Klik op het tabblad Query's en dubbelklik vervolgens op Productorders.

  7. Dubbelklik op het veld Product-id en het veld Orderdatum om deze toe te voegen aan het queryontwerpraster.

  8. Selecteer oplopend in de rij Sorteren van de kolom Product-id van het raster.

  9. Selecteer aflopend in de rij Sorteren van de kolom Orderdatum van het raster.

  10. Klik in de derde kolom van het raster met de rechtermuisknop op de rij Veld en klik vervolgens op In- en uitzoomen in het snelmenu.

  11. Typ of plak de volgende expressie in het dialoogvenster In- of uitzoomen :

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Deze expressie is de subquery. Voor elke rij selecteert de subquery de meest recente orderdatum die minder recent is dan de orderdatum die al aan de rij is gekoppeld. Let op hoe u het sleutelwoord AS gebruikt om een tabelalias te maken, zodat u waarden in de subquery kunt vergelijken met waarden in de huidige rij van de hoofdquery.

  12. Typ in de vierde kolom van het raster, in de rij Veld , de volgende expressie:

    Interval: [Order Date]-[Prior Date]

    Met deze expressie wordt het interval tussen elke orderdatum en de vorige orderdatum voor dat product berekend aan de hand van de waarde voor de eerdere datum die we hebben gedefinieerd met behulp van een subquery.

  13. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

    1. De query wordt uitgevoerd en geeft een lijst weer met productnamen, orderdatums, eerdere orderdatums en het interval tussen orderdatums. De resultaten worden eerst gesorteerd op product-id (in oplopende volgorde) en vervolgens op orderdatum (in aflopende volgorde).

    2. Opmerking: Omdat Product-id een opzoekveld is, worden in Access standaard de opzoekwaarden (in dit geval de productnaam) weergegeven in plaats van de werkelijke product-id's. Hoewel hiermee de weergegeven waarden worden gewijzigd, wordt de sorteervolgorde niet gewijzigd.

  14. Sluit de northwind-database.

Naar boven

Een subquery gebruiken als criterium voor een queryveld

U kunt een subquery gebruiken als een veldcriterium. Gebruik een subquery als veldcriterium als u de resultaten van de subquery wilt gebruiken om de waarden te beperken die in het veld worden weergegeven.

Stel dat u een lijst wilt bekijken met orders die zijn verwerkt door werknemers die geen vertegenwoordiger zijn. Als u deze lijst wilt genereren, moet u de werknemers-id voor elke bestelling vergelijken met een lijst met de werknemer-id's voor werknemers die geen vertegenwoordigers zijn. Als u deze lijst wilt maken en als veldcriterium wilt gebruiken, gebruikt u een subquery, zoals wordt weergegeven in de volgende procedure:

  1. Open Northwind.accdb en schakel de inhoud ervan in.

  2. Sluit het aanmeldingsvenster.

  3. Klik op het tabblad Maken in de groep Overige op Queryontwerp .

  4. Dubbelklik op het tabblad Tabellen op Orders en werknemers.

  5. Dubbelklik in de tabel Orders op het veld Werknemer-id , het veld Order-id en het veld Orderdatum om deze toe te voegen aan het queryontwerpraster. Dubbelklik in de tabel Werknemers op het veld Functie om het toe te voegen aan het ontwerpraster.

  6. Klik met de rechtermuisknop op de rij Criteria van de kolom Werknemer-id en klik vervolgens op In- en uitzoomen in het snelmenu.

  7. Typ of plak de volgende expressie in het vak In- of uitzoomen :

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Dit is de subquery. Hiermee worden alle werknemer-id's geselecteerd waarvoor de werknemer geen functie van verkoopvertegenwoordiger heeft en wordt het resultaat ingesteld op de hoofdquery. De hoofdquery controleert vervolgens of werknemers-id's uit de tabel Orders zich in de resultatenset bevinden.

  8. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

    De query wordt uitgevoerd en de queryresultaten tonen een lijst met orders die zijn verwerkt door werknemers die geen vertegenwoordiger zijn.

Naar boven

Algemene SQL-trefwoorden die u kunt gebruiken met een subquery

Er zijn verschillende SQL-trefwoorden die u kunt gebruiken met een subquery:

Opmerking: Deze lijst is niet volledig. U kunt elk geldig SQL-trefwoord in een subquery gebruiken, met uitzondering van trefwoorden voor gegevensdefinities.

  • ALLE    Gebruik ALL in een WHERE-component om rijen op te halen die voldoen aan de voorwaarde in vergelijking met elke rij die wordt geretourneerd door de subquery.

    Stel dat u gegevens van leerlingen/studenten op een universiteit analyseert. De studenten moeten een minimale GPA behouden, die varieert van hoofdvak tot hoofdvak. Hoofdvakken en hun minimale GBA's worden opgeslagen in een tabel met de naam Hoofdvakken en de relevante studentgegevens worden opgeslagen in een tabel met de naam Student_Records.

    Als u een lijst met hoofdvakken (en hun minimale GPA's) wilt zien waarvoor elke student met die hoofdvak de minimale GPA overschrijdt, kunt u de volgende query gebruiken:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ELKE    Gebruik ANY in een WHERE-component om rijen op te halen die voldoen aan de voorwaarde in vergelijking met ten minste één van de rijen die door de subquery worden geretourneerd.

    Stel dat u gegevens van leerlingen/studenten op een universiteit analyseert. De studenten moeten een minimale GPA behouden, die varieert van hoofdvak tot hoofdvak. Hoofdvakken en hun minimale GBA's worden opgeslagen in een tabel met de naam Hoofdvakken en de relevante studentgegevens worden opgeslagen in een tabel met de naam Student_Records.

    Als u een lijst met hoofdvakken (en hun minimale GPA's) wilt zien waarvoor elke student met die hoofdvak niet voldoet aan de minimale GPA, kunt u de volgende query gebruiken:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Opmerking: U kunt ook het sleutelwoord SOME voor hetzelfde doel gebruiken; het sleutelwoord SOME is synoniem met ANY.

  • EXISTS     Gebruik EXISTS in een WHERE-component om aan te geven dat een subquery ten minste één rij moet retourneren. U kunt ook BESTAAN voorafgaan met NOT, om aan te geven dat een subquery geen rijen mag retourneren.

    De volgende query retourneert bijvoorbeeld een lijst met producten die in ten minste één bestaande volgorde zijn gevonden:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Met BEHULP VAN NOT EXISTS retourneert de query een lijst met producten die niet in ten minste één bestaande bestelling zijn gevonden:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • INCH    Gebruik IN in een WHERE-component om te controleren of een waarde in de huidige rij van de hoofdquery deel uitmaakt van de set die door de subquery wordt geretourneerd. U kunt ook IN voorafgaan met NOT om te controleren of een waarde in de huidige rij van de hoofdquery geen deel uitmaakt van de set die door de subquery wordt geretourneerd.

    De volgende query retourneert bijvoorbeeld een lijst met orders (met orderdatums) die zijn verwerkt door werknemers die geen vertegenwoordiger zijn:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Als u NOT IN gebruikt, kunt u dezelfde query op deze manier schrijven:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Naar boven

Meer hulp nodig?

Meer opties?

Verken abonnementsvoordelen, blader door trainingscursussen, leer hoe u uw apparaat kunt beveiligen en meer.

Community's helpen u vragen te stellen en te beantwoorden, feedback te geven en te leren van experts met uitgebreide kennis.

Was deze informatie nuttig?

Hoe tevreden bent u met de taalkwaliteit?
Wat heeft uw ervaring beïnvloed?
Als u op Verzenden klikt, wordt uw feedback gebruikt om producten en services van Microsoft te verbeteren. Uw IT-beheerder kan deze gegevens verzamelen. Privacyverklaring.

Hartelijk dank voor uw feedback.

×