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

Vigtigt: Denne artikel er maskinoversat. Se ansvarsfraskrivelsen. Du kan finde den engelske version af denne artikel her til din orientering.

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 underordnet forespørgsel.

Du kan skrive en underforespørgsel i et udtryk eller i en SQL-sætning (Structured Query Language) i SQL-visning.

Bemærk: I denne artikel gælder ikke for Access-apps – den nye type database du udformer med Access og Publicer online. Du kan få flere oplysninger i oprette en Access-app .

I denne artikel

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

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

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

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

Du kan bruge en underforespørgsel som et feltalias. Brug af en underforespørgsel som et feltalias, når du vil bruge resultaterne underforespørgsel som et felt i din primære forespørgsel.

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.

Vis, hvordan jeg konfigurerer Northwind

  1. Klik på Ny under fanen Filer.

  2. Klik på Eksempel under Tilgængelige skabeloner.

  3. Klik på Northwind, og klik derefter på Opret.

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

  1. Klik på Forespørgselsdesign i gruppen Forespørgsler under fanen Opret.

  2. Klik på fanen Forespørgsler i dialogboksen Vis tabel, og dobbeltklik derefter på Produktordrer.

  3. Luk dialogboksen Vis tabel.

  4. Dobbeltklik på feltet Produkt-id og feltet Ordredato for at føje dem til designgitteret for forespørgslen.

  5. Vælg Stigende i rækken Sortér i kolonnen Produkt-id i gitteret.

  6. Vælg Faldende i rækken Sortér i kolonnen Ordredato i gitteret.

  7. Højreklik på rækken Felt i gitterets tredje kolonne, og klik derefter på Zoom i genvejsmenuen.

  8. Skriv eller indsæt følgende udtryk i dialogboksen Zoom:

    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.

  1. Skriv følgende udtryk i rækken Felt i den fjerde kolonne i gitteret:

    Interval: [Order Date]-[Prior Date]

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.

  1. Klik på Kør i gruppen Resultater under fanen Design.

    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.

  2. Luk Northwind-databasen.

Toppen af siden

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

Du kan bruge en underforespørgsel som et feltkriterium. Brug af en underforespørgsel som et feltkriterium, når du vil bruge resultatet 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 ikke 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-databasen, og aktivér dens indhold.

  2. Luk logonformularen.

  3. Klik på Forespørgselsdesign i gruppen Andet under fanen Opret.

  4. Dobbeltklik på Ordrer og Medarbejdere under fanen Tabeller i dialogboksen Vis tabel.

  5. Luk dialogboksen Vis tabel.

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

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

  8. Skriv eller indsæt følgende udtryk i dialogboksen Zoom:

    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å Kør i gruppen Resultater under fanen Design.

    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.

Toppen af siden

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.

  • ALL    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]);
  • ANY    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.

  • EXISTS    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]);
  • IN    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');

Toppen af siden

Bemærk: Ansvarsfraskrivelse for maskinoversættelse: Denne artikel er blevet oversat af et computersystem uden menneskelig indgriben. Microsoft tilbyder disse maskinoversættelse for at hjælpe ikke-engelsktalende brugere til at kunne nyde indhold om Microsofts produkter, tjenester og teknologier. Da artiklen er maskinoversat, kan den indeholde forkerte ord eller syntaks- eller grammatikfejl.

Udvid dine 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.

×