Kartais užklausų kūrimo ir naudojimo programoje „Access“ procesas yra tiesiog paprastas lentelės laukų pasirinkimas, galbūt, tam tikrų kriterijų pritaikymas, tada – rezultatų peržiūra. Tačiau ką daryti, jei reikiami duomenys yra išmėtyti daugiau nei vienoje lentelėje (o taip dažniau pasitaiko)? Laimei, galite sukurti užklausą, kuri sujungia informaciją iš kelių šaltinių. Šioje temoje nagrinėjami keli duomenų gavimo iš daugiau nei vienos lentelės scenarijai ir parodoma, kaip tai padaryti.
Ką norite daryti?
Duomenų iš susijusios lentelės naudojimas norint papildyti užklausos informaciją
Gali būti atvejų, kai užklausa, kuri yra pagrįsta viena lentele, suteikia jums reikiamą informaciją, tačiau gavus duomenis iš kitos lentelės, užklausos rezultatai būtų dar aiškesni ir naudingesni. Pavyzdžiui, turite darbuotojų ID sąrašą, kuris rodomas užklausos rezultatuose. Jūs suprantate, rezultatuose būtų naudingiau matyti darbuotojo vardą, bet darbuotojų vardai yra kitose lentelėse. Kad darbuotojų vardai būtų rodomi užklausos rezultatuose, turite į užklausą įtraukti abi lenteles.
Užklausų vediklio naudojimas norint sukurti užklausą iš pirminės lentelės ir susijusios lentelės
-
Įsitikinkite, kad lentelių ryšys yra apibrėžtas dalyje ryšių langas.
Kaip?
-
Skirtuko Duomenų bazės įrankiai grupėje Rodyti / slėpti spustelėkite Ryšiai.
-
Skirtuko Dizainas grupėje Ryšiai spustelėkite Visi ryšiai.
-
Identifikuokite lenteles, kurių ryšys turėtų būti apibrėžtas.
-
Jei lentelės matomos lange Ryšiai, patikrinkite, ar ryšys jau apibrėžtas.
Ryšys rodomas kaip linija, jungianti abi lenteles bendrame lauke. Galite dukart spustelėti ryšio liniją, kad pamatytumėte, kurie lentelių laukai yra sujungti ryšiu.
-
Jei lentelių nematote lange Ryšiai, turite jas įtraukti.
Skirtuko lapo Dizainas grupėje Rodyti / slėpti spustelėkite Lentelių pavadinimai.
Dukart spustelėkite kiekvieną lentelę, kurią norite rodyti, tada spustelėkite Uždaryti.
-
-
Jei nepavyksta rasti ryšio tarp dviejų lentelių, sukurkite naują nuvilkdami vienos lentelės lauką į lauką kitoje lentelėje. Laukų, kuriuose sukūrėte ryšius tarp lentelių, duomenų tipai turi būti tokie patys.
Pastaba: Galite sukurti ryšį tarp lauko, kurio duomenų tipas „AutoNumber“ ir lauko su skaičiaus duomenų tipas, jei tame lauke ilgesnis sveikojo skaičiaus lauko dydis. Tai dažnas atvejis, kai kuriate ryšys „vienas – daug“.
Bus atidarytas dialogo langas Ryšių redagavimas.
-
Spustelėkite Kurti, kad sukurtumėte ryšį.
Daugiau informacijos apie parinktis, kurias turite kurdami ryšį, ieškokite straipsnyje Ryšio kūrimas, redagavimas ar naikinimas.
-
Uždarykite ryšių langą.
-
-
Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos vediklis.
-
Dialogo lange Nauja užklausa spustelėkite Paprastų užklausų vediklis, tada spustelėkite Gerai.
-
Pasirinktinio įvedimo lauke Lentelės / užklausos spustelėkite lentelę, kurioje yra pagrindinė informacija, kurią norite įtraukti į užklausą.
-
Sąraše Galimi laukai spustelėkite pirmą lauką, kurį norite įtraukti į užklausą, tada spustelėkite vienos rodyklės dešinėn mygtuką, kad perkeltumėte tą lauką į sąrašą Pasirinkti laukai. Tą patį padarykite su kiekvienu papildomu tos lentelės lauku, kurį norite įtraukti į užklausą. Tai gali būti laukai, kuriuos norite pateikti užklausos išvestyje arba laukai, kuriuos norite naudoti siekdami apriboti eilutes išvestyje, taikydami nurodytus kriterijus.
-
Pasirinktinio įvedimo lauke Lentelės / užklausos spustelėkite lentelę, kurioje yra susiję duomenys, kuriuos norite naudoti užklausos rezultatams papildyti.
-
Laukus, kuriuos norite naudoti užklausos rezultatams papildyti, įtraukite į sąrašą Pasirinkti laukai, tada spustelėkite Pirmyn.
-
Dalyje Pasirinkite išsamios informacijos arba suvestinės užklausą: spustelėkite Išsami informacija arba Suvestinė.
Jei nenorite, kad užklausa vykdytų agregavimo funkcijas (Sum, Avg, Min, Max, Count, StDev arba Var), pasirinkite išsamios informacijos užklausą. Jei norite, kad užklausa vykdytų agregavimo funkciją, pasirinkite suvestinės užklausą. Pasirinkę spustelėkite Pirmyn.
-
Norėdami peržiūrėti rezultatus, spustelėkite Baigti.
Pavyzdys, kuriame naudojamas „Northwind“ duomenų bazės pavyzdys
Šiame pavyzdyje užklausų vediklis naudojamas norint sukurti užklausą, kuri pateikia užsakymų sąrašą, kiekvieno užsakymo pristatymo mokestį ir darbuotojo, tvarkiusio kiekvieną užsakymą, vardas.
Pastaba: Šiame pavyzdyje reikėjo modifikuoti „Northwind“ duomenų bazės pavyzdį. Galbūt norėsite padaryti „Northwind“ duomenų bazės pavyzdžio atsarginę kopiją ir vadovautis šiuo pavydžiu naudodami šią atsarginę kopiją.
Užklausų vediklio naudojimas norint sukurti užklausą
-
Atidarykite „Northwind“ duomenų bazės pavyzdį. Uždarykite prisijungimo formą.
-
Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos vediklis.
-
Dialogo lange Nauja užklausa spustelėkite Paprastų užklausų vediklis, tada spustelėkite Gerai.
-
Pasirinktinio įvedimo lauke Lentelės / užklausos spustelėkite Lentelė: Užsakymai.
-
Sąraše Galimi laukai dukart spustelėkite Užsakymo ID, kad perkeltumėte tą lauką į sąrašą Pasirinkti laukai. Dukart spustelėkite Siuntimo mokestis, kad perkeltumėte tą lauką į sąrašą Pasirinkti laukai.
-
Pasirinktinio įvedimo lauke Lentelės / užklausos spustelėkite Lentelė: Darbuotojai.
-
Sąraše Galimi laukai dukart spustelėkite Vardas, kad perkeltumėte tą lauką į sąrašą Pasirinkti laukai. Dukart spustelėkite Pavardė, kad perkeltumėte tą lauką į sąrašą Pasirinkti laukai. Spustelėkite Pirmyn.
-
Kadangi kuriate visų užsakymų sąrašą, norite naudoti išsamios informacijos užklausą. Jei sumuojate siuntimo mokesčius pagal kiekvieną darbuotoją arba vykdote kurią nors kitą agregavimo funkciją, naudojate suvestinės užklausą. Spustelėkite Išsami informacija (rodomi visi kiekvieno įrašo laukai), tada spustelėkite Pirmyn.
-
Norėdami peržiūrėti rezultatus, spustelėkite Baigti.
Užklausa pateikia užsakymų sąrašą, kuriame nurodytas kiekvieno užsakymo siuntimo mokestis ir užsakymą tvarkiusio darbuotojo vardas ir pavardė.
Dviejų lentelių duomenų sujungimas naudojant jų ryšį su trečia lentele
Dažnai dviejų lentelių duomenys būna tarpusavyje susiję per trečią lentelę. Taip paprastai būna, nes pirmųjų dviejų lentelių duomenis sieja ryšys „daug – daug“. Dažnai pasitaiko, kad kuriant gerą duomenų bazės dizainą, dviejų lentelių ryšys „daug – daug“ suskaidomas į du ryšius „vienas – daug“, kuriuose dalyvauja trys lentelės. Tai galite padaryti taip: sukurkite trečią lentelę, vadinamą sujungimo lentele, arba ryšių lentelę, kurioje yra pirminis raktas ir išorinis raktas, skirtas kiekvienai iš kitų lentelių. Tada tarp kiekvieno išorinio rakto sujungimo lentelėje ir vienos iš kitų lentelių atitinkamo pirminio rakto sukuriamas ryšys „vienas – daug“. Tokiais atvejais į užklausą reikia įtraukti visas tris lenteles, net jei norite gauti duomenis iš tik dviejų lentelių.
Išrinkimo užklausos sukūrimas naudojant lenteles su ryšiu „daug – daug“
-
Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.
-
Dukart spustelėkite dvi lenteles, kuriose yra duomenys, kuriuos norite įtraukti į užklausą, taip pat jas susiejančią sujungimo lentelę, tada spustelėkite Uždaryti.
Visos trys lentelės rodomos užklausos dizaino darbo srityje, sujungtos atitinkamuose laukuose.
-
Dukart spustelėkite kiekvieną lauką, kurį norite naudoti užklausos rezultatuose. Kiekvienas laukas rodomas užklausos dizaino tinklelis.
-
Naudodami užklausos dizaino tinklelio eilutę Kriterijai įveskite lauko kriterijus. Jei norite naudoti lauko kriterijų nerodydami lauko užklausos rezultatuose, išvalykite to lauko eilutės Rodyti žymės langelį.
-
Jei norite rūšiuoti rezultatus pagal lauko reikšmes, užklausos dizaino tinklelyje spustelėkite Didėjimo tvarka arba Mažėjimo tvarka (atsižvelgdami į tai, kokiu būdu norite rūšiuoti įrašus) to lauko eilutėje Rūšiuoti.
-
Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
„Access“ parodo užklausos išvestį dalyje duomenų lapo rodinys.
Pavyzdys, kuriame naudojamas „Northwind“ duomenų bazės pavyzdys
Pastaba: Šiame pavyzdyje reikėjo modifikuoti „Northwind“ duomenų bazės pavyzdį. Galbūt norėsite padaryti „Northwind“ duomenų bazės pavyzdžio atsarginę kopiją ir vadovautis šiuo pavydžiu naudodami atsarginę kopiją.
Tarkime, turite naują galimybę: tiekėjas Rio de Žaneire rado jūsų svetainę ir galbūt norės užmegzti su jumis verslo santykius. Tačiau jie dirba tik Rio de Žaneire ir šalia San Paulo. Jis tiekia visų kategorijų maisto produktus, kuriuos tiekiate jūs kaip tarpininkas. Jis yra gan stambaus verslo atstovas ir nori gauti jūsų garantijas, kad prireikus suteiksite jam tokią galimybę naudingai parduoti ne mažiau kaip už 20 000,00 Brazilijos realų (apie 9 300,00 JAV dolerių) per metus. Ar galite jiems suteikti rinką, kurios jiems reikia?
Duomenys, kurių jums reikia norint atsakyti į šį klausimą yra dvejose vietose: lentelėje Klientai ir lentelėje Užsakymo informacija. Šias lenteles susieja lentelė Užsakymai. Ryšiai tarp šių lentelių jau yra apibrėžti. Lentelėje Užsakymai kiekvienas užsakymas gali turėti tik vieną klientą, susijusį su lentelės Klientai lauku KlientoID. Kiekvienas įrašas lentelėje Užsakymo duomenys yra susijęs tik su vienu užsakymu lentelėje Užsakymai, lauke UžsakymoID. Todėl tam tikras klientas gali turėti daug užsakymų, kiekvienas kurių turi daug užsakymų informacijos.
Šiame pavyzdyje sukursite kryžminę užklausą, kuri parodys bendrą pardavimo sumą per metus miestuose Rio de Žaneiras ir San Paulas.
Užklausos kūrimas dizaino rodinyje
-
Atidarykite „Northwind“ duomenų bazę. Uždarykite prisijungimo formą.
-
Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.
-
Dukart spustelėkite Klientai, Užsakymai, tada– Išsami užsakymo informacija.
Visos trys lentelės rodomos užklausos dizaino darbo srityje.
-
Lentelėje Klientai dukart spustelėkite lauką Miestas, kad šį lauką įtrauktumėte į užklausos dizaino tinklelį.
-
Užklausos dizaino tinklelio stulpelio Miestas eilutėje Kriterijai įveskite In ("Rio de Žaneiras", "San Paulas"). Todėl į užklausą įtraukiami tik tie įrašai, kuriuose nurodyti klientai, veikiantys viename iš šių dviejų miestų.
-
Lentelėje Užsakymo informacija dukart spustelėkite laukus Siuntimo_data ir Vieneto_kaina.
Laukai įtraukiami į užklausos dizaino tinklelį.
-
Užklausos dizaino tinklelio stulpelyje Siuntimo_data pasirinkite eilutę Laukas. [Siuntimo_data] pakeiskite Metai: Formatas([Siuntimo_data],"yyyy"). Taip sukuriamas lauko pseudonimas Metai, suteikiantis galimybę naudoti tik lauke Siuntimo_data nurodytos reikšmės metų dalį.
-
Užklausos dizaino tinklelio stulpelyje Vieneto_kaina pasirinkite eilutę Laukas . [Vieneto_kaina] pakeiskite į Pardavimas: [Užsakymo informacija].[ Vieneto_kaina]*[Kiekis]-[Užsakymo informacija]. [Vieneto_kaina]*[Kiekis]*[Nuolaida]. Taip sukuriamas lauko pseudonimas Pardavimas, kuris apskaičiuoja kiekvieno įrašo pardavimą.
-
Skirtuko Dizainas grupėje Užklausos tipas spustelėkite Kryžminė.
Dvi naujos eilutės Iš viso ir Kryžminė rodomos užklausos dizaino tinklelyje.
-
Užklausos dizaino tinklelio stulpelyje Miestas spustelėkite eilutę Kryžminė, tada spustelėkite Eilutės antraštė.
Tai atlikus, miestų reikšmės rodomos kaip eilučių antraštės (t. y. užklausa pateikia po vieną eilutę kiekvienam miestui).
-
Stulpelyje Metai spustelėkite eilutę Kryžminė, tada spustelėkite Stulpelio antraštė.
Tai atlikus, metų reikšmės rodomos kaip stulpelių antraštės (t. y. užklausa pateikia po vieną stulpelį kiekvieniems metams).
-
Stulpelyje Pardavimai spustelėkite eilutę Kryžminė, tada spustelėkite Vertė.
Tai atlikus, pardavimo vertės rodomos eilutės ir stulpelio susikirtime (t. y. užklausa pateikia vieną pardavimo vertę kiekvienam miesto ir metų deriniui).
-
Stulpelyje Pardavimai spustelėkite eilutę Sumos, tada spustelėkite Suma.
Tai atlikus, užklausa susumuoja šiame stulpelyje nurodytas vertes.
Galite palikti kitų dviejų stulpelių eilutės Sumos numatytąją reikšmę Grupuoti pagal, nes norite matyti kiekvieną šių stulpelių vertę, o ne agreguotas vertes.
-
Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Dabar turite užklausą, pateikiančią pardavimo sumas pagal metus Rio de Žaneire ir San Paule.
Dviejų panašių lentelių visų įrašų peržiūra
Kartais norėsite sujungti dviejų identiškų savo struktūra lentelių duomenis, kai viena iš lentelių yra kitoje duomenų bazėje. Apsvarstykite toliau nurodytą scenarijų.
Tarkime, esate analitikas, dirbantis su studentų duomenimis. Imatės duomenų bendrinimo tarp jūsų mokymo įstaigos ir kitos mokymo įstaigos iniciatyvos, kad abi mokymo įstaigos galėtų patobulinti savo programas. Kai kurių norimų nagrinėti klausimų atveju būtų geriau peržiūrėti visus abiejų mokymo įstaigų įrašus kartu, o ne kiekvienos mokymo įstaigos įrašus atskirai.
Galite importuoti kitos mokymo įstaigos duomenis į naujas lenteles savo duomenų bazėje, tačiau bet kokie kitos mokymo įstaigos duomenų pakeitimai neatsispindės jūsų duomenų bazėje. Geresnis sprendimas būtų susieti su kitos mokymo įstaigos lentelėmis, po to sukurti užklausas, kurios sujungia duomenis, kai juos paleidžiate. Galėsite analizuoti duomenis kaip vieną rinkinį, o ne atlikti dvi analizes ir bandyti jas aiškinti taip, lyg jos būtų viena analizė.
Norėdami peržiūrėti visus dviejų identiškos struktūros lentelių įrašus, naudojate „union“ užklausa.
„Union“ užklausos nerodomos dizaino rodinyje. Jūs sukuriate jas naudodami SQL komandas, kurias įvedate objekto skirtuke, esančiame SQL rodinys.
„Union“ užklausos kūrimas naudojant dvi lenteles
-
Skirtuko Kūrimas grupėje Užklausos spustelėkite Užklausos dizainas.
-
Skirtuko Dizainas grupėje Užklausos tipas spustelėkite „Union“.
Užklausa persijungia iš dizaino rodinio į SQL rodinį. Šiuo metu SQL rodinyje objekto skirtukas yra tuščias.
-
SQL rodinyje įveskite SELECT, po to pirmosios lentelės, kurią norite įtraukti į užklausą, laukų sąrašą. Laukų pavadinimai turi būti rašomi laužtiniuose skliaustuose ir atskiriami kableliais. Kai baigsite rašyti laukų pavadinimus, paspauskite klavišą ENTER. Žymiklis perkeliamas žemyn per vieną eilutę SQL rodinyje.
-
Įveskite FROM, po to pirmosios lentelės, kurią norite įtraukti į užklausą, pavadinimą. Paspauskite klavišą ENTER.
-
Jei norite nurodyti pirmos lentelės lauko kriterijų, įveskite WHERE, po to lauko pavadinimą, lyginimo operatorių (paprastai tai būna lygybės ženklas (=)) ir kriterijų. Sąlygos WHERE pabaigoje galite įtraukti papildomų kriterijų: naudokite raktažodį AND ir tą pačią sintaksę, kurią naudojote nurodydami pirmąjį kriterijų; pvz., WHERE [Klasės_lygis]="100" AND [Kreditų_valandos]>2. Kai nurodysite kriterijus, paspauskite klavišą ENTER.
-
Įveskite UNION ir paspauskite klavišą ENTER.
-
Įveskite SELECT, po to antrosios lentelės, kurią norite įtraukti į užklausą, laukų sąrašą. Turėtumėte ta pačia tvarka įtraukti tokius pačius kaip ir pirmosios lentelės laukus. Laukų pavadinimai turi būti rašomi laužtiniuose skliaustuose ir atskiriami kableliais. Kai baigsite rašyti laukų pavadinimus, paspauskite klavišą ENTER.
-
Įveskite FROM, po to antrosios lentelės, kurią norite įtraukti į užklausą, pavadinimą. Paspauskite klavišą ENTER.
-
Jei norite, įtraukite sąlygą WHERE, kaip aprašyta šios procedūros 6 veiksme.
-
Įveskite kabliataškį (;), nurodantį užklausos pabaigą.
-
Skirtuko Dizainas grupėje Rezultatai spustelėkite Vykdyti.
Rezultatai rodomi duomenų lapo rodinyje.