Skelbimas

„Microsoft Access“ yra neabejotinai galingiausias įrankis visame „Microsoft Office“ rinkinyje, tačiau jis mistifikuoja (ir kartais gąsdina) „Office“ energijos vartotojus. Turint omenyje staigesnę nei „Word“ ar „Excel“ mokymosi kreivę, kaip kas turėtų sukti galvą apie šio įrankio naudojimą? Šią savaitę, Bruce'as Eperis apžvelgsime kai kurias iš šio skaitytojo iškeltas problemas.

Skaitytojas klausia:

Man sunku rašyti užklausą „Microsoft Access“.

Turiu duomenų bazę su dviem produktų lentelėmis, kuriose yra bendras stulpelis su skaitmeniniu produkto kodu ir susijusio produkto pavadinimu.

Noriu sužinoti, kuriuos produktus iš A lentelės galima rasti B lentelėje. Noriu pridėti stulpelį pavadinimu Rezultatai, kuriame yra produkto pavadinimas iš A lentelės, jei jis egzistuoja, ir produkto pavadinimas iš B lentelės, kai jo nėra A lentelėje.

Ar turite patarimu?

Bruce'o atsakymas:

„Microsoft Access“ yra duomenų bazių valdymo sistema (DBVS), skirta naudoti tiek „Windows“, tiek „Mac“ kompiuteriuose. Duomenims apdoroti ir saugoti naudojamas „Microsoft Jet“ duomenų bazės variklis. Taip pat vartotojams pateikiama grafinė sąsaja, kuri beveik pašalina poreikį suprasti struktūrizuotą užklausos kalbą (SQL).

instagram viewer

SQL yra komandų kalba, naudojama norint pridėti, ištrinti, atnaujinti ir grąžinti saugomą informaciją duomenų bazę, taip pat modifikuoti pagrindinius duomenų bazės komponentus, pvz., pridėti, ištrinti ar modifikuoti lenteles ar indeksai.

Atspirties taškas

Jei dar neturite žinių apie „Access“ ar kitą RDBMS, prieš tęsdami siūlyčiau pradėti nuo šių šaltinių:

  • Taigi, kas yra duomenų bazė? Taigi, kas vis dėlto yra duomenų bazė? [„MakeUseOf“ paaiškina]Programuotojui ar technologijos entuziastams duomenų bazės koncepcija yra kažkas, ką tikrai galima laikyti savaime suprantamu dalyku. Tačiau daugeliui žmonių pati duomenų bazės sąvoka yra šiek tiek svetima ... Skaityti daugiau kur Ryanas Dube'as naudoja „Excel“, kad parodytų reliacinių duomenų bazių pagrindus.
  • Trumpas vadovas, kaip pradėti naudotis „Microsoft Access 2007“ Trumpas vadovas, kaip pradėti naudotis „Microsoft Access 2007“ Skaityti daugiau tai yra aukšto lygio „Access“ ir komponentų, kuriuos sudaro „Access“ duomenų bazė, apžvalga.
  • Greita lentelių programa „Microsoft Access 2007“ Greita lentelių programa „Microsoft Access 2007“ Skaityti daugiau apžvelgia jūsų pirmosios duomenų bazės ir lentelių kūrimą, kad būtų galima saugoti jūsų struktūrizuotus duomenis.
  • Greita užklausų programa „Microsoft Access 2007“ Greita užklausų programa „Microsoft Access 2007“ Skaityti daugiau nagrinėja būdus, kaip grąžinti tam tikras duomenų, saugomų duomenų bazių lentelėse, dalis.

Turėdami pagrindinį supratimą apie šiuose straipsniuose pateiktas sąvokas, bus šiek tiek lengviau sudetinti šiuos dalykus.

Ryšiai su duomenų bazėmis ir normalizavimas

Įsivaizduokite, kad jūs vadovaujate įmonei, parduodančiai 50 skirtingų tipų valdiklių visame pasaulyje. Jūs turite 1 250 klientų ir per mėnesį vidutiniškai parduokite šiems klientams 10 000 valdiklių. Šiuo metu naudojate vieną skaičiuoklę, kad galėtumėte stebėti visus šiuos pardavimus - iš tikrųjų vieną duomenų bazės lentelę. Kiekvienais metais jūsų skaičiuoklė pridedama tūkstančiais eilučių.

plokščias stalas-1plokščias stalas-2

Aukščiau pateikti vaizdai yra jūsų naudojamos užsakymų stebėjimo skaičiuoklės dalis. Dabar sakykite, kad abu šie klientai perka valdiklius iš jūsų kelis kartus per metus, taigi jūs abu turite kur kas daugiau eilučių.

Jei Joan Smith tuokiasi su Ted Baines ir imasi jo pavardės, dabar reikia pakeisti kiekvieną eilutę, kurioje yra jos vardas. Problema tampa dar sudėtingesnė, jei atsitinka, kad turite du skirtingus klientus pavadinimu „Joan Smith“. Tiesiog tapo daug sunkiau išlaikyti nuoseklų pardavimų duomenis dėl gana dažno įvykio.

Naudodami duomenų bazę ir normalizuodami duomenis, mes galime išskaidyti elementus į kelias lenteles, tokias kaip atsargos, klientai ir užsakymai.

normalizavimas

Pažvelgę ​​tik į kliento pavyzdį, mes pašalinsime kliento vardo ir kliento adreso stulpelius ir sudėsime juos į naują lentelę. Aukščiau esančiame paveikslėlyje aš taip pat geriau išsiaiškinau dalykus, kad galėčiau gauti daugiau informacijos apie duomenis. Naujoje lentelėje taip pat yra pirminio rakto (ClientID) stulpelis - skaičius, kuris bus naudojamas kiekvienai šios lentelės eilutei pasiekti.

Originalioje lentelėje, kurioje pašalinome šiuos duomenis, pridėtume svetimo rakto (ClientID) stulpelį, kuris nurodo, kas nurodo tinkamą eilutę, kurioje yra informacija apie šį klientą.

Dabar, kai Joan Smith pakeis savo vardą į Joan Baines, pakeitimą reikia atlikti tik vieną kartą „Client“ lentelėje. Kiekviena kita nuoroda iš sujungtų lentelių atspausdins tinkamą kliento vardą ir ataskaitą, kurioje bus žiūrima, ką Joan įsigijo pastaruosius 5 metus gaus visus užsakymus tiek su mergautine, tiek su vedybine pavarde, nekeisdami ataskaitos būdo sugeneruotas.

Kaip papildomas pranašumas, tai taip pat sumažina bendrą suvartojamų saugyklų kiekį.

Prisijunkite prie tipų

SQL apibrėžia penkis skirtingus sujungimų tipus: INNER, LEFT OUTER, DEŠINĖ IŠORĖ, FULL OUTER ir CROSS. Išorinis raktinis žodis yra neprivalomas SQL sakinyje.

„Microsoft Access“ leidžia naudoti INNER (numatytasis), LEFT OUTER, RIGHT OUTER ir CROSS. VISAS IŠORĖ nėra palaikomas, tačiau naudojant Kairę IŠORUT, SĄJUNGOS VISĄ ir Dešiniąją IŠORER, ji gali būti suklastota, kainuojant daugiau procesoriaus ciklų ir I / O operacijų.

CROSS jungties išvestyje yra kiekviena kairės lentelės eilutė suporuota su kiekviena dešinės lentelės eilute. Vienintelis kartas, kai aš mačiau naudojamą CROSS prisijungimą, yra tikrinant duomenų bazės serverių apkrovą.

Pažvelkime, kaip veikia pagrindiniai sujungimai, tada mes juos modifikuosime, kad atitiktų mūsų poreikius.

Pradėkime nuo dviejų lentelių, „ProdA“ ir „ProdB“, sudarymo su šiomis dizaino savybėmis.

prieigos stalo lentelės

„AutoNumber“ yra automatiškai didėjantis ilgas sveikasis skaičius, priskiriamas įrašams, kai jie pridedami prie lentelės. Teksto parinktis nebuvo modifikuota, todėl ji priims iki 255 simbolių ilgio teksto eilutę.

Dabar užpildykite juos tam tikrais duomenimis.

prieigos stalai

Norėdami parodyti 3 jungčių tipų veikimo skirtumus, iš „ProdA“ ištryniau 1, 5 ir 8 įrašus.

Tada sukurkite naują užklausą apsilankę Kurti> Užklausos dizainas. Dialogo lange Rodyti abi lenteles pasirinkite abi lenteles ir spustelėkite Pridėti, tada Uždaryti.

nauja užklausa

Spustelėkite „ProductID“ „ProdA“ lentelėje, nuvilkite į „ProductID“ „ProdB“ lentelėje ir atleiskite pelės mygtuką, kad sukurtumėte ryšį tarp lentelių.

dizaino_vaizdas

Dešiniuoju pelės mygtuku spustelėkite liniją tarp lentelių, vaizduojančių elementų ryšį su pasirinkite Prisijunkite prie ypatybių.

join_properties

Pagal nutylėjimą pasirinktas prisijungimo tipas 1 (INNER). 2 variantas yra jungimas iš kairės į kairę, o 3 variantas - jungimas dešinėn.

Pirmiausia apžvelgsime prisijungimą prie INNER, todėl spustelėkite Gerai, jei norite atsisakyti dialogo.

Užklausos dizainere išskleidžiamajame sąraše pasirinkite laukus, kuriuos norime pamatyti.

dizainas-vaizdas-2

Kai vykdysime užklausą (raudonas šauktukas juostelėje), joje bus rodomas „ProductName“ laukas iš abiejų lentelių su reikšme iš lentelės „ProdA“ pirmame stulpelyje ir „ProdB“ antrame.

vidinis_sijungimas

Atkreipkite dėmesį, rezultatuose rodomos vertės tik tada, kai „ProductID“ yra lygus abiejose lentelėse. Net jei „ProdB“ lentelėje yra „ProductID = 1“ įrašas, jis rezultatuose nerodomas, nes „ProductID = 1“ neegzistuoja „ProdA“ lentelėje. Tas pats pasakytina apie „ProductID = 11“. Jis egzistuoja „ProdA“ lentelėje, bet ne „ProdB“ lentelėje.

dizainas-juostelė

Naudodami juostos mygtuką „Peržiūrėti“ ir perjungę į „SQL rodinį“, galite pamatyti dizainerio sugeneruotą SQL užklausą, naudojamą šiems rezultatams gauti.

PASIRINKITE „ProdA.ProductName“, „ProdB.ProductName“ iš „ProdA INNER JOIN“ „ProdB ON ON ProdA.ProductID“ = „ProdB.ProductID“;

Grįždami į „Design View“, pakeiskite jungties tipą į 2 (LEFT OUTER). Vykdykite užklausą norėdami pamatyti rezultatus.

left_outer_join

Kaip matote, kiekvienas „ProdA“ lentelės įrašas pateikiamas rezultatuose, tuo tarpu rezultatuose rodomi tik tie „ProdB“ įrašai, kurie turi „ProductID“ įrašą „ProdB“ lentelėje.

Stulpelyje „ProdB.ProductName“ esanti tuščia vieta yra speciali reikšmė (NULL), nes „ProdB“ lentelėje atitikties vertės nėra. Vėliau tai paaiškės.

PASIRINKITE „ProdA.ProductName“, „ProdB.ProductName“ iš „ProdA“ kairės pusės prisijungimo prie „ProdB ON ON ProdA.ProductID = ProdB.ProductID“;

Pabandykite tą patį padaryti su trečiuoju prisijungimo tipu (IŠ dešinės).

right_outer_join

Rezultatai rodo viską iš lentelės „ProdB“, o joje rodomos tuščios (žinomos kaip NULL) vertės, kai „ProdA“ lentelė neturi atitikimo vertės. Iki šiol tai priartina prie rezultatų, kurių norime mūsų skaitytojo klausime.

PASIRINKITE „ProdA.ProductName“, „ProdB.ProductName“ iš „ProdA“ TEISĖS JUNGTI „ProdB ON ON ProdA.ProductID = ProdB.ProductID“;

Funkcijų naudojimas užklausoje

Funkcijos rezultatai taip pat gali būti grąžinti kaip užklausos dalis. Norime, kad rezultatų rinkinyje pasirodytų naujas stulpelis pavadinimu „Rezultatai“. Jos vertė bus „ProdA“ lentelės stulpelio „ProductName“ turinys, jei „ProdA“ turi reikšmę (ji nėra NULL), kitu atveju ji turėtų būti paimta iš „ProdB“ lentelės.

Norint sugeneruoti šį rezultatą, gali būti naudojama funkcija „Tiesioginis IF“ (IIF). Funkcija trunka tris parametrus. Pirmasis yra sąlyga, kuri turi būti įvertinta kaip tikra ar klaidinga. Antrasis parametras yra vertė, kuri turi būti grąžinta, jei sąlyga tikra, ir trečiasis parametras yra vertė, kuri turi būti grąžinta, jei sąlyga yra Netiesa.

Visos mūsų situacijos funkcijos konstrukcija atrodo taip:

IIF („ProdA.ProductID“ yra negaliojantis, „ProdB.ProductName“, „ProdA.ProductName“)

Atkreipkite dėmesį, kad sąlygos parametras netikrina lygybės. Null reikšmė duomenų bazėje neturi vertės, kurią būtų galima palyginti su bet kuria kita reikšme, įskaitant kitą Null. Kitaip tariant, Null neprilygsta Null. Visada. Norėdami to išvengti, verčiau patikriname reikšmę naudodami raktinį žodį „Yra“.

Mes taip pat galėjome naudoti „Is Not Null“ ir pakeisti parametrų True ir False tvarką, kad gautume tą patį rezultatą.

Įrašydami tai į „Query Designer“, turite įvesti lauką „Laukas:“ visą funkciją. Jei norite sukurti stulpelį „Rezultatai“, turite naudoti slapyvardį. Norėdami tai padaryti, pratarkite funkciją su „Rezultatai:“, kaip parodyta kitame ekrano kopijoje.

dešinysis-išorinis-slapyvardis-rezultatai-dizainas

Lygiavertis SQL kodas tai padaryti būtų:

PASIRINKITE „ProdA.ProductName“, „ProdB.ProductName“, IIF („ProdA.ProductID“ yra negaliojantis, „ProdB.ProductName“, „ProdA.ProductName“). Rezultatai iš „ProdA“.

Dabar, kai vykdysime šią užklausą, ji duos šiuos rezultatus.

right_outer_with_aliased_results

Čia matome kiekvieno įrašo, kuriame yra lentelės „ProdA“ vertė, vertė rodoma stulpelyje Rezultatai. Jei „ProdA“ lentelėje nėra įrašo, „ProdB“ įrašas rodomas „Rezultatuose“ - būtent to ir paprašė mūsų skaitytojas.

Norėdami sužinoti daugiau informacijos apie „Microsoft Access“ mokymąsi, skaitykite Joelio Lee knygą Kaip išmokti „Microsoft Access“: 5 nemokami šaltiniai internete Kaip išmokti „Microsoft Access“: 5 nemokami šaltiniai interneteAr jūs turite valdyti didelį duomenų kiekį? Turėtumėte ieškoti „Microsoft Access“. Mūsų nemokami studijų šaltiniai gali padėti jums pradėti ir išmokti įgūdžių sudėtingesniems projektams. Skaityti daugiau .

Bruce'as su elektronika žaidžia nuo 70-ųjų, kompiuteriais - nuo 80-ųjų pradžios ir tiksliai atsako į klausimus apie technologijas, kurių jis visą laiką nenaudojo ir nematė. Jis taip pat erzina save bandydamas groti gitara.