Reklaam
Microsoft Access on vaieldamatult kõige võimsam tööriist kogu Microsoft Office'i komplektis, kuid see siiski müstifitseerib (ja mõnikord hirmutab) Office'i energiakasutajaid. Mis on järsem õppimiskõver, kui Word või Excel, kuidas peaks keegi selle tööriista kasutamise ümber oma peaga ümber käima? See nädal, Bruce Epper vaatleb mõnda meie lugeja selle küsimuse poolt õhutatud küsimust.
Lugeja küsib:
Mul on probleeme päringu kirjutamisega Microsoft Accessis.
Mul on andmebaas kahe toottabeliga, mis sisaldavad ühist veergu numbrilise tootekoodi ja seotud toote nimega.
Tahan teada saada, milliseid tooteid tabelist A leiate tabelist B. Tahan lisada veeru nimega Tulemused, mis sisaldab tootenime tabelist A, kui see on olemas, ja toote nime tabelist B, kui seda pole tabelis A.
Kas teil on nõu?
Bruce'i vastus:
Microsoft Access on andmebaasihaldussüsteem (DBMS), mis on ette nähtud kasutamiseks nii Windowsi kui ka Mac-i arvutites. Andmete töötlemiseks ja säilitamiseks kasutab see Microsofti andmebaasi Jet Jet. Samuti pakub see kasutajatele graafilist liidest, mis peaaegu välistab vajaduse mõista struktureeritud päringu keelt (SQL).
SQL on käsukeel, mida kasutatakse kataloogis salvestatud teabe lisamiseks, kustutamiseks, värskendamiseks ja tagastamiseks andmebaasi, samuti muuta andmebaasi põhikomponente, näiteks tabelite või. lisamine, kustutamine või muutmine indeksid.
Alguspunkt
Kui teil pole Accessi või mõnda muud RDBMSi veel piisavalt tuttav, soovitaksin teil enne jätkamist alustada järgmistest ressurssidest:
- Mis on andmebaas? Mis ikkagi on andmebaas? [MakeUseOf selgitab]Programmeerija või tehnoloogiahuvilise jaoks on andmebaasi kontseptsioon midagi sellist, mida võib tõesti iseenesestmõistetavaks pidada. Paljude inimeste jaoks on andmebaasi mõiste natuke võõras ... Loe rohkem kus Ryan Dube kasutab Exceli, et näidata relatsiooniliste andmebaaside põhitõdesid.
- Microsoft Access 2007 alustamise lühijuhend Microsoft Access 2007 alustamise lühijuhend Loe rohkem mis on Accessi ja Accessi andmebaasi moodustavate komponentide kõrgetasemeline ülevaade.
- Microsoft Access 2007 tabelite kiire juhend Microsoft Access 2007 tabelite kiire juhend Loe rohkem vaatleb teie esimese andmebaasi ja tabelite loomist teie struktureeritud andmete salvestamiseks.
- Microsoft Access 2007 päringute kiirõpetus Microsoft Access 2007 päringute kiirõpetus Loe rohkem vaatleb vahendeid andmebaasi tabelitesse salvestatud andmete konkreetsete osade tagastamiseks.
Nendes artiklites esitatud mõistetest põhiteadmiste saamine muudab järgneva natuke paremini seeditavaks.
Andmebaaside seosed ja normaliseerimine
Kujutage ette, et juhite ettevõtet, mis müüb 50 erinevat tüüpi vidinat kogu maailmas. Teil on 1250 kliendibaasi ja müüte neile klientidele keskmise kuu jooksul 10 000 vidinat. Kõigi nende müükide jälgimiseks kasutate praegu ühte arvutustabelit - tegelikult ühte andmebaasi tabelit. Ja igal aastal lisab arvutustabelisse tuhandeid ridu.
Ülaltoodud pildid on osa teie kasutatavast tellimuste jälgimise arvutustabelist. Ütleme nüüd, et mõlemad kliendid ostavad teie käest vidinaid mitu korda aastas, nii et teil on mõlemale palju rohkem ridu.
Kui Joan Smith abiellub Ted Bainesiga ja võtab tema perekonnanime, tuleb nüüd muuta iga tema nime sisaldavat rida. Probleem on veelgi keerulisem, kui teil juhtub olema kaks erinevat klienti nimega Joan Smith. Üsna tavalise sündmuse tõttu on lihtsalt palju raskem oma müügiandmeid järjepidevana hoida.
Andmebaasi kasutades ja andmete normaliseerimist saame üksused jagada mitmesse tabelisse, näiteks varude, klientide ja tellimuste kaupa.
Vaadates lihtsalt meie näite kliendi osa, eemaldaksime kliendi nime ja kliendi aadressi veerud ning paneksime need uude tabelisse. Ülaloleval pildil olen ka andmete parema juurdepääsu tagamiseks asjad paremini lahti murdnud. Uus tabel sisaldab ka primaarvõtme (ClientID) veergu - numbrit, mida kasutatakse selle tabeli iga rea juurde pääsemiseks.
Algsesse tabelisse, kust need andmed eemaldasime, lisaksime võõrvõti (ClientID) veeru, mis seob õige reaga, mis sisaldab selle konkreetse kliendi teavet.
Nüüd, kui Joan Smith muudab oma nime Joan Bainesiks, tuleb muudatus teha ainult üks kord klienditabelis. Iga teine liidetud tabelite viide tõmbab õige kliendi nime ja aruande, mis uurib, mida Joan on ostnud viimase 5 aasta jooksul saavad kõik tellimused nii neiupõlvenimede kui ka abielunimede all, ilma et peaksite aruande vormingut muutma loodud.
Täiendava eelisena vähendab see ka kogu tarbitud mälumahtu.
Liitu tüübid
SQL määratleb viis erinevat tüüpi liitumist: SISEMINE, VASAK VÄLJAS, PAREM VÄLIS, TÄIS VÄLIS ja RIST. VÄLISMÄRK on SQL-avalduses valikuline.
Microsoft Access võimaldab kasutada sisendit INNER (vaikesäte), VASAK VÄLJAS, PAREM VÄLJAS ja ÜLES. TÄIELIKU VÄLJAT ei toetata sellisena, kuid kasutades VASAK VÄLJAS, LIIT KÕIKI ja PAREMI VÄLJAS, saab seda võltsida suurema hulga CPU-tsüklite ja I / O-toimingute hinnaga.
CROSS-i liitväljund sisaldab vasakpoolse tabeli iga rida parempoolse tabeli iga reaga. Ainus kord, kui ma CROSS-i liitumist olen näinud, on see andmebaasiserverite koormustestide ajal.
Vaatame, kuidas põhiliited toimivad, siis muudame neid vastavalt oma vajadustele.
Alustame kahe tabeli, ProdA ja ProdB, loomisega järgmiste kujundusomadustega.
Automaatnumber on kannetele automaatselt lisanduv pikk täisarv, kui need lisatakse tabelisse. Suvandit Tekst ei muudetud, nii et see aktsepteerib kuni 255 tähemärgi pikkust tekstistringi.
Nüüd asustage nad mõne andmetega.
Et näidata erinevusi kolme liitmistüübi töös, olen ProdA-st kustutanud kirjed 1, 5 ja 8.
Seejärel looge uus päring, minnes aadressile Loo> Päringu kujundus. Valige mõlemad tabelid dialoogiboksis Kuva tabel ja klõpsake nuppu Lisa, siis Sulge.
Klõpsake tabelis ProdA toote ID-d, lohistage see tabelis ProdB olevasse toote ID-sse ja vabastage hiire nupp, et luua seos tabelite vahel.
Paremklõpsake üksuste ja. Vahelist suhet kajastavate tabelite vahelisel real valige Liitu atribuutidega.
Vaikimisi on valitud liitumistüüp 1 (INNER). 2. võimalus on VASAK-VÄLIS-liitumine ja 3-ÕIGE VÄLIS-liitumine.
Kõigepealt vaatame INNER-i liitumist, nii et dialoogi valimiseks klõpsake nuppu OK.
Valige päringu kujundajas ripploenditest väljad, mida tahame näha.
Kui käivitame päringu (lindil punane hüüumärk), kuvatakse mõlemas tabelis väli ProductName väärtusega tabelist ProdA esimeses veerus ja ProdB teises.
Pange tähele, tulemused näitavad väärtusi ainult siis, kui ProductID on mõlemas tabelis võrdne. Isegi kui tabelis ProdB on kirje ProductID = 1, ei kuvata seda tulemustes, kuna ProductID = 1 tabelis ProdA ei eksisteeri. Sama kehtib ka toote ID = 11 kohta. See on olemas tabelis ProdA, kuid mitte tabelis ProdB.
Kasutades lindil nuppu Vaade ja lülitudes SQL Vaatele, näete nende tulemuste saamiseks kasutatud kujundaja loodud SQL-päringut.
VALI ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOONES ProdB ON ProdA.ProductID = ProdB.ProductID;
Naastes disainivaate juurde, muutke liitmise tüüp 2-ks (VASAK VÄLJAS). Tulemuste nägemiseks käivitage päring.
Nagu näete, on tabelis ProdA kõik kanded tulemustes esindatud, kuid ainult ProdB-s on need, millel on tabelis ProdB vastav tooteID kirje.
Tühi ruum veerus ProdB.ProductName on eriväärtus (NULL), kuna tabelis ProdB vastavat väärtust pole. See osutub hiljem oluliseks.
VALI ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON PRODA.ProductID = ProdB.ProductID;
Proovige sama asja ka kolmanda liitumisviisiga (PAREM VÄLJAS).
Tulemused näitavad kõike alates tabelist ProdB, samal ajal kui see näitab tühje (tuntud kui NULL) väärtusi, kui ProdA-tabelil pole vastavat väärtust. Siiani viib see meid lugeja küsimuses soovitud tulemustele kõige lähemale.
VALI ProdA.ProductName, ProdB.ProductName FROM ProdA PAREMA LIITUMISEGA ProdB ON ProdA.ProductID = ProdB.ProductID;
Funktsioonide kasutamine päringus
Funktsiooni tulemusi võidakse päringu osana ka tagastada. Soovime, et tulemuste komplekti ilmuks uus veerg nimega „Tulemused”. Selle väärtus on tabeli ProdA veeru ProductName sisu, kui ProdA-l on väärtus (see ei ole NULL), vastasel juhul tuleks see võtta tabelist ProdB.
Selle tulemuse saamiseks võib kasutada funktsiooni Immediate IF (IIF). Funktsioon võtab kolm parameetrit. Esimene on tingimus, mille väärtus peab olema tõene või vale. Teine parameeter on väärtus, mis tuleb tagastada, kui tingimus on tõene, ja kolmas parameeter on väärtus, mis tagastatakse, kui tingimus on vale.
Meie olukorra täisfunktsionaalne konstruktsioon näeb välja järgmine:
IIF (ProdA.ProductID on tühine, ProdB.ProductName, ProdA.ProductName)
Pange tähele, et tingimuse parameeter ei kontrolli võrdsust. Nullväärtusel andmebaasis pole väärtust, mida saaks võrrelda mõne muu väärtusega, sealhulgas teise nulliga. Teisisõnu, Null ei võrdu nulliga. Kunagi. Sellest üle saamiseks kontrollime selle asemel väärtust märksõnaga „Kas“.
Sama tulemuse saamiseks oleksime võinud kasutada ka funktsiooni „Is Not Null” ja muuta parameetrite True ja False järjekorda.
Selle lisamisel päringu kujundajasse peate kogu funktsiooni väljale Välja: tippima. Veeru „Tulemused” loomiseks peate kasutama pseudonüümi. Selleks sisestage funktsiooni eessõna tulemustega: nagu nähtub järgmisest ekraanipildist.
Selle jaoks on samaväärne SQL-kood:
VALI ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID Is Null, ProdB.ProductName, ProdA.ProductName).
Kui me selle päringu käivitame, annab see need tulemused.
Siin näeme iga kirje puhul, kus tabelil ProdA on väärtus, kajastub see väärtus veerus Tulemused. Kui tabelis ProdA pole kirjet, kuvatakse ProdB-kirje kanne Tulemused, mida meie lugeja täpselt küsis.
Lisateavet Microsoft Accessi õppimiseks leiate Joel Lee lehelt Kuidas õppida Microsoft Accessi: 5 tasuta veebiressurssi Kuidas õppida Microsoft Accessi: 5 tasuta veebiressurssiKas peate haldama suurt hulka andmeid? Peaksite uurima Microsoft Accessi. Meie tasuta õppematerjalid aitavad teil alustada ja omandada oskusi keerukamate projektide jaoks. Loe rohkem .
Bruce on elektroonikaga mänginud alates 70ndatest, arvutitest alates 80ndate algusest ja vastab täpselt küsimustele tehnoloogia kohta, mida ta pole kogu aja kasutanud ega näinud. Samuti ärritab ta end kitarri mängides.