Kyselyn asettaminen sisäkkäin toisen kyselyn tai lausekkeen kanssa alikyselyllä

Joskus haluat ehkä käyttää kyselyn tuloksia kenttänä toisessa kyselyssä tai ehtona kyselykentässä. Näin saattaa käydä, jos haluat esimerkiksi nähdä kaikkien tuotteiden tilausten väliset jaksot. Jos haluat luoda tämän jakson näyttävän kyselyn, sinun on verrattava kunkin tilauksen päivämäärää kyseisen tuotteen muiden tilausten päivämäärää. Näiden tilauspäivämäärien vertaaminen edellyttää myös kyselyä. Voit asettaa tämän kyselyn pääkyselyn sisälle alikysely.

Voit kirjoittaa alikyselyn lauseke tai SQL-lauseeseen (Structured Query Language) SQL-näkymä.

Tämän artikkelin sisältö

Kyselyn tulosten käyttäminen kenttänä toisessa kyselyssä

Alikyselyn käyttäminen kyselykentän ehtona

Alikyselyissä käytettävät yleiset avainsanat

Kyselyn tulosten käyttäminen kenttänä toisessa kyselyssä

Voit käyttää alikyselyä kentän alias (SQL). Käytä alikyselyä kentän tunnusnimenä, kun haluat käyttää alikyselyn tuloksia kenttänä pääkyselyssäsi.

Huomautus: Alikysely, jota käytät kentän tunnusnimenä, voi palauttaa vain yhden kentän.

Voit käyttää alikyselyn kentän tunnusnimeä näyttääksesi arvot, jotka riippuvat nykyisen rivin muista arvoista, mikä ei ole mahdollista ilman alikyselyä.

Palataanpa esimerkkiin, jossa haluat nähdä tuotteiden tilausten väliset ajanjaksot. Määrittääksesi tämän ajanjakson, sinun on verratta kunkin tilauksen päivämäärää saman tuotteen muiden tilausten päivämäärin. Voit luoda nämä tiedot näyttävän kyselyn Northwind-tietokantamallilla.

Northwindin määrittäminen

  1. Valitse Tiedosto-välilehdestä Uusi.

  2. Valitse Käytettävissä olevat mallit -kohdasta Esimerkkimallit.

  3. Valitse Northwind ja valitse sitten Luo.

  4. Avaa tietokanta noudattamalla Käynnistysnäyttö-objektivälilehden Northwind Traders -sivun ohjeita ja sulje sitten Sisäänkirjautuminen-valintaikkuna.

  1. Valitse Luo-välilehden Kyselyt-ryhmässä Kyselyn rakennenäkymä.

  2. Valitse Näytä taulukko -valintaikkunassa Kyselyt-välilehti ja kaksoisnapsauta sitten Tuotetilaukset-kohtaa.

  3. Sulje Näytä taulukko -valintaikkuna.

  4. Lisää Tuotetunnus- ja Tilauspäivämäärä-kentät kyselyn rakenneruudukkoon kaksoisnapsauttamalla niitä.

  5. Valitse ruudukon Tuotetunnus-sarakkeen Lajittelu-rivillä Nouseva.

  6. Valitse ruudukon Tilauspäivämäärä-sarakkeen Lajittelu-rivillä Laskeva.

  7. Napsauta ruudukon kolmannen sarakkeen Kenttä-riviä hiiren kakkospainikkeella ja valitse pikavalikosta Zoomaus.

  8. Kirjoita tai liitä Zoomaus-valintaikkunaan seuraava lauseke:

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

Tämä lauseke on alikysely. Kullakin rivillä alikysely valitsee uusimman tilauspäivämäärän, joka on pienempi kuin jo riviin liittyvä tilauspäivämäärä. Huomioi AS-avainsanan käyttö taulukon tunnuksen luomisessa, jotta voit verrata alikyselyn arvoja pääkyselyn nykyisen rivin arvoihin.

  1. Kirjoita ruudukon neljännen sarakkeen Kenttä-riville seuraava lauseke:

    Interval: [Order Date]-[Prior Date]

Tämä lauseke laskee kunkin tilauksen päivämäärän ja saman tilauksen aiemman päivämäärän välisen ajanjakson aiemman päivämäärän arvolla, jonka määritimme alikyselyllä.

  1. Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.

    1. Tämä kysely suoritetaan. Se näyttää luettelon tuotenimistä, tilausten päivämääristä, aiemmista tilausten päivämääristä ja tilausten väleistä. Tulokset lajitellaan ensin tuotetunnuksen (nousevasti) ja sitten tilauksen päivämäärän (laskevasti) mukaan.

    2. Huomautus: Koska tuotetunnuskenttä on hakukenttä, Access näyttää oletusarvoisesti hakuarvot (tässä tapauksessa tuotenimet) todellisten tuotetunnusten sijaan. Vaikka tämä muuttaa näytettäviä arvoja, se ei muuta lajittelujärjestystä.

  2. Sulje Northwind-tietokanta.

Sivun alkuun

Alikyselyn käyttäminen kyselykentän ehtona

Voit käyttää alikyselyä kentän ehto. Käytä alikyselyä kentän ehtona, kun haluat käyttää alikyselyn tuloksia rajoittamaan kentän näyttämiä arvoja.

Oletetaan, että haluat tarkastella luetteloa tilauksista, joita ovat käsitellee työntekijät, jotka eivät ole myyntiedustajia. Tämän luettelon luominen edellyttää, että vertaa kunkin tilauksen työntekijätunnusta sellaisten työntekijöiden työntekijätunnusten luetteloon, jotka eivät ole myyntiedustajia. Jos haluat luoda tällaisen luettelon ja käyttää sitä kentän ehtona, sinun on käytettävä alikyselyä alla olevien ohjeiden mukaisesti:

  1. Avaa Northwind 2007.accdb ja ota sen sisältö käyttöön.

  2. Sulje sisäänkirjautumislomake.

  3. Valitse Luo-välilehden Muu-ryhmästä Kyselyn rakennenäkymä.

  4. Kaksoisnapsauta Näytä taulukko -valintaikkunan Taulukot-välilehden Tilaukset- ja Työntekijät-kohtaa.

  5. Sulje Näytä taulukko -valintaikkuna.

  6. Kaksoisnapsauta Tilaukset-taulukon Työntekijätunnus-, Tilaustunnus- ja Tilauspäivämäärä-kenttää lisätäksesi ne kyselyn rakenneruudukkoon. Kaksoisnapsauta Työntekijät-taulukossa Tehtävänimike-kenttää lisätäksesi sen rakenneruudukkoon.

  7. Napsauta Työntekijätunnus-sarakkeen Ehdot-riviä hiiren kakkospainikkeella ja valitse sitten pikavalikosta Zoomaus.

  8. Kirjoita tai liitä Zoomaus-ruutuun seuraava lauseke:

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

    Tämä on alikysely. Se valitsee kaikki työntekijätunnukset, joiden tehtävänimike ei ole myyntiedustaja, ja toimittaa sitten tulosjoukon pääkyselyyn. Pääkysely tarkistaa sitten, sisältyvätkö Tilaukset-taulukon työntekijätunnukset tähän tulosjoukkoon.

  9. Valitse Rakenne-välilehden Tulokset-ryhmästä Suorita.

    Kysely suoritetaan. Sen tulokset näyttävät luettelon tilauksista, joita ovat käsitelleet työntekijät, jotka eivät ole myyntiedustajia.

Sivun alkuun

Alikyselyissä käytettävät yleiset avainsanat

Voit käyttää alikyselyissä useita SQL-avainsanoja:

Huomautus: Tämä luettelo ei ole kaikenkattava. Voit käyttää alikyselyissä mitä tahansa kelvollisia SQL-avainsanoja, pois lukien tietomääritysavainsanat.

  • ALL    Käytä ALL-avainsanaa WHERE-lauseessa noutamaan ehdot täyttävät rivit verrattaessa kaikkiin alikyselyn palauttamiin riveihin.

Oletetaan, että analysoit oppilaitoksen opiskelijatietoja. Opiskelijoiden keskiarvon on oltava vähintään tietyllä tasolla, joka vaihtelee eri suuntautumislinjoilla. Suuntautumislinjat ja niiden vähimmäiskeskiarvot on tallennettu taulukkoon nimeltä Majors ja asianmukaiset opiskelijatiedot on tallennettu taulukkoon nimeltä Student_Records.

Voit tarkastella kunkin suuntautumislinjan vähimmäiskeskiarvovaatimuksen täyttäviä opiskelijoita seuraavalla kyselyllä:

SELECT [Major], [Min_GPA] 
FROM [Majors]
WHERE [Min_GPA] < ALL
(SELECT [GPA] FROM [Student_Records]
WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Käytä ANY-avainsanaa WHERE-lauseessa noutamaan ehdot täyttävät rivit verrattaessa ainakin yhteen alikyselyn palauttamaan riviin.

    Oletetaan, että analysoit oppilaitoksen opiskelijatietoja. Opiskelijoiden keskiarvon on oltava vähintään tietyllä tasolla, joka vaihtelee eri suuntautumislinjoilla. Suuntautumislinjat ja niiden vähimmäiskeskiarvot on tallennettu taulukkoon nimeltä Majors ja asianmukaiset opiskelijatiedot on tallennettu taulukkoon nimeltä Student_Records.

    Voit tarkastella kunkin suuntautumislinjan vähimmäiskeskiarvovaatimuksen alittavia opiskelijoita seuraavalla kyselyllä:

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

    Huomautus: Voit käyttää samaan tarkoitukseen myös SOME-avainsanaa. SOME-avainsana on ANY-avainsanan synonyymi.

  • EXISTS    Käytä EXISTS-avainsanaa WHERE-lausekkeessa ilmaisemaan sitä, että alikyselyn on palautettava ainakin yksi rivi. Voit käyttää EXISTS-avainsanan edessä NOT-avainsanaa, jos haluat ilmaista, että alikyselyn ei tulisi palauttaa yhtään riviä.

    Seuraava kysely palauttaa esimerkiksi luettelon tilauksista, jotka löytyvät ainakin yhdestä olemassa olevasta tilauksesta:

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

    NOT EXISTS -avainsanalla tämä kysely palauttaa luettelon tilauksista, joita ei löydy ainakin yhdestä olemassa olevasta tilauksesta:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Käytä IN-avainsanaa WHERE-lauseessa, kun haluat tarkistaa, että päärivin nykyisen rivin arvo on osa alikyselyn palauttamaa joukkoa. Voit myös käyttää IN-avainsanan kanssa NOT-avainsanaa. Tällöin voit varmistaa, että pääkyselyn nykyisen rivin arvo ei sisälly alikyselyn palauttamaan tulosjoukkoon.

    Esimerkiksi seuraava kysely palauttaa luettelon tilauksista (tilauspäivämäärien kanssa), joita ovat käsitelleet työntekijät, jotka eivät ole myyntiedustajia:

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

    NOT IN -avainsanayhdistelmällä saman kyselyn voi kirjoittaa tällä tavalla:

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

Sivun alkuun

Kehitä taitojasi
Tutustu koulutusmateriaaliin
Saat uudet ominaisuudet ensimmäisten joukossa
Liity Office Insider -käyttäjiin

Oliko näistä tiedoista hyötyä?

Kiitos palautteesta!

Kiitos palautteestasi! Näyttää siltä, että Office-tukiedustajamme avusta voi olla sinulle hyötyä.

×