Office
Aanmelden

Een query in een andere query of in een expressie nesten door middel van een subquery

Opmerking: We willen u graag zo snel mogelijk de meest recente Help-inhoud in uw eigen taal bieden. Deze pagina is automatisch vertaald en kan grammaticale fouten of onnauwkeurigheden bevatten. Wij hopen dat deze inhoud nuttig voor u is. Kunt u ons onder aan deze pagina laten weten of de informatie nuttig voor u was? Hier is het Engelstalige artikel ter referentie.

Het kan gebeuren dat u de resultaten van een query als veld in een andere query of als criterium voor een queryveld wilt gebruiken. Stel dat u het interval tussen orders voor elk van uw producten wilt bekijken. Als u een query wilt maken waarmee dit interval wordt opgehaald, moet u elke orderdatum vergelijken met andere datums voor dat product. Voor het vergelijken van deze orderdatums is ook een query nodig. U kunt deze query in de hoofdquery nesten door een subquery te gebruiken.

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

In dit artikel

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

Een subquery als criterium voor een queryveld gebruiken

Algemene SQL-sleutelwoorden die u bij een subquery kunt gebruiken

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

U kunt een subquery kunt gebruiken als veldalias. Een subquery als veldalias gebruiken als u wilt de subquery resultaten als een veld in uw belangrijkste query gebruiken.

Opmerking: Met een subquery die u als veldalias gebruikt, kan slechts één veld worden opgehaald.

Een subqueryveldalias kunt u waarden weergeven die afhankelijk van andere waarden in de huidige rij, wat niet mogelijk is zijn zonder een subquery. Zo laat ons terug naar het voorbeeld waar u wilt zien van het interval tussen orders voor elk van de producten. Om te bepalen dit interval, moet u elke orderdatum om andere orderdatums voor dat product te vergelijken. U kunt een query maken waarmee deze gegevens met behulp van de sjabloon Noordenwind 2007.

Laat zien hoe Noordenwind 2007 instellen

  1. Klik op de Microsoft Office-knop afbeelding office-knop en klik vervolgens op Nieuw.

  2. Klik in het linkerdeelvenster onder Sjablooncategorieënop Lokale sjablonen.

  3. Klik onder Lokale sjablonenNoordenwind 2007op 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.

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

  2. Klik in het dialoogvenster Tabel weergeven op het tabblad Query's en dubbelklik op Productorders.

  3. Sluit het dialoogvenster Tabel weergeven.

  4. Dubbelklik op het veld Productnummer en het veld Orderdatum om deze velden toe te voegen aan het queryontwerpraster.

  5. Selecteer Oplopend in de rij Sorteren van de kolom Productnummer van het raster.

  6. Selecteer Aflopend in de rij Sorteren van de kolom Orderdatum van het raster.

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

  8. Typ of plak de volgende expressie in het dialoogvenster In- en 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. De subquery selecteert voor elke rij de meest recente orderdatum die later is dan de orderdatum die reeds aan de rij is gekoppeld. U gebruikt het sleutelwoord AS om een tabelalias te maken zodat u waarden in de subquery kunt vergelijken met waarden in de huidige rij van de hoofdquery.

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

Interval: [Order Date]-[Prior Date]

Deze expressie berekent het interval tussen elke orderdatum en de voorgaande orderdatum voor dat product op basis van de waarde voor de voorgaande datum zoals gedefinieerd door middel van een subquery.

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

    De query wordt uitgevoerd, waarna een lijst met productnamen, orderdatums, voorgaande orderdatums en het interval tussen orderdatums wordt opgehaald. De gegevens worden eerst op productnummer gesorteerd (in oplopende volgorde) en vervolgens op orderdatum (in aflopende volgorde).

    Opmerking: Aangezien 'Productnummer' een opzoekveld is, worden standaard de opzoekwaarden (in dit geval de productnaam) en niet de werkelijke productnummers weergegeven. Hoewel hierdoor andere waarden worden weergegeven, blijft de sorteervolgorde hetzelfde.

  2. Sluit de database Noordenwind.

Naar boven

Een subquery als criterium voor een queryveld gebruiken

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

Stel dat u wilt nagaan welke orders zijn verwerkt door werknemers die geen vertegenwoordiger zijn. Als u een lijst met deze werknemers wilt genereren, moet u de werknemer-id voor elke order vergelijken met een lijst met id's van werknemers die geen vertegenwoordiger zijn. U kunt deze lijst maken en als veldcriterium gebruiken met behulp van een subquery. Ga hiervoor als volgt te werk:

  1. Open Noordenwind 2007.accdb en de inhoud inschakelen.

  2. Sluit het aanmeldingsvenster.

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

  4. Open het tabblad Tabellen van het dialoogvenster Tabel weergeven en dubbelklik op Orders en Werknemers.

  5. Sluit het dialoogvenster Tabel weergeven.

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

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

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

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

    Dit is de subquery. Met subquery worden alle id's geselecteerd van werknemers die niet de functie Verkoper hebben. Deze resultatenset wordt aan de hoofdquery doorgegeven. Vervolgens wordt met de hoofdquery gecontroleerd of de resultatenset werknemer-id's uit de tabel Orders bevat.

  9. Klik op het tabblad Ontwerp in de groep Resultaten op Uitvoeren.

    De query wordt uitgevoerd, waarna een lijst met orders wordt opgehaald die door andere werknemers dan vertegenwoordigers zijn verwerkt.

Naar boven

Algemene SQL-sleutelwoorden die u bij een subquery kunt gebruiken

Er zijn verschillende SQL-sleutelwoorden die u bij een subquery kunt gebruiken:

Opmerking: Dit is geen complete lijst. In een subquery kunt u elk geldig SQL-sleutelwoord gebruiken, met uitzondering van definitiesleutelwoorden.

  • ALL    Gebruik ALL in een WHERE-component om de rijen op te halen die voldoen aan de voorwaarde wanneer ze worden vergeleken met elke rij van de subqueryresultaten.

    Stel dat u de gegevens van studenten op een universiteit analyseert. De studenten moeten een minimaal cijfergemiddelde handhaven dat per hoofdvak varieert. Hoofdvakken en de bijbehorende minimale cijfergemiddelden zijn opgeslagen in de tabel Hoofdvakken, en de relevante studentengegevens in de tabel Studentenrecords.

    Als u een lijst met hoofdvakken (en de bijbehorende minimale cijfergemiddelden) wilt weergeven waarvoor iedere student hoger dan het minimale cijfergemiddelde scoort, gebruikt u de volgende query:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Gebruik ANY in een WHERE-component om de rijen op te halen die voldoen aan de voorwaarde wanneer ze met minstens een van de rijen van de subqueryresultaten worden vergeleken.

    Stel dat u de gegevens van studenten op een universiteit analyseert. De studenten moeten een minimaal cijfergemiddelde handhaven dat per hoofdvak varieert. Hoofdvakken en de bijbehorende minimale cijfergemiddelden zijn opgeslagen in de tabel Hoofdvakken, en de relevante studentengegevens in de tabel Studentenrecords.

    Als u een lijst met hoofdvakken (en de bijbehorende minimale cijfergemiddelden) wilt weergegeven waarvoor een of meer studenten lager dan het minimale cijfergemiddelde scoren, gebruikt u de volgende query:

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

    Opmerking: U kunt het sleutelwoord SOME voor hetzelfde doeleinde gebruiken. Dit sleutelwoord is synoniem met ANY.

  • EXISTS    Gebruik EXISTS in een WHERE-component om aan te geven dat een subquery minstens één rij als resultaat moet geven. EXISTS kan ook worden voorafgegaan door NOT om aan te geven dat een subquery geen rijen mag opleveren.

    Via volgende query wordt bijvoorbeeld een lijst met producten opgehaald die in minstens één bestaande order voorkomen:

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

    Bij gebruik van NOT EXISTS wordt via de query een lijst met producten opgehaald die niet in minstens één bestaande order voorkomen:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Gebruik IN in een WHERE-component om na te gaan welke waarden in de huidige rij van de hoofdquery deel uitmaken van de resultatenset van de subquery. IN kan ook worden voorafgegaan door NOT om te controleren welke waarden in de huidige rij van de hoofdquery geen deel uitmaken van de resultatenset van de subquery.

    Via volgende query wordt bijvoorbeeld een lijst met de orders (en orderdatums) opgehaald die door andere werknemers dan verkopers zijn verwerkt:

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

    Bij gebruik van NOT IN kunt u dezelfde query als volgt schrijven:

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

Naar boven

Uw Office-vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Office Insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagents.

×