Neste en spørring inni en annen spørring eller i et uttrykk ved hjelp av en delspørring

Enkelte ganger ønsker du kanskje å bruke resultatene fra en spørring som et felt i en annen spørring, eller som et kriterium for en spørringsfelt. La oss for eksempel anta at du vil se intervallet mellom ordrer for hvert av produktene dine. Hvis du vil opprette en spørring som viser dette intervallet, må du sammenligne hver ordredato med andre ordredatoer for dette produktet. Det kreves også en spørring for å sammenligne disse ordredatoene. Du kan neste denne spørringen i hovedspørringen ved hjelp av en <token>TE000126768</token>.

Du kan skrive en delspørring i et <token>TE000127167</token> eller i en SQL-setning (Structured Query Language) i <token>TE000126761</token>.

I denne artikkelen

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Å bruke resultatene av en forespørsel som et felt i en annen forespørsel</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Å bruke en delspørring som et kriterium for et forespørselsfelt</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Vanlige SQL nøkkelord som du kan bruke med en delspørring</link>

Bruke resultatene av en forespørsell som et felt i en annen forespørsel

Du kan bruke en delspørring som et feltalias. Bruk en delspørring som et feltalias når du vil bruke delspørringsresultatene som et felt i hovedforespørselen.

Obs!: En delspørring som du bruker som et feltalias, kan ikke returnere mer enn ett felt.

Du kan bruke feltaliaset for delspørringen til å vise verdier som avhenger av andre verdier i den gjeldende raden, noe som ikke er mulig uten å bruke en delspørring.

La oss for eksempel gå tilbake til eksemplet der du vil se intervallet mellom ordrer for hvert av produktene dine. Hvis du vil fastslå dette intervallet, må du sammenligne hver ordredato med andre ordredatoer for dette produktet. Du kan opprette en spørring som viser denne informasjonen ved å bruke Gastronor-databasemalen.

  1. Klikk <ui>Ny</ui> i kategorien <ui>Fil</ui>.

  2. Klikk <ui>Eksempelmaler</ui> under <ui>Tilgjengelige maler</ui>.

  3. Klikk <ui>Gastronor</ui>, og klikk deretter <ui>Opprett</ui>.

  4. Følg instruksjonene på <ui>Gastronor delikatesser</ui>-siden (i objektkategorien <ui>Oppstartskjermbilde</ui>) for å åpne databasen, og lukk deretter vinduet Påloggingsdialog.

  5. Klikk <ui>Spørringsutforming</ui> i <ui>Spørringer</ui>-gruppen i kategorien <ui>Opprett</ui>.

  6. Klikk kategorien <ui>Spørringer</ui> i dialogboksen <ui>Vis tabell</ui>, og dobbeltklikk deretter <ui>Vareordrer</ui>.

  7. Lukk dialogboksen <ui>Vis tabell</ui>.

  8. Dobbeltklikk <ui>Vare-ID</ui>- og <ui>Ordredato</ui>-feltet for å legge dem til i spørringsutformingsrutenettet.

  9. Velg <ui>Stigende</ui> i <ui>Sorter</ui>-raden i kolonnen <ui>Vare-ID</ui> i rutenettet.

  10. Velg <ui>Synkende</ui> i <ui>Sorter</ui>-raden i kolonnen <ui>Ordredato</ui> i rutenettet.

  11. Høyreklikk <ui>Felt</ui>-raden i den tredje kolonnen i rutenettet, og klikk deretter <ui>Zoom</ui> på hurtigmenyen.

  12. Skriv eller lim inn følgende uttrykk 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 uttrykket er delspørringen. For hver rad velger delspørringen den nyeste ordredatoen som er mindre ny enn ordredatoen som allerede er tilknyttet raden. Legg merke til hvordan du bruker nøkkelordet AS til å opprette et tabellalias, slik at du kan sammenligne verdier i delspørringen med verdier i den gjeldende raden til hovedspørringen.

  13. Skriv inn følgende uttrykk i <ui>Felt</ui>-raden i den fjerde kolonnen i rutenettet:

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

    Dette uttrykket beregner intervallet mellom hver ordredato og den tidligere ordredatoen for denne varen og bruker verdien for tidligere dato som ble definert ved hjelp av en delspørring.<br />

  14. På <ui>Design</ui> fanen, i <ui>Resultat</ui>gruppen, klikk <ui>Kjør</ui>.

    1. Spørringen kjøres og viser en liste over varenavn, ordredatoer, tidligere ordredatoer og intervallet mellom ordredatoer. Resultatene sorteres først etter Vare-ID (i stigende rekkefølge), og deretter etter Ordredato (i synkende rekkefølge).

    2. Obs!: Fordi Vare-ID som standard er et oppslagsfelt, vises oppslagsverdiene (produktnavnet i dette tilfellet), og ikke de faktiske vare-IDene. Selv om dette endrer verdiene som vises, endres ikke sorteringsrekkefølgen.

  15. Lukk Gastronor-databasen.

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

Å bruke en delspørring som et kriterium for et forespørselsfelt

Du kan bruke en delspørring som et feltkriterium. Bruk en delspørring som et feltkriterium når du vil bruke resultatene av delspørringen til å begrense verdiene som feltet viser.

Anta for eksempel at du vil gå gjennom en ordreliste som ble behandlet av ansatte som <legacyItalic>ikke</legacyItalic> er selgere. Hvis du vil generere denne listen, må du sammenligne ansatt-ID for hver ordre med en liste over ansatt-IDer for ansatte som ikke er selgere. Hvis du vil opprette denne listen og bruke den som et feltkriterium, bruker du en delspørring, som vist i følgende fremgangsmåte:

  1. Åpne Northwind.accdb og aktiver innholdet.

  2. Lukk påloggingsskjemaet.

  3. Klikk <ui>Spørringsutforming</ui> i <ui>Annet</ui>-gruppen i kategorien <ui>Opprett</ui>.

  4. Dobbeltklikk <ui>Ordre</ui> og <ui>Ansatte</ui> i kategorien <ui>Tabeller</ui> i dialogboksen <ui>Vis tabell</ui>.

  5. Lukk dialogboksen <ui>Vis tabell</ui>.

  6. Dobbeltklikk <ui>Ansatt-ID</ui>-feltet, <ui>Ordre-ID</ui>-feltet og <ui>Ordredato</ui>-feltet i Ordrer-tabellen for å legge dem til i spørringsutformingsrutenettet. Dobbeltklikk <ui>Stilling</ui>-feltet i Ansatte-tabellen for å legge det til i utformingsrutenettet.

  7. Høyreklikk <ui>Kriterier</ui>-raden i kolonnen Ansatt-ID, og klikk deretter <ui>Zoom</ui> på hurtigmenyen.

  8. Skriv eller lim inn følgende uttrykk i <ui>Zoom</ui>-boksen:

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

    Dette er delspørringen. Den velger alle ansatt-IDene der den ansatte ikke har stillingstittelen Selger, og leverer dette resultatsettet til hovedspørringen. Hovedspørringen kontrollerer deretter om ansatt-IDer fra Ordrer-tabellen er i resultatsettet.

  9. Klikk <ui>Kjør</ui> i <ui>Resultater</ui>-gruppen i kategorien <ui>Utforming</ui>.

    Spørringen kjøres, og spørringsresultatene viser en ordreliste som ble behandlet av ansatte som ikke er selgere.

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

Vanlige SQL-nøkkelord du kan bruke med en delspørring

Det finnes flere SQL-nøkkelord du kan bruke med en delspørring

Obs!: Dette er ikke en fullstendig liste. Du kan bruke alle gyldige SQL-nøkkelord i en delspørring, bortsett fra datadefinisjonsnøkkelord.

  • <embeddedLabel>ALL</embeddedLabel> Bruk ALL i en WHERE-setning til å hente rader som oppfyller betingelsen når den sammenlignes med alle rader som returneres av delspørringen.

    Anta for eksempel at du analyserer studentdata ved en høyskole. Studentene må ha minstekarakterer, som varierer fra fag til fag. Fagene og deres minstekarakterer lagres i en tabell kalt Fag, og den aktuelle studentinformasjonen lagres i en tabell kalt Studentposter.

    Du kan bruke følgende spørring for å se en oversikt over fagene (og minstekarakterene) som hver student med dette faget overskrider minstekarakteren med:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • <embeddedLabel>ANY</embeddedLabel> Bruk ANY i en WHERE-setning til å hente rader som oppfyller betingelsen når de sammenlignes med minst én av radene som returneres av delspørringen.

    Anta for eksempel at du analyserer studentdata ved en høyskole. Studentene må ha minstekarakterer, som varierer fra fag til fag. Fag og deres minstekarakterer lagres i en tabell kalt Fag, og den aktuelle studentinformasjonen lagres i en tabell kalt Studentposter.

    Du kan bruke følgende spørring for å se en oversikt over fagene (og minstekarakterene), som enhver student som tar dette faget, ikke oppfyller minstekarakteren for:

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

    Obs!: Du kan også bruke nøkkelordet SOME til samme formål. Dette nøkkelordet er synonymt med ANY.

  • <embeddedLabel>EXISTS</embeddedLabel> Bruk EXISTS i en WHERE-setning til å angi at en delspørring skal returnere minst én rad. Du kan også sette NOT foran EXISTS for å angi at en delspørring ikke skal returnere noen rader.

    Den følgende spørringen returnerer for eksempel en liste med varer som finnes i minst én eksisterende ordre:

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

    Ved hjelp av NOT EXISTS returnerer spørringen for eksempel en liste med varer som ikke finnes i minst én eksisterende ordre:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN</embeddedLabel> Bruk IN i en WHERE-setning til å bekrefte at en verdi i den gjeldende raden til hovedspørringen er del av settet som delspørringen returnerer. Du kan også sette NOT foran IN for å bekrefte at en verdi i den gjeldende raden til hovedspørringen, ikke er del av settet som delspørringen returnerer.

    Den følgende spørringen returnerer en ordreliste (med ordredatoer) som ble behandlet av ansatte som ikke er selgere.

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

    Ved å bruke NOT IN kan du skrive den samme spørringen på følgende måte:

    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">Til toppen av siden</link>

Bli bedre på Office
Utforsk opplæring
Vær først ute med de nye funksjonene
Bli med i Office Insiders

Var denne informasjonen nyttig?

Takk for tilbakemeldingen!

Takk for tilbakemeldingen! Det høres ut som det kan være lurt å sette deg i kontakt med én av våre Office-kundestøtteagenter.

×