Indlejr en forespørgsel i en anden forespørgsel eller i et udtryk ved hjælp af en underforespørgsel

Nogle gange kan det være, at du gerne vil bruge resultatet fra en forespørgsel som et felt i en anden forespørgsel eller som et kriterium for et forespørgselsfelt. Antag f.eks., at du vil se intervallet mellem ordrer for hvert af dine produkter. Hvis du vil oprette en forespørgsel, der viser dette interval, skal du sammenligne hver ordredato med andre ordredatoer for produktet. Du skal også oprette en forespørgsel for at sammenligne disse datoer. Du kan indlejre denne forespørgsel i hovedforespørgslen ved at bruge en <token>TE000126768</token>.

Du kan skrive en underforespørgsel i et <token>TE000127167</token> eller i en SQL-sætning (Structured Query Language) i <token>TE000126761</token>.

I denne artikel

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Brug resultaterne af en forespørgsel som et felt i en anden forespørgsel</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Brug en underforespørgsel som et kriterium for et forespørgselsfelt</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Almindelige SQL-nøgleord, som du kan bruge med en underforespørgsel</link>

Brug resultaterne af en forespørgsel som et felt i en anden forespørgsel

Du kan bruge en underforespørgsel som et alias. Brug en underforespørgsel som et feltalias, når du vil bruge resultaterne af en underforespørgsel som et felt i hovedforespørgslen.

Bemærk!: En underforespørgsel, som du bruger som et feltalias, kan ikke returnere mere end ét felt.

Du kan bruge et alias for et underforespørgselsfelt til at få vist de værdier, der er afhængige af andre værdier i den aktuelle række, og som ikke er mulige uden brug af en underforespørgsel.

Lad os f.eks. returnere til det eksempel, hvor du vil se intervallerne mellem ordrerne for hvert produkt. Du skal sammenligne hver enkelt ordredato med andre ordredatoer for produktet for at kunne fastslå intervallet. Du kan oprette en forespørgsel, som viser disse oplysninger, ved at bruge Northwind-databaseskabelonen.

  1. Klik på <ui>Ny</ui> under fanen <ui>Filer</ui>.

  2. Klik på <ui>Eksempel</ui> under <ui>Tilgængelige skabeloner</ui>.

  3. Klik på <ui>Northwind</ui>, og klik derefter på <ui>Opret</ui>.

  4. Følg vejledningen på siden <ui>Northwind Traders</ui> (under fanen <ui>Startskærmbillede</ui>) for at åbne databasen, og luk derefter dialogboksen Logon.

  5. Klik på <ui>Forespørgselsdesign</ui> i gruppen <ui>Forespørgsler</ui> under fanen <ui>Opret</ui>.

  6. Klik på fanen <ui>Forespørgsler</ui> i dialogboksen <ui>Vis tabel</ui>, og dobbeltklik derefter på <ui>Produktordrer</ui>.

  7. Luk dialogboksen <ui>Vis tabel</ui>.

  8. Dobbeltklik på feltet <ui>Produkt-id</ui> og feltet <ui>Ordredato</ui> for at føje dem til designgitteret for forespørgslen.

  9. Vælg <ui>Stigende</ui> i rækken <ui>Sortér</ui> i kolonnen <ui>Produkt-id</ui> i gitteret.

  10. Vælg <ui>Faldende</ui> i rækken <ui>Sortér</ui> i kolonnen <ui>Ordredato</ui> i gitteret.

  11. Højreklik på rækken <ui>Felt</ui> i gitterets tredje kolonne, og klik derefter på <ui>Zoom</ui> i genvejsmenuen.

  12. Skriv eller indsæt følgende udtryk i dialogboksen <ui>Zoom</ui>:

    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])

    Dette udtryk er en underforespørgsel. For hver række vælger underforespørgslen den nyeste ordredato i forhold til den ordredato, der allerede er tilknyttet rækken. Bemærk, hvordan du bruger nøgleordet AS til at oprette et tabelalias, så du kan sammenligne værdierne i underforespørgslen med værdierne i den aktuelle række i hovedforespørgslen.

  13. Skriv følgende udtryk i rækken <ui>Felt</ui> i den fjerde kolonne i gitteret:

    <codeInline>Interval: [Order Date]-[Prior Date]</codeInline>

    Dette udtryk beregner intervallet mellem hver ordredato og den foregående ordredato for produktet ved hjælp af værdien for den foregående dato, som vi definerede ved hjælp af en underforespørgsel.<br />

  14. Under <ui>Design</ui>fanen i gruppen <ui>Resultater</ui> klik på <ui>Kør</ui>.

    1. Forespørgslen køres, og der vises en liste over produktnavne, ordredatoer, foregående ordredatoer og intervallet mellem ordredatoerne. Resultaterne sorteres først efter produkt-id (i stigende rækkefølge) og derefter efter ordredato (i faldende rækkefølge).

    2. Bemærk!: Fordi Produkt-id er et opslagsfelt, vises opslagsfelterne som standard i Access (i dette tilfælde produktnavnet) i stedet for de faktiske produkt-id'er. Selvom dette ændrer de værdier, der vises, ændrer det ikke sorteringsrækkefølgen.

  15. Luk Northwind-databasen.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Til toppen af siden</link>

Brug en underforespørgsel som et kriterium for et forespørgselsfelt

Du kan bruge en underforespørgsel som et feltkriterium. Brug en underforespørgsel som et feltkriterium, når du vil bruge resultaterne af underforespørgslen til at begrænse de værdier, der vises i feltet.

Antag f.eks., at du vil gennemse en liste over ordrer, der blev behandlet af de medarbejdere, der <legacyItalic>ikke</legacyItalic> er sælgere. Hvis du vil oprette en sådan liste, skal du sammenligne medarbejder-id'et for hver ordre med en liste over medarbejder-id'er for de medarbejdere, der ikke er sælgere. Du skal bruge en underforespørgsel som vist i følgende procedure for at oprette denne liste og bruge den som et feltkriterium:

  1. Åbn Northwind.accdb, og aktivér dens indhold.

  2. Luk logonformularen.

  3. Klik på <ui>Forespørgselsdesign</ui> i gruppen <ui>Andet</ui> under fanen <ui>Opret</ui>.

  4. Dobbeltklik på <ui>Ordrer</ui> og <ui>Medarbejdere</ui> under fanen <ui>Tabeller</ui> i dialogboksen <ui>Vis tabel</ui>.

  5. Luk dialogboksen <ui>Vis tabel</ui>.

  6. Dobbeltklik på felterne <ui>Medarbejder-id</ui>, <ui>Ordre-id</ui> og <ui>Ordredato</ui> i tabellen Ordrer for at føje dem til designgitteret for forespørgslen. Dobbeltklik på feltet <ui>Stilling</ui> i tabellen Medarbejdere for at føje det til designgitteret.

  7. Højreklik på rækken <ui>Kriterier</ui> i kolonnen Medarbejder-id, og klik derefter på <ui>Zoom</ui> i genvejsmenuen.

  8. Skriv eller indsæt følgende udtryk i dialogboksen <ui>Zoom</ui>:

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

    Dette er underforespørgslen. Den vælger alle de medarbejder-id'er, hvor medarbejderen ikke har stillingen Sælger. Resultaterne sendes til hovedforespørgslen. I hovedforespørgslen kontrolleres derefter, om medarbejder-id'erne fra tabellen Ordrer findes i resultaterne.

  9. Klik på <ui>Kør</ui> i gruppen <ui>Resultater</ui> under fanen <ui>Design</ui>.

    Forespørgslen køres, og resultatet af forespørgslen er en liste over de ordrer, der blev behandlet af de medarbejdere, der ikke er sælgere.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Toppen af siden</link>

Almindelige SQL-nøgleord, du kan bruge med en underforespørgsel

Der er flere forskellige SQL-nøgleord, du kan bruge med en underforespørgsel:

Bemærk!: Listen er ikke komplet. Du kan bruge alle gyldige SQL-nøgleord i en underforespørgsel, undtagen datadefinitionsnøgleord.

  • <embeddedLabel>ALL</embeddedLabel> Brug ALL i en WHERE-delsætning for at hente de rækker, der opfylder betingelsen, når der sammenlignes med hver enkelt af de rækker, der returneres af underforespørgslen.

    Antag f.eks., at du analyserer studenterdata på et universitet. De studerende skal have en minimumkarakter, som varierer alt efter, hvilken linje de læser. De forskellige linjer og deres minimumkarakter gemmes i en tabel, der hedder Linjer, og de relevante oplysninger om de studerende gemmes i en tabel, der hedder Studenterposter.

    Hvis du vil se en liste over de linjer (og den tilhørende minimumkarakter), hvor alle de studerende på den linje overstiger minimumkarakteren, skal du bruge følgende forespørgsel:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <embeddedLabel>ANY</embeddedLabel> Brug ANY i en WHERE-delsætning for at hente de rækker, der opfylder betingelsen, når der sammenlignes med mindst én af de rækker, der returneres af underforespørgslen.

    Antag f.eks., at du analyserer studenterdata på et universitet. De studerende skal have en minimumkarakter, som varierer alt efter, hvilken linje de læser. De forskellige linjer og deres minimumkarakter gemmes i en tabel, der hedder Linjer, og de relevante oplysninger om de studerende gemmes i en tabel, der hedder Studenterposter.

    Hvis du vil se en liste over de linjer (og den tilhørende minimumkarakter), hvor en af de studerende på den linje ikke har opnået minimumkarakteren, kan du bruge følgende forespørgsel:

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

    Bemærk!: Du kan også bruge nøgleordet SOME til det samme formål. Nøgleordet SOME er synonymt med ANY.

  • <embeddedLabel>EXISTS</embeddedLabel> Brug EXISTS i en WHERE-delsætning for at angive, at en underforespørgsel skal returnere mindst én række. Du kan også sætte NOT foran EXISTS for at angive, at en underforespørgsel ikke skal returnere nogen rækker.

    Følgende forespørgsel returnerer f.eks. en liste over de produkter, der findes i mindst én eksisterende ordre:

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

    Når du bruger NOT EXISTS, returnerer forespørgslen en liste over de produkter, der ikke findes i mindst én eksisterende ordre:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN</embeddedLabel> Brug IN i en WHERE-delsætning til at kontrollere, at en værdi i den aktuelle række i hovedforespørgslen er en del af det sæt, som returneres af underforespørgslen. Du kan også sætte NOT foran IN for at kontrollere, at en værdi i den aktuelle række i hovedforespørgslen ikke er en del af det sæt, som returneres af underforespørgslen.

    Følgende forespørgsel returnerer f.eks. en liste over de ordrer (med ordredatoer), som blev behandlet af de medarbejdere, der ikke er sælgere:

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

    Ved at bruge NOT IN kan du skrive den samme forespørgsel på følgende måde:

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

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Toppen af siden</link>

Udvid dine Office-færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Bliv Office Insider

Var disse oplysninger nyttige?

Tak for din feedback!

Tak for din feedback! Det lyder, som om det vil kunne hjælpe, hvis du bliver sat i forbindelse med en af vores Office-supportteknikere.

×