Log på med Microsoft
Log på, eller opret en konto.
Hej
Markér en anden konto.
Du har flere konti
Vælg den konto, du vil logge på med.

Nogle gange vil du måske bruge resultaterne af 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 det pågældende produkt. Sammenligning af disse ordredatoer kræver også en forespørgsel. Du kan indlejre denne forespørgsel i hovedforespørgslen ved hjælp af en underordnet forespørgsel.

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

I denne artikel

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

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

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

Du kan bruge et underforespørgselsfeltalias til at vise værdier, der afhænger af andre værdier i den aktuelle række, hvilket ikke er muligt uden at bruge en underforespørgsel.

Lad os f.eks. vende tilbage til det eksempel, hvor du vil se intervallet mellem ordrer for hvert af dine produkter. For at bestemme dette interval skal du sammenligne hver ordredato med andre ordredatoer for det pågældende produkt. Du kan oprette en forespørgsel, der viser disse oplysninger, ved hjælp af Databaseskabelonen Northwind.

  1. Klik på Ny under fanen Filer.

  2. Klik på Eksempelskabeloner 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.

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

  6. Klik på fanen Forespørgsler , og dobbeltklik derefter på Produktordrer.

  7. Dobbeltklik på feltet Produkt-id og feltet Ordredato for at føje dem til forespørgselsdesigngitteret.

  8. I rækken Sortér i kolonnen Produkt-id i gitteret skal du vælge Stigende.

  9. I rækken Sortér i kolonnen Ordredato i gitteret skal du vælge Faldende.

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

  11. I dialogboksen Zoom skal du skrive eller indsætte følgende udtryk:

    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 underforespørgslen. For hver række vælger underforespørgslen den seneste ordredato, der er mindre ny end den ordredato, der allerede er knyttet til rækken. Bemærk, hvordan du bruger nøgleordet AS til at oprette et tabelalias, så du kan sammenligne værdier i underforespørgslen med værdier i den aktuelle række i hovedforespørgslen.

  12. 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 forrige ordredato for det pågældende produkt ved hjælp af værdien for den forrige dato, som vi har defineret ved hjælp af en underforespørgsel.

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

    1. Forespørgslen kører og viser en liste over produktnavne, ordredatoer, tidligere ordredatoer og intervallet mellem ordredatoer. Resultaterne sorteres først efter Produkt-id (i stigende rækkefølge) og derefter efter Ordredato (i faldende rækkefølge).

    2. Bemærk!: Da produkt-id er et opslagsfelt, viser Access som standard opslagsværdierne (i dette tilfælde produktnavnet) i stedet for de faktiske produkt-id'er. Selvom dette ændrer de viste værdier, ændrer det ikke sorteringsrækkefølgen.

  14. Luk Northwind-databasen.

Toppen af siden

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, som feltet viser.

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

  1. Åbn Northwind.accdb, og aktivér indholdet.

  2. Luk logonformularen.

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

  4. Dobbeltklik på Ordrer og medarbejdere under fanen Tabeller.

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

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

  7. I feltet Zoom skal du skrive eller indsætte følgende udtryk:

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

    Dette er underforespørgslen. Den vælger alle medarbejder-id'erne, hvor medarbejderen ikke har en stilling som sælger, og leverer dette resultatsæt til hovedforespørgslen. Hovedforespørgslen kontrollerer derefter, om medarbejder-id'er fra tabellen Ordrer er i resultatsættet.

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

    Forespørgslen køres, og forespørgselsresultaterne viser en liste over ordrer, der blev behandlet af medarbejdere, der ikke er salgsrepræsentanter.

Toppen af siden

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

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

Bemærk!: Denne liste er ikke udtømmende. Du kan bruge et hvilket som helst gyldigt SQL-nøgleord i en underforespørgsel, undtagen nøgleord til datadefinition.

  • ALLE    Brug ALL i en WHERE-delsætning til at hente rækker, der opfylder betingelsen, sammenlignet med hver række, der returneres af underforespørgslen.

    Antag f.eks., at du analyserer studerendes data på et universitet. De studerende skal opretholde et minimum GPA, som varierer fra større til større. Hovedfagsstuderende og deres mindste gruppepolitikobjekter gemmes i en tabel med navnet Hovedfagsstuderende, og de relevante oplysninger om studerende gemmes i en tabel med navnet Student_Records.

    Hvis du vil have vist en liste over hovedfagsstuderende (og deres mindste gruppepolitikobjekter), som hver studerende med den pågældende major overstiger minimum GPA for, kan 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]);
  • NOGEN    Brug ANY i en WHERE-delsætning til at hente rækker, der opfylder betingelsen sammenlignet med mindst én af de rækker, der returneres af underforespørgslen.

    Antag f.eks., at du analyserer studerendes data på et universitet. De studerende skal opretholde et minimum GPA, som varierer fra større til større. Hovedfagsstuderende og deres mindste gruppepolitikobjekter gemmes i en tabel med navnet Hovedfagsstuderende, og de relevante oplysninger om studerende gemmes i en tabel med navnet Student_Records.

    Hvis du vil have vist en liste over hovedfagsstuderende (og deres mindste GPA'er), som en studerende med den pågældende hovedfag ikke opfylder minimum GPA for, 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 til at angive, at en underforespørgsel skal returnere mindst én række. Du kan også forordet EXISTS med NOT for at angive, at en underforespørgsel ikke skal returnere nogen rækker.

    Følgende forespørgsel returnerer f.eks. en liste over produkter, der findes i mindst én eksisterende rækkefølge:

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

    Ved hjælp af IKKE FINDES returnerer forespørgslen en liste over 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]);
  • I    Brug IN i en WHERE-delsætning til at bekræfte, at en værdi i den aktuelle række i hovedforespørgslen er en del af det sæt, som underforespørgslen returnerer. Du kan også foranordne IN med NOT for at bekræfte, at en værdi i den aktuelle række i hovedforespørgslen ikke er en del af det sæt, som underforespørgslen returnerer.

    Følgende forespørgsel returnerer f.eks. en liste over ordrer (med ordredatoer), der blev behandlet af 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 hjælp af NOT IN kan du skrive den samme forespørgsel på denne 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

Har du brug for mere hjælp?

Vil du have flere indstillinger?

Udforsk abonnementsfordele, gennemse kurser, få mere at vide om, hvordan du sikrer din enhed og meget mere.

Communities hjælper dig med at stille og besvare spørgsmål, give feedback og høre fra eksperter med omfattende viden.

Var disse oplysninger nyttige?

Hvor tilfreds er du med kvaliteten af sproget?
Hvad påvirkede din oplevelse?
Når du trykker på Send, bliver din feedback brugt til at forbedre Microsoft-produkter og -tjenester. Din it-administrator kan indsamle disse data. Erklæring om beskyttelse af personlige oplysninger.

Tak for din feedback!

×