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

Svarbu :  Šis straipsnis išverstas naudojant mašininį vertimą, žr. atsakomybės atsisakymą. Su šio straipsnio versija anglų kalba galite susipažinti čia .

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 antrinė užklausa.

Antrinę užklausą galite įrašyti į išraiška arba struktūrinių užklausų kalbos (SQL) sakinį SQL rodinys.

Šiame straipsnyje

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

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

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

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 Rodyti reikšmes, kurios priklauso nuo kitos neįmanoma nenaudojant antrinės užklausos dabartinės eilutės reikšmės. Pvz., mums grįžti į pavyzdys ten, kur norite matyti intervalą tarp kiekvieno jūsų produkto užsakymai. Norėdami nustatyti šį intervalą, jums reikia palyginti kiekvieno užsakymo data, kad kiti užsakymo datos to produkto. Galite sukurti užklausą, kuri rodoma ši informacija naudojant Northwind 2007 šabloną.

Kaip nustatyti, kad Northwind 2007

  1. Spustelėkite „Microsoft Office“ mygtuką Mygtuko paveikslėlis , tada spustelėkite Naujas.

  2. Kairiojoje srityje, dalyje Šablonų kategorijos, spustelėkite Vietos šablonai.

  3. Dalyje Vietos šablonaispustelėkite Northwind 2007ir tada spustelėkite kurti.

  4. Sekite nurodymus puslapyje „Northwind Traders“ (objekto skirtuke Paleisties ekranas), kad atidarytumėte duomenų bazę, tada uždarykite langą Įėjimo dialogas.

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

  2. Dialogo lange Lentelės rodymas spustelėkite skirtuką Užklausos, o tada dukart spustelėkite Produkto užsakymai.

  3. Uždarykite dialogo langą Lentelės rodymas.

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

  5. Tinklelio stulpelyje Produkto ID, eilutėje Rikiuoti pažymėkite Didėjimo tvarka.

  6. Tinklelio stulpelyje Užsakymo data, eilutėje Rikiuoti pažymėkite Mažėjimo tvarka.

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

  8. Dialogo lange Mastelio keitimas į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.

  9. Ketvirtajame tinklelio stulpelyje, eilutėje Laukas įveskite šį reiškinį:

Interval: [Order Date]-[Prior Date]

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ą.

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

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

    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.

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

Puslapio viršus

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 nesantys 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 2007.accdb ir įgalinti turinį.

  2. Uždarykite prisijungimo formą.

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

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

  5. Uždarykite dialogo langą Lentelės rodymas.

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

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

  8. Lauke Mastelio keitimas į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 Dizainas grupėje Rezultatai spustelėkite Vykdyti.

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

Puslapio viršus

Į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.

  • ALL    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]);
  • ANY    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.

  • EXISTS    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]);
  • IN    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');

Puslapio viršus

Pastaba : Mašininio vertimo atsakomybės atsisakymas: Šis straipsnis išverstas naudojant kompiuterinę sistemą be žmogaus įsikišimo. „Microsoft“ pateikia šiuos mašininius vertimus norėdama padėti anglų kalbos nesuprantantiems vartotojams perskaityti turinį apie „Microsoft“ produktus, paslaugas ir technologijas. Šis straipsnis išverstas mašininio vertimo būdu, todėl jame gali būti žodyno, sintaksės ar gramatikos klaidų.

Tobulinkite savo į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ų.

×