Užklausos įdėjimas į kitą užklausą arba reiškinį naudojant antrinę užklausą

Galbūt kartais užklausos rezultatus norėsite naudoti kaip kitos užklausos lauką arba užklausos lauko kriterijų. Pvz., tarkim, norite peržiūrėti intervalus tarp kiekvieno produkto užsakymų. Norėdami sukurti užklausą, kurioje būtų rodomas toks intervalas, kiekvieno užsakymo datą turite palyginti su kitų to produkto užsakymų datomis. Norint palyginti šias datas taip pat reikia naudoti užklausą. Šią užklausą galite įdėti į pagrindinę užklausą naudodami <token>TE000126768</token>.

Antrinę užklausą galite įrašyti į <token>TE000127167</token> arba struktūrinių užklausų kalbos (SQL) sakinį <token>TE000126761</token>.

Šiame straipsnyje

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Užklausos rezultatų naudojimas kaip kitos užklausos lauko</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Antrinės užklausos naudojimas kaip užklausos lauko kriterijaus</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Įprasti SQL raktažodžiai, kuriuos galima naudoti antrinėje užklausoje</link>

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

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

Pastaba: Antrinėje užklausoje, kurią naudojate kaip lauko pseudonimą, negali būti pateikta daugiau nei vienas laukas.

Antrinės užklausos lauko pseudonimą galite naudoti norėdami, kad būtų rodomos reikšmės, kurias lemia kitos dabartinės eilutės reikšmės – nenaudojant antrinės užklausos to padaryti neįmanoma.

Pvz., grįžkime prie pavyzdžio, kai turi būti rodomas intervalas tarp kiekvieno produkto užsakymų. Norint nustatyti šį intervalai, kiekvieno užsakymo datą reikia palyginti su kitomis to produkto užsakymų datomis. Norėdami sukurti šią informaciją rodančią užklausą, galite naudoti „Northwind“ duomenų bazės šabloną.

  1. Skirtuke <ui>Failas</ui> spustelėkite <ui>Naujas</ui>.

  2. Dalyje <ui>Galimi šablonai</ui> spustelėkite <ui>Šablonų pavyzdžiai</ui>.

  3. Spustelėkite <ui>Northwind</ui>, o tada – <ui>Kurti</ui>.

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

  5. Skirtuko <ui>Kurti</ui> grupėje <ui>Užklausos</ui> spustelėkite <ui>Užklausos dizainas</ui>.

  6. Dialogo lange <ui>Lentelės rodymas</ui> spustelėkite skirtuką <ui>Užklausos</ui>, o tada dukart spustelėkite <ui>Produkto užsakymai</ui>.

  7. Uždarykite dialogo langą <ui>Lentelės rodymas</ui>.

  8. Kad į užklausos dizaino tinklelį būtų įtraukti laukai <ui>Produkto ID</ui> ir <ui>Užsakymo data</ui>, dukart juos spustelėkite.

  9. Tinklelio stulpelyje <ui>Produkto ID</ui>, eilutėje <ui>Rikiuoti</ui> pažymėkite <ui>Didėjimo tvarka</ui>.

  10. Tinklelio stulpelyje <ui>Užsakymo data</ui>, eilutėje <ui>Rikiuoti</ui> pažymėkite <ui>Mažėjimo tvarka</ui>.

  11. Trečiajame tinklelio stulpelyje dešiniuoju pelės mygtukus spustelėkite eilutę <ui>Laukas</ui>, tada kontekstiniame meniu spustelėkite <ui>Mastelio keitimas</ui>.

  12. Dialogo lange <ui>Mastelio keitimas</ui> į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 parenka vėliausią, bet ankstesnę už jau su eilute susietą, užsakymo datą. Atkreipkite dėmesį, kaip kuriant lentelės pseudonimą turi būti naudojamas raktažodis AS, kad antrinės užklausos reikšmės būtų lyginamos su pagrindinės užklausos dabartinės eilutės reikšmėmis.

  13. Ketvirtajame tinklelio stulpelyje, eilutėje <ui>Laukas</ui> įveskite šį reiškinį:

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

    Naudodamas antrinėje užklausoje apibrėžtą ankstesnės datos reikšmę, šis reiškinys apskaičiuoja intervalą tarp visų to produkto užsakymų datų ir ankstesnio užsakymo datą.<br />

  14. Skirtuko <ui>Dizainas</ui> grupėje <ui>Rezultatai</ui> spustelėkite <ui>Vykdyti</ui>.

    1. Vykdoma užklausa ir pateikiamas produktų pavadinimų, užsakymų datų, ankstesnių užsakymų datų ir intervalų tarp užsakymų datų sąrašas. Rezultatai pirmiausia rikiuojami pagal produkto ID (didėjimo tvarka), o 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. Taip pakeičiamos rodomos reikšmės, tačiau rikiavimo tvarka nepakinta.

  15. Uždarykite „Northwind“ duomenų bazę.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Puslapio viršus</link>

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

Antrinę užklausą galite naudoti kaip lauko kriterijų. Naudokite antrinę užklausą kaip lauko kriterijų, jei norite, kad pagal antrinės užklausos rezultatus būtų ribojamos lauke rodomos reikšmės.

Pvz., tarkim, norite peržiūrėti užsakymų, kuriuos apdorojo pardavimo atstovais <legacyItalic>nesantys</legacyItalic> darbuotojai, sąrašą. Norint sugeneruoti šį sąrašą, kiekviename užsakyme nurodytą darbuotojo ID reikia palyginti su pardavimo atstovais nesančių darbuotojų sąraše nurodytais darbuotojų ID. Norėdami sukurti šį sąrašą ir naudoti jį kaip lauko kriterijų, turite naudoti antrinę užklausą, kaip nurodyta toliau pateiktoje procedūroje:

  1. Atidarykite „Northwind“ duomenų bazę ir įjunkite jos turinį.

  2. Uždarykite prisijungimo formą.

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

  4. Dialogo lango <ui>Lentelės rodymas</ui> skirtuke <ui>Lentelės</ui> dukart spustelėkite <ui>Užsakymai</ui> ir <ui>Darbuotojai</ui>.

  5. Uždarykite dialogo langą <ui>Lentelės rodymas</ui>.

  6. Lentelėje Užsakymai dukart spustelėkite laukus <ui>Darbuotojo ID</ui>, <ui>Užsakymo ID</ui> ir <ui>Užsakymo data</ui>, kad jie būtų įtraukti į užklausos dizaino tinklelį. Lentelėje Darbuotojai dukart spustelėkite lauką <ui>Pareigos</ui>, kad jis būtų įtrauktas į dizaino tinklelį.

  7. Stulpelyje Darbuotojo ID dešiniuoju palės mygtuku spustelėkite eilutę <ui>Kriterijai</ui>, o tada kontekstiniame meniu spustelėkite <ui>Mastelio keitimas</ui>.

  8. Lauke <ui>Mastelio keitimas</ui> įveskite arba įklijuokite šį reiškinį:

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

    Tai yra antrinė užklausa. Ji išrenka visų darbuotojų, kurių pareigos nėra Pardavimo atstovas, ID ir pateikia šį rezultatų rinkinį pagrindinėje užklausoje. Pagrindinė užklausa patikrina, ar rezultatų rinkinyje pateikti lentelėje Užsakymai esantys darbuotojų ID.

  9. Skirtuko <ui>Dizainas</ui> grupėje <ui>Rezultatai</ui> spustelėkite <ui>Vykdyti</ui>.

    Užklausa įvykdoma ir kaip jos rezultatai pateikiamas užsakymų, kuriuos apdorojo pardavimo atstovais nesantys darbuotojai, sąrašas.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Puslapio viršus</link>

Įprasti SQL raktažodžiai, kuriuos galima naudoti antrinėje užklausoje

Yra keletas SQL raktažodžių, kuriuos galite naudoti antrinėje užklausoje.

Pastaba: Šis sąrašas nėra baigtinis. Antrinėje užklausoje galite naudoti bet kurį tinkamą SQL raktažodį, išskyrus duomenis apibrėžiančius raktažodžius.

  • <embeddedLabel>ALL</embeddedLabel> Naudokite ALL sąlygoje WHERE, kad būtų nuskaitytos sąlygą tenkinančios eilutės, palyginus su kiekviena antrinėje užklausa pateikta eilute.

    Pvz., tarkim, analizuojate studentų duomenis koledže. Studentai turi išlaikyti minimalų GPA, bet aukščiausieji įvertinimai yra skirtingi. Aukščiausieji įvertinimai ir jų minimalūs GPA saugomi lentelėje, kurios pavadinimas Aukščiausieji įvertinimai, o susijusi studentų informacija saugoma lentelėje, kurios pavadinimas Studentų įrašai.

    Norėdami peržiūrėti aukščiausiųjų įvertinimų (ir su jais susijusių minimalių GPA), kuriuos turintys studentai viršija minimalų GPA, sąrašą, 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]);
  • <embeddedLabel>ANY</embeddedLabel> Naudokite ANY sąlygoje WHERE, kad būtų nuskaitytos sąlygą tenkinančios eilutės, palyginus su bent viena antrinėje užklausoje pateikta eilute.

    Pvz., tarkim, analizuojate studentų duomenis koledže. Studentai turi išlaikyti minimalų GPA, bet aukščiausieji įvertinimai yra skirtingi. Aukščiausieji įvertinimai ir jų minimalūs GPA saugomi lentelėje, kurios pavadinimas Aukščiausieji įvertinimai, o susijusi studentų informacija saugoma lentelėje, kurios pavadinimas Studentų įrašai.

    Norėdami peržiūrėti aukščiausiųjų įvertinimų (ir su jais susijusių minimalių GPA), kuriuos turintis studentas neatitinka minimalaus GPA, sąrašą, 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: Kartais galite naudoti raktažodį SOME; raktažodis SOME yra ANY sinonimas.

  • <embeddedLabel>EXISTS</embeddedLabel> Naudokite EXISTS sąlygoje WHERE, norėdami nurodyti, kad antrinė užklausa turi pateikti bent vieną eilutę. Be to, prieš EXISTS pridėję NOT nurodysite, kad antrinė užklausa neturi pateikti nė vienos eilutės.

    Pvz., ši užklausa pateikia produktų, rastų bent viename esamame užsakyme, sąrašą:

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

    Naudojant NOT EXISTS užklausa grąžins produktų, kurių nepavyko rasti bent viename esamame užsakyme, sąrašą:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • <embeddedLabel>IN</embeddedLabel> Naudokite IN sąlygoje WHERE, kad būtų patvirtinta, jog dabartinėje pagrindinės užklausos eilutėje pateikta reikšmė yra įtraukta į antrinės užklausos pateiktą rinkinį. Be to, prieš IN pridėjus NOT bus patvirtinta, jog dabartinėje pagrindinės užklausos eilutėje pateikta reikšmė nėra įtraukta į antrinės užklausos pateiktą rinkinį.

    Pvz., ši užklausa grąžins užsakymų (ir užsakymų datų), kuriuos apdorojo pardavimo atstovais nesantys darbuotojai, sąrašą:

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

    Naudodami NOT IN tą pačią užklausą galite rašyti taip:

    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">Puslapio viršus</link>

Tobulinkite savo „Office“ įgūdžius
Ieškoti mokymo
Pirmiausia gaukite naujų funkcijų
Prisijunkite prie „Office Insider“ dalyvių

Ar ši informacija buvo naudinga?

Dėkojame už jūsų atsiliepimus!

Dėkojame už jūsų atsiliepimą! Panašu, kad gali būti naudinga jus sujungti su vienu iš mūsų „Office“ palaikymo agentų.

×