Prisijunkite prie „Microsoft“
Prisijunkite arba sukurkite paskyrą.
Sveiki,
Pasirinkti kitą paskyrą.
Turite kelias paskyras
Pasirinkite paskyrą, kurią naudodami norite prisijungti.

Kartais užklausos rezultatus galite naudoti kaip lauką kitoje užklausoje arba kaip užklausos lauko kriterijų. Tarkime, norite pamatyti kiekvieno iš savo produktų užsakymų intervalą. Norėdami sukurti užklausą, kuri rodo šį intervalą, turite palyginti kiekvieną užsakymo datą su kitomis to produkto užsakymo datomis. Lyginant šias užsakymo datas taip pat reikalinga užklausa. Galite įdėti šią užklausą į pagrindinę užklausą naudodami antrinė užklausa.

Antrinę užklausą galite rašyti išraiška arba SQL rodinys sakiniu Struktūrinių užklausų kalba (SQL).

Šiame straipsnyje

Užklausos rezultatų naudojimas kaip kitos užklausos lauko

Antrinę užklausą galite naudoti kaip lauko pseudonimą. Naudokite antrinę užklausą kaip lauko pseudonimą, kai norite naudoti antrinės užklausos rezultatus kaip lauką pagrindinėje užklausoje.

Pastaba: Antrinė užklausa, kurią naudojate kaip lauko pseudonimą, negali grąžinti daugiau nei vieno lauko.

Antrinės užklausos lauko pseudonimą galite naudoti reikšmėms, priklausončioms nuo kitų reikšmių dabartinėje eilutėje, rodyti, o tai neįmanoma nenaudojant antrinės užklausos.

Pavyzdžiui, grįžkime prie pavyzdžio, kur norite pamatyti kiekvieno iš jūsų produktų užsakymų intervalą. Norėdami nustatyti šį intervalą, turite palyginti kiekvieną užsakymo datą su kitomis to produkto užsakymo datomis. Galite sukurti užklausą, kurioje rodoma ši informacija, naudodami "Northwind" duomenų bazės šabloną.

  1. Skirtuke Failas spustelėkite Naujas.

  2. Dalyje Galimi šablonai spustelėkite Šablonų pavyzdžiai.

  3. Spustelėkite Northwind, tada spustelėkite Kurti.

  4. Vykdydami puslapyje „Northwind“ prekiautojai (objekto skirtuke Paleisties ekranas) pateiktus nurodymus atidarykite duomenų bazę, o tada uždarykite prisijungimo dialogo langą.

  5. Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.

  6. Spustelėkite skirtuką Užklausos , tada dukart spustelėkite Produktų užsakymai.

  7. Dukart spustelėkite lauką Produkto ID ir lauką Užsakymo data , kad įtrauktumėte juos į užklausos dizaino tinklelį.

  8. Tinklelio stulpelio Produkto ID eilutėje Rūšiuoti pasirinkite Didėjimo tvarka.

  9. Tinklelio stulpelio Užsakymo data eilutėje Rūšiuoti pasirinkite Mažėjimo tvarka.

  10. Trečiame tinklelio stulpelyje dešiniuoju pelės mygtuku spustelėkite eilutę Laukas , tada kontekstiniame meniu spustelėkite Mastelis .

  11. Dialogo lange Mastelis įveskite arba įklijuokite šį reiškinį:

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

    Šis reiškinys yra antrinė užklausa. Kiekvienoje eilutėje antrinė užklausa pažymi naujausią užsakymo datą, kuri yra mažesnė už užsakymo datą, kuri jau yra susieta su eilute. Atkreipkite dėmesį, kaip naudojate raktažodį AS norėdami sukurti lentelės pseudonimą, kad galėtumėte palyginti antrinės užklausos reikšmes su dabartinės pagrindinės užklausos eilutės reikšmėmis.

  12. Ketvirtojo tinklelio stulpelio eilutėje Laukas įveskite šį reiškinį:

    Interval: [Order Date]-[Prior Date]

    Šis reiškinys apskaičiuoja intervalą tarp užsakymo datos ir to produkto ankstesnio užsakymo datos, naudodamas ankstesnės datos reikšmę, kurią nustatėme naudodami antrinę užklausą.

  13. Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.

    1. Užklausa vykdo ir rodo produktų pavadinimų, užsakymo datų, ankstesnių užsakymų datų ir intervalo tarp užsakymo datų sąrašą. Rezultatai pirmiausia rikiuojami pagal produkto ID (didėjimo tvarka), tada pagal užsakymo datą (mažėjimo tvarka).

    2. Pastaba: Produkto ID yra peržvalgos laukas, todėl pagal numatytuosius nustatymus "Access" rodo peržvalgos reikšmes (šiuo atveju produkto pavadinimą), o ne faktinius produkto ID. Nors tai keičia rodomas reikšmes, rikiavimo tvarka nepasikeičia.

  14. Uždarykite "Northwind" duomenų bazę.

Puslapio viršus

Antrinės užklausos kaip užklausos lauko kriterijaus naudojimas

Antrinę užklausą galite naudoti kaip lauko kriterijų. Naudokite antrinę užklausą kaip lauko kriterijų, kai norite naudoti antrinės užklausos rezultatus, kad apribotumėte lauko rodomas reikšmes.

Pavyzdžiui, norite peržiūrėti užsakymų, kuriuos apdorojo darbuotojai, kurie nėra pardavimo atstovai, sąrašą. Norėdami sugeneruoti šį sąrašą, turite palyginti kiekvieno užsakymo darbuotojo ID su darbuotojų, kurie nėra pardavimo atstovai, ID sąrašu. Norėdami sukurti šį sąrašą ir naudoti jį kaip lauko kriterijų, naudokite antrinę užklausą, kaip parodyta šioje procedūroje:

  1. Atidarykite Northwind.accdb ir įjunkite jo turinį.

  2. Uždarykite prisijungimo formą.

  3. Skirtuko Kūrimas grupėje Kita spustelėkite Užklausos dizainas.

  4. Skirtuke Lentelės dukart spustelėkite Užsakymai ir darbuotojai.

  5. Lentelėje Užsakymai dukart spustelėkite lauką Darbuotojo ID , lauką Užsakymo ID ir lauką Užsakymo data , kad įtrauktumėte juos į užklausos dizaino tinklelį. Lentelėje Darbuotojai dukart spustelėkite lauką Pareigos , kad įtrauktumėte jį į dizaino tinklelį.

  6. Dešiniuoju pelės mygtuku spustelėkite stulpelio Darbuotojo ID eilutę Kriterijai , tada kontekstiniame meniu spustelėkite Mastelis .

  7. Lauke Mastelis įveskite arba įklijuokite šį reiškinį:

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

    Tai antrinė užklausa. Ji pasirenka visus darbuotojo ID, kai darbuotojas neturi pardavėjo pareigų, ir pateikia rezultatą, nustatytą kaip pagrindinė užklausa. Tada pagrindinė užklausa patikrina, ar darbuotojų ID iš lentelės Užsakymai yra rezultatų rinkinyje.

  8. Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.

    Vykdoma užklausa, o užklausos rezultatuose rodomas užsakymų, kuriuos apdorojo darbuotojai, kurie nėra pardavimo atstovai, sąrašas.

Puslapio viršus

Įprasti SQL raktažodžiai, kuriuos galite naudoti su antrine užklausa

Yra keli SQL raktažodžiai, kuriuos galite naudoti su antrine užklausa:

Pastaba: Šis sąrašas nėra baigtinis. Antrinėje užklausoje galite naudoti bet kokį leistiną SQL raktažodį, išskyrus duomenų apibrėžimo raktažodžius.

  • VISUS    Naudokite ALL sąlygoje WHERE, kad gautumėte eilutes, kurios atitinka sąlygą, palyginti su kiekviena antrinės užklausos grąžinama eilute.

    Pavyzdžiui, tarkime, analizuojate studentų duomenis kolegijoje. Studentai turi išlaikyti minimalų GPA, kuris skiriasi nuo pagrindinių iki didelių. Specializacijos ir minimalūs GPU saugomi lentelėje, pavadintoje Specializacijos, o susijusi studentų informacija saugoma lentelėje, vadinamoje Student_Records.

    Norėdami pamatyti sąrašą didžiųjų (ir minimalių GPP), kurių kiekvienas šią didžiąją dalį turintis studentas viršija minimalų GPA, galite naudoti šią užklausą:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • Bet kokį    Naudokite ANY sąlygoje WHERE, kad gautumėte eilutes, kurios atitinka sąlygą, palyginti su bent viena iš antrinės užklausos pateiktų eilučių.

    Pavyzdžiui, tarkime, analizuojate studentų duomenis kolegijoje. Studentai turi išlaikyti minimalų GPA, kuris skiriasi nuo pagrindinių iki didelių. Specializacijos ir minimalūs GPU saugomi lentelėje, pavadintoje Specializacijos, o susijusi studentų informacija saugoma lentelėje, vadinamoje Student_Records.

    Norėdami pamatyti sąrašą didžiųjų studentų (ir jų minimalių GPP), kurių kiekvienas šią didžiąją dalį turintis studentas neatitinka minimalaus GPA, galite naudoti šią užklausą:

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

    Pastaba: Tam pačiam tikslui taip pat galite naudoti kai kuriuos raktinius žodžius; SOME raktažodis yra sinonimas su BET.

  • EXISTS     Sąlygoje WHERE naudokite EXISTS, kad nurodytumėte, jog antrinė užklausa turėtų grąžinti bent vieną eilutę. Taip pat galite naudoti išankstinį nustatymą YRA su NOT, norėdami nurodyti, kad antrinė užklausa neturėtų grąžinti jokių eilučių.

    Pavyzdžiui, ši užklausa pateikia produktų, rastų bent viena esama tvarka, sąrašą:

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

    Naudojant NOT EXISTS, užklausa pateikia produktų, kurie nerandami bent viena esama tvarka, sąrašą:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Naudokite IN sąlygoje WHERE, kad patikrintumėte, ar dabartinės pagrindinės užklausos eilutės reikšmė yra rinkinio, kurį pateikia antrinė užklausa, dalis. Taip pat galite pradėti darbą naudodami NOT, kad patikrintumėte, ar dabartinės pagrindinės užklausos eilutės reikšmė nėra rinkinio, kurį pateikia antrinė užklausa, dalis.

    Pavyzdžiui, ši užklausa pateikia užsakymų (su užsakymų datomis), kuriuos apdorojo darbuotojai, kurie nėra pardavimo atstovai, sąrašą:

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

    Naudojant NOT IN galima rašyti tą pačią užklausą tokiu būdu:

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

Puslapio viršus

Reikia daugiau pagalbos?

Norite daugiau parinkčių?

Sužinokite apie prenumeratos pranašumus, peržiūrėkite mokymo kursus, sužinokite, kaip apsaugoti savo įrenginį ir kt.

Bendruomenės padeda užduoti klausimus ir į juos atsakyti, pateikti atsiliepimų ir išgirsti iš ekspertų, turinčių daug žinių.

Ar ši informacija buvo naudinga?

Ar esate patenkinti kalbos kokybe?
Kas turėjo įtakos jūsų įspūdžiams?
Paspaudus mygtuką Pateikti, jūsų atsiliepimai bus naudojami tobulinant „Microsoft“ produktus ir paslaugas. Jūsų IT administratorius galės rinkti šiuos duomenis. Privatumo patvirtinimas.

Dėkojame už jūsų atsiliepimą!

×