Mõnikord võite soovida kasutada päringu tulemeid mõne muu päringu väljana või päringuvälja kriteeriumina. Oletagem näiteks, et soovite näha kõigi oma toodete tellimuste vahelist intervalli. Seda intervalli kuvava päringu loomiseks peate võrdlema igat tellimusekuupäeva selle toote muude tellimusekuupäevadega. Nende tellimusekuupäevade võrdlemiseks on samuti vaja päringut. Saate pesastada selle päringu oma põhipäringusse alampäring abil.
Saate kirjutada alampäringu avaldis või SQL-vaade SQL-lausesse.
Selle artikli teemad
Päringutulemite kasutamine teise päringu väljana
Saate kasutada alampäringut välja pseudonüüm (SQL). Tehke seda siis, kui soovite kasutada alampäringu tulemeid oma põhipäringu väljana.
Märkus. : Välja pseudonüümina kasutatav alampäring ei saa tagastada mitut välja.
Alampäringu väljapseudonüümi abil saate kuvada väärtusi, mis sõltuvad praeguse rea muudest väärtustest. See pole alampäringut kasutamata võimalik.
Naaskem näite juurde, kus soovisite näha oma kõigi toodete tellimuste intervalli. Selle intervalli määratlemiseks peate võrdlema igat tellimusekuupäeva vastava toote muude tellimusekuupäevadega. Saate luua seda teavet kuvava päringu andmebaasimalli Põhjatuul abil.
Malli Põhjatuul seadistamine
-
Klõpsake menüü Fail nuppu Uus.
-
Klõpsake jaotises Saadaolevad mallid nuppu Näidismallid.
-
Klõpsake käsku Põhjatuul ja seejärel nuppu Loo.
-
Järgige andmebaasi avamiseks lehe Põhjatuule kaupmehed juhiseid (objektivahekaardil Tiitelkuva) ja seejärel sulgege sisselogimise dialoogiaken.
-
Klõpsake menüü Loo jaotises Päringud nuppu Päringukujundus.
-
Klõpsake dialoogiboksis Tabeli kuvamine vahekaarti Päringud ja seejärel topeltklõpsake nuppu Toote tellimused.
-
Sulgege dialoogiboks Tabeli kuvamine.
-
Topeltklõpsake välja Toote ID ja välja Tellimuse kuupäev, et lisada need päringu kujundusruudustikku.
-
Valige ruudustiku veeru Toote ID real Sordi väärtus Tõusev järjestus.
-
Valige ruudustiku veeru Tellimuse kuupäev real Sordi väärtus Laskuv järjestus.
-
Paremklõpsake ruudustiku kolmandas veerus rida Väli ja seejärel klõpsake kiirmenüü käsku Suum.
-
Tippige või kleepige dialoogiboksi Suum järgmine avaldis:
Eelmine kuupäev: (SELECT MAX([Tellimuse kuupäev])
FROM [Toote tellimused] AS [Vanad tellimused]
WHERE [Vanad tellimused].[Tellimuse kuupäev] < [Toote tellimused].[Tellimuse kuupäev]
AND [Vanad tellimused].[Toote ID] = [Toote tellimused].[Toote ID])
See avaldis on alampäring. Alampäring valib iga rea puhul hiliseima tellimusekuupäeva, mis on varasem kui juba reaga seotud tellimusekuupäev. Pange tähele võtmesõna AS kasutust tabeli pseudonüümi loomisel nii, et saate võrrelda alampäringu väärtusi põhipäringu praeguse rea väärtustega.
-
Tippige ruudustiku neljanda veeru reale Väli järgmine avaldis:
Intervall: [Tellimuse kuupäev]-[Eelmine kuupäev]
See avaldis arvutab iga tellimusekuupäeva ja vastava toote eelmise tellimusekuupäeva vahelise intervalli, kasutades selleks alampäringu abil määratletud eelmise kuupäeva väärtust.
-
Klõpsake menüü Kujundus jaotises Tööriistad nuppu Käivita.
-
Päring käivitab ja kuvab loendi tootenimede, tellimusekuupäevade, eelmiste tellimusekuupäevade ja tellimusekuupäevade vaheliste intervallidega. Tulemid sorditakse esmalt (tõusvas järjestuses) toote ID ja seejärel (laskuvas järjestuses) tellimuse kuupäeva järgi.
-
Märkus. : Kuna Toote ID on otsinguväli, kuvab Access vaikimisi otsinguväärtused (antud juhul tootenime), mitte tegelikud toote-ID-d. Kuigi see muudab kuvatavaid väärtusi, et muuda see sortimisjärjestust.
-
-
Sulgege andmebaas Põhjatuul.
Alampäringu kasutamine päringuvälja kriteeriumina
Saate kasutada alampäringut välja kriteeriumid. Tehke seda siis, kui soovite alampäringu tulemite abil piirata väljal kuvatavaid väärtusi.
Oletagem näiteks, et soovite läbi vaadata selliste tellimuste loendit, mida töötlesid töötajad, kes pole müügiesindajad. Selle loendi loomiseks peate võrdlema iga tellimuse töötaja ID-d nende töötajate töötaja-ID-de loendiga, kes pole müügiesindajad. Selle loendi saate luua ja seda väljakriteeriumina kasutada alampäringu abil, nagu on kirjeldatud järgmises toimingus.
-
Avage Põhjatuul 2007.accdb ja lubage selle sisu.
-
Sulgege sisselogimisvorm.
-
Klõpsake menüü Loo jaotises Muu nuppu Päringukujundus.
-
Topeltklõpsake dialoogiboksi Tabeli kuvamine vahekaardil Tabelid väärtusi Tellimused ja Töötajad.
-
Sulgege dialoogiboks Tabeli kuvamine.
-
Topeltklõpsake tabelis Tellimused välju Töötaja ID, Tellimuse ID ja Tellimuse kuupäev, et lisada need päringu kujundusruudustikku. Topeltklõpsake tabelis Töötajad välja Ametinimetus, et lisada see kujundusruudustikku.
-
Paremklõpsake veeru Töötaja ID rida Kriteeriumid ja seejärel klõpsake kiirmenüü käsku Suum.
-
Tippige või kleepige väljale Suum järgmine avaldis:
IN (SELECT [ID] FROM [Töötajad]
WHERE [Ametinimetus]<>'Müügiesindaja')
See on alampäring. See valib kõigi töötajate ID-d, kelle ametinimetus pole müügiesindaja, ja esitab saadud tulemikomplekti põhipäringule. Seejärel kontrollib põhipäring, kas tulemikomplektis on tabeli Tellimused töötaja-ID-sid.
-
Klõpsake menüü Kujundus jaotises Tööriistad nuppu Käivita.
Päring käivitatakse ja päringutulemina kuvatakse selliste tellimuste loend, mida töötlesid töötajad, kes pole müügiesindajad.
Alampäringus kasutatavad levinud SQL-i võtmesõnad
Alampäringus saate kasutada mitmesuguseid SQL-i võtmesõnu.
Märkus. : See loend pole lõplik. Alampäringus saate kasutada mis tahes kehtivaid SQL-i võtmesõnu, välja arvatud andmemääratluse võtmesõnu.
-
ALL – võtmesõna ALL saate kasutada WHERE-klauslis selliste ridade toomiseks, mis vastavad tingimusele alampäringuga tagastatud ridadega võrdlemisel.
Oletagem näiteks, et analüüsite ülekooli üliõpilaste andmeid. Üliõpilased peavad saama vähemalt minimaalse keskmise hinde, mis on põhiaineti erinev. Põhiaineid ja nende minimaalseid keskmisi hindeid talletatakse tabelis nimega Põhiained ning asjakohast teavet üliõpilaste kohta talletatakse tabelis nimega Üliõpilaste_kirjed.
Kui soovite näha põhiainete (ja nende minimaalsete keskmiste hinnete) loendit, mille puhul iga selle põhiaine üliõpilane ületab minimaalse keskmise hinde, võite kasutada järgmist päringut:
SELECT [Põhiaine], [Min_keskmine_hinne]
FROM [Põhiained]
WHERE [Min_keskmine_hinne] < ALL
(SELECT [Keskmine hinne] FROM [Üliõpilaste_kirjed]
WHERE [Üliõpilaste_kirjed].[Põhiaine]=[Põhiained].[Põhiaine]);
-
ANY – võtmesõna ANY saate kasutada WHERE-klauslis selliste ridade toomiseks, mis vastavad tingimusele vähemalt ühe alampäringu tagastatava reaga võrdlemisel.
Oletagem näiteks, et analüüsite ülekooli üliõpilaste andmeid. Üliõpilased peavad saama vähemalt minimaalse keskmise hinde, mis on põhiaineti erinev. Põhiaineid ja nende minimaalseid keskmisi hindeid talletatakse tabelis nimega Põhiained ning asjakohast teavet üliõpilaste kohta talletatakse tabelis nimega Üliõpilaste_kirjed.
Kui soovite näha põhiainete (ja nende minimaalsete keskmiste hinnete) loendit, mille puhul mõne selle põhiaine üliõpilase tulemus on allpool minimaalset keskmist hinnet, võite kasutada järgmist päringut:
SELECT [Põhiaine], [Min_keskmine_hinne]
FROM [Põhiained]
WHERE [Min_keskmine_hinne] > ANY
(SELECT [Keskmine hinne] FROM [Üliõpilaste_kirjed]
WHERE [Üliõpilaste_kirjed].[Põhiaine]=[Põhiained].[Põhiaine]);
Märkus. : Võtmesõna SOME saate kasutada samal otstarbel - see võtmesõna on võtmesõna ANY sünonüüm.
-
EXISTS – võtmesõna EXISTS saate kasutada WHERE-klauslis, näitamaks, et alampäring peab tagastama vähemalt ühe rea. Võite sisestada võtmesõna EXISTS ette ka sõna NOT, kui soovite näidata, et alampäring ei tohi tagastada ühtegi rida.
Näiteks järgmine päring tagastab loendi toodetest, mis leiduvad vähemalt ühes olemasolevas tellimuses:
SELECT *
FROM [Tooted]
WHERE EXISTS
(SELECT * FROM [Tellimuse üksikasjad]
WHERE [Tellimuse üksikasjad].[Toote ID]=[Tooted].[ID]);
Võtmesõna NOT EXISTS kasutamisel tagastab päring loendi toodetest, mida ei leidu üheski olemasolevas tellimuses:
SELECT *
FROM [Tooted]
WHERE NOT EXISTS
(SELECT * FROM [Tellimuse üksikasjad]
WHERE [Tellimuse üksikasjad].[Toote ID]=[Tooted].[ID]);
-
IN – võtmesõna IN saate kasutada WHERE-klauslis, tagamaks, et põhipäringu praeguse rea väärtus kuulub alampäringu tagastatavasse komplekti. Võite sisestada võtmesõna IN ette ka sõna NOT, kui soovite, et põhipäringu praeguse rea väärtus ei kuuluks alampäringu tagastatavasse komplekti.
Näiteks järgmine päring tagastab loendi tellimustest (koos tellimusekuupäevadega), mida töötlesid töötajad, kes pole müügiesindajad:
SELECT [Tellimuse ID], [Tellimuse kuupäev]
FROM [Tellimused]
WHERE [Töötaja ID] IN
(SELECT [ID] FROM [Töötajad]
WHERE [Ametinimetus]<>'Müügiesindaja');
Võtmesõna NOT IN abil saate kirjutada sama päringu järgmiselt:
SELECT [Tellimuse ID], [Tellimuse kuupäev]
FROM [Tellimused]
WHERE [Töötaja ID] NOT IN
(SELECT [ID] FROM [Töötajad]
WHERE [Ametinimetus]='Müügiesindaja');