Neste en spørring i 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 delspørring.

Du kan skrive en delspørring i et uttrykk eller i en SQL-setning (Structured Query Language) i SQL-visning.

I denne artikkelen

Bruke resultatene av en spørring som et felt i en annen spørring

Bruke en delspørring som et kriterium for et spørringsfelt

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

Bruke resultatene av en spørring som et felt i en annen spørring

Du kan bruke en delspørring som et feltalias (SQL). Bruk en delspørring som et feltalias når du vil bruke delspørringsresultatene som et felt i hovedspørringen.

Merknad: 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.

Vis meg hvordan jeg installerer Gastronor

  1. Klikk Ny i kategorien Fil.

  2. Klikk Eksempelmaler under Tilgjengelige maler.

  3. Klikk Gastronor, og klikk deretter Opprett.

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

  1. Klikk Spørringsutforming i Spørringer-gruppen i kategorien Opprett.

  2. Klikk kategorien Spørringer i dialogboksen Vis tabell, og dobbeltklikk deretter Vareordrer.

  3. Lukk dialogboksen Vis tabell.

  4. Dobbeltklikk Vare-ID- og Ordredato-feltet for å legge dem til i spørringsutformingsrutenettet.

  5. Velg Stigende i Sorter-raden i kolonnen Vare-ID i rutenettet.

  6. Velg Synkende i Sorter-raden i kolonnen Ordredato i rutenettet.

  7. Høyreklikk Felt-raden i den tredje kolonnen i rutenettet, og klikk deretter Zoom på hurtigmenyen.

  8. Skriv eller lim inn følgende uttrykk i dialogboksen Zoom:

    Tidligere dato: (SELECT MAX([Ordredato]) 
    FROM [Vareordrer] AS [Gamle ordrer]
    WHERE [Gamle ordrer].[Ordredato] < [Vareordrer].[Ordredato]
    AND [Gamle ordrer].[Vare-ID] = [Vareordrer].[Vare-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.

  1. Skriv inn følgende uttrykk i Felt-raden i den fjerde kolonnen i rutenettet:

    Intervall: [Varedato]-[Tidligere dato]

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.

  1. Klikk Kjør i Resultater-gruppen i kategorien Utforming.

    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. Merknad: 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.

  2. Lukk Gastronor-databasen.

Til toppen av siden

Bruke en delspørring som et kriterium for et spørringsfelt

Du kan bruke en delspørring som et feltkriterier. 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 ikke 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 Gastronor 2007.accdb, og aktiver innholdet.

  2. Lukk påloggingsskjemaet.

  3. Klikk Spørringsutforming i Annet-gruppen i kategorien Opprett.

  4. Dobbeltklikk Ordrer og Ansatte i kategorien Tabeller i dialogboksen Vis tabell.

  5. Lukk dialogboksen Vis tabell.

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

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

  8. Skriv eller lim inn følgende uttrykk i Zoom-boksen:

    IN (SELECT [ID] FROM [Ansatte] 
    WHERE [Stilling]<>'Selger')

    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 Kjør i Resultater-gruppen i kategorien Utforming.

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

Til toppen av siden

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

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

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

  • ALL    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 [Fag], [Minstekarakter] 
FROM [Fagene]
WHERE [Minstekarakter] < ALL
(SELECT [Karakter] FROM [Studentposter]
WHERE [Studentposter].[Fag]=[Fagene].[Fag]);
  • ANY    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 [Fag], [Minstekarakter] 
    FROM [Fag]
    WHERE [Minstekarakter] > ANY
    (SELECT [Karakter] FROM [Studentposter]
    WHERE [Studentposter].[Fag]=[Fag].[Fag]);

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

  • EXISTS    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 [Varer]
    WHERE EXISTS
    (SELECT * FROM [Ordredetaljer]
    WHERE [Ordredetaljer].[Vare-ID]=[Varer].[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 [Varer]
    WHERE NOT EXISTS
    (SELECT * FROM [Ordredetaljer]
    WHERE [Ordredetaljer].[Vare-ID]=[Varer].[ID]);
  • IN    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 [Vare-ID], [Varedato]
    FROM [Ordrer]
    WHERE [Ansatt-ID] IN
    (SELECT [ID] FROM [Ansatte]
    WHERE [Stilling]<>'Selger');

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

    SELECT [Vare-ID], [Varedato]
    FROM [Ordrer]
    WHERE [Ansatt-ID] NOT IN
    (SELECT [ID] FROM [Ansatte]
    WHERE [Stilling]='Selger');

Til toppen av siden

Utvid ferdighetene dine
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.

×