Kuidas kirjutada Microsoft Accessi SQL -päringuid nullist

Kuidas kirjutada Microsoft Accessi SQL -päringuid nullist

Microsoft Access on vaieldamatult kõige võimsam tööriist kogu Microsoft Office'i paketis, kuid müstifitseerib (ja mõnikord hirmutab) Office'i energiatarbijaid. Kuidas peaks keegi selle tööriista kasutamisel oma pea ümber pöörama, kui õppimiskõver on järsem kui Wordil või Excelil? Sel nädalal vaatab Bruce Epper mõningaid meie lugejate selle küsimusega seotud probleeme.



Lugeja küsib:

Mul on probleeme päringu kirjutamisega Microsoft Accessis. Mul on andmebaas, kus on kaks tootetabelit, mis sisaldavad ühist veergu koos numbrilise tootekoodiga ja seotud tootenimega. Soovin teada, milliseid tabeli A tooteid võib leida Soovin lisada veeru nimega Tulemused, mis sisaldab toote nime tabelist A, kui see on olemas, ja toote nime tabelist B, kui seda tabelis A pole. Kas teil on nõu?



Bruce'i vastus:

Microsoft Access on andmebaasihaldussüsteem (DBMS), mis on mõeldud kasutamiseks nii Windowsi kui ka Maci masinates. See kasutab andmete töötlemiseks ja säilitamiseks Microsofti Jet andmebaasimootorit. Samuti pakub see kasutajatele graafilist liidest, mis peaaegu välistab vajaduse mõista struktureeritud päringukeelt (SQL).





SQL on käsukeel, mida kasutatakse andmebaasi salvestatud teabe lisamiseks, kustutamiseks, värskendamiseks ja tagastamiseks, samuti andmebaasi põhikomponentide muutmiseks, näiteks tabelite või indeksite lisamiseks, kustutamiseks või muutmiseks.

Alguspunkt

Kui teil pole Accessiga või mõne muu RDBMS -iga veel tuttav, soovitan teil enne jätkamist alustada nende ressurssidega.



  • Mis on andmebaas? kus Ryan Dube kasutab Excelit, et näidata relatsiooniliste andmebaaside põhitõdesid.
  • Kiire juhend Microsoft Access 2007 kasutamise alustamiseks mis on kõrgetasemeline ülevaade Accessist ja Accessi andmebaasi sisaldavatest komponentidest.
  • Microsoft Access 2007 tabelite kiirõpetus tabelitele vaatab teie esimese andmebaasi ja tabelite loomist struktureeritud andmete salvestamiseks.
  • Microsoft Access 2007 päringute kiire õpetus vaatab vahendeid andmebaasi tabelitesse salvestatud andmete teatud osade tagastamiseks.

Kui teil on nendes artiklites esitatud mõistetest põhiteadmised, on järgmist hõlpsamini seeditav.

Andmebaaside suhted ja normaliseerimine

Kujutage ette, et juhite ettevõtet, mis müüb 50 erinevat tüüpi vidinat üle kogu maailma. Teie kliendibaas on 1250 ja müüte keskmiselt ühe kuu jooksul neile klientidele 10 000 vidinat. Kasutate praegu kogu müügi jälgimiseks ühte arvutustabelit - tegelikult ühte andmebaasi tabelit. Ja igal aastal lisab teie arvutustabelisse tuhandeid ridu.

Ülaltoodud pildid on osa teie kasutatavast tellimuste jälgimise arvutustabelist. Ütle nüüd, et mõlemad kliendid ostavad teie käest vidinaid mitu korda aastas, nii et teil on mõlema jaoks palju rohkem ridu.

Kui Joan Smith abiellub Ted Bainesiga ja võtab tema perekonnanime, tuleb nüüd iga rida, mis sisaldab tema nime, muuta. Probleem halveneb veelgi, kui teil juhtub olema kaks erinevat klienti nimega „Joan Smith”. Üsna tavalise sündmuse tõttu on lihtsalt muutunud palju raskemaks hoida oma müügiandmeid järjepidevana.

Andmebaasi kasutades ja andmeid normaliseerides saame eraldada üksused mitmesse tabelisse, näiteks varud, kliendid ja tellimused.

Vaadates lihtsalt meie näite kliendiosa, eemaldaksime kliendi nime ja aadressi veerud ning paneksime need uude tabelisse. Ülaltoodud pildil olen ka andmed paremini lahti murdnud, et andmetele detailsemalt juurde pääseda. Uus tabel sisaldab ka esmase võtme (ClientID) veergu - numbrit, mida kasutatakse selle tabeli igale reale pääsemiseks.

Esialgsesse tabelisse, kust need andmed eemaldasime, lisame veeru võõrvõtme (ClientID) jaoks, mis lingib õigele reale, mis sisaldab selle konkreetse kliendi teavet.

Nüüd, kui Joan Smith muudab oma nime Joan Bainesiks, tuleb muudatused klienditabelis teha ainult üks kord. Iga teine ​​viide ühendatud tabelitest tõmbab õige kliendi nime ja aruanne, milles vaadeldakse, mida Joan on viimase 5 aasta jooksul ostnud, saab kõik tellimused nii neiupõlve kui ka abielunime all, ilma et oleks vaja muuta aruande koostamise viisi .

Täiendava eelisena vähendab see ka tarbitud salvestusruumi üldist kogust.

Liitu tüübid

SQL määratleb viis erinevat liitumistüüpi: SISEMINE, VASAKU VÄLISE, PAREMA VÄLISE, FULL OUTER ja CROSS. Märksõna OUTER on SQL -lauses valikuline.

Microsoft Access lubab kasutada SISEMIST (vaikimisi), VASAKUT VÄLIST, PAREMAT VÄLIST ja RIST. FULL OUTER ei ole sellisena toetatud, kuid LEFT OUTER, UNION ALL ja RIGHT OUTER abil saab seda võltsida rohkemate protsessoritsüklite ja I/O toimingute hinnaga.

CROSS -liite väljund sisaldab iga vasaku tabeli rida, mis on ühendatud parema tabeli iga reaga. Ainus kord, kui olen kunagi näinud CROSS -i liitumist, on andmebaasiserverite koormuse testimine.

Vaatame, kuidas põhiliited toimivad, seejärel muudame neid vastavalt oma vajadustele.

Alustuseks loome kaks tabelit ProdA ja ProdB, millel on järgmised disainiomadused.

AutoNumber on automaatselt kasvav pikk täisarv, mis määratakse kirjetele, kui need tabelisse lisatakse. Valikut Tekst ei muudetud, seega võtab see vastu kuni 255 tähemärgi pikkuse tekstistringi.

Täitke need nüüd mõne andmetega.

Kolme liitumistüübi erinevuste näitamiseks kustutasin ProdA -st kirjed 1, 5 ja 8.

Edasi, luua uus päring minnes Loo> Päringu kujundus . Valige dialoogiboksi Kuva tabel mõlemad tabelid ja klõpsake nuppu Lisa , siis Sulge .

Tabelis ProdA klõpsake ProductID, lohistage see tabelis ProdB toote ID -le ja vabastage tabelite vahelise suhte loomiseks hiire nupp.

Paremklõpsake tabelite vahelist joont, mis tähistab üksuste ja valige Liitu atribuutidega .

Vaikimisi on valitud liitumistüüp 1 (SISEMINE). Valik 2 on VASAKU VÄLISE liitumine ja 3 ÕIGE VÄLISE liitumine.

Esmalt vaatame SISEMIST liitumist, nii et dialoogi tühistamiseks klõpsake nuppu OK.

Valige päringukujundajast ripploenditest väljad, mida soovime näha.

Kui käivitame päringu (punane hüüumärk lindil), kuvatakse sellel mõlema tabeli väli ProductName, mille väärtus esimeses veerus on tabelis ProdA ja teises ProdB.

Pange tähele, et tulemused näitavad ainult väärtusi, kus ProductID on mõlemas tabelis võrdne. Isegi kui tabelis ProdB on kirje ProductID = 1, ei kuvata seda tulemustes, kuna ProductID = 1 pole tabelis ProdA olemas. Sama kehtib ka toote ID = 11. See on tabelis ProdA, kuid mitte tabelis ProdB.

Kasutades lindil nuppu Vaade ja lülitades SQL vaatele, näete nende tulemuste saamiseks kasutatud disaineri loodud SQL -päringut.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Kui pöördute tagasi disainivaate juurde, muutke liitumistüübiks 2 (LEFT OUTER). Tulemuste nägemiseks käivitage päring.

Nagu näete, kuvatakse tulemustes iga tabeli ProdA kirje, samas kui tulemustes kuvatakse ainult need ProdB -i kirjed, millel on tabelis ProdB vastav kirje ProductID.

Veeru ProdB.ProductName tühi ruum on eriväärtus (NULL), kuna tabelis ProdB puudub vastav väärtus. See osutub hiljem oluliseks.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Proovige sama teha ka kolmanda liitumisviisiga (OTSE VÄLJAS).

Tulemused näitavad kõike tabelist ProdB, kui see näitab tühje (tuntud kui NULL) väärtusi, kus ProdA tabelil pole vastavat väärtust. Siiani viib see meie lugeja küsimuses soovitud tulemustele kõige lähemale.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Funktsioonide kasutamine päringus

Funktsiooni tulemused võidakse tagastada ka päringu osana. Soovime, et meie tulemuste kogumis 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 genereerimiseks saab kasutada funktsiooni Immediate IF (IIF). Funktsioon võtab kolm parameetrit. Esimene on tingimus, mis peab olema tõene või vale. Teine parameeter on tagastatav väärtus, kui tingimus on tõene, ja kolmas parameeter on väärtus, mis tuleb tagastada, kui tingimus on vale.

Meie olukorra täielik funktsioonikonstruktsioon näeb välja selline:

IIF(ProdA.ProductID Is Null, ProdB.ProductName,ProdA.ProductName)

Pange tähele, et tingimuste parameeter ei kontrolli võrdsust. Andmebaasi nullväärtusel ei ole väärtust, mida saaks võrrelda mis tahes muu väärtusega, sealhulgas teise nulliga. Teisisõnu, Null ei võrdu nulliga. Kunagi. Sellest üle saamiseks kontrollime selle väärtust märksõna „Kas” abil.

Oleksime võinud kasutada ka 'Is Not Null' ja muuta sama tulemuse saamiseks parameetrite True ja False järjekorda.

Kui sisestate selle päringukujundusse, peate sisestama väljale Field: kogu funktsiooni. Veeru „Tulemused” loomiseks peate kasutama varjunime. Selleks eessõnage funktsioonile „Tulemused:”, nagu on näha järgmisel ekraanipildil.

Selle tegemiseks oleks samaväärne SQL -kood:

SELECT ProdA.ProductName, ProdB.ProductName, IIF(ProdA.ProductID Is Null,ProdB.ProductName,ProdA.ProductName) AS Results FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Nüüd, kui me selle päringu käivitame, annab see need tulemused.

odavad elektroonikaostude saidid

Siin näeme iga kirje puhul, kus tabelil ProdA on väärtus, see väärtus kajastub veerus Tulemused. Kui ProdA tabelis pole kirjet, kuvatakse ProdB kirje tulemustes, mida meie lugeja täpselt küsis.

Lisateavet Microsoft Accessi õppimise kohta leiate Joel Lee raamatust Kuidas õppida Microsoft Accessi: 5 tasuta veebipõhist ressurssi.

Jaga Jaga Piiksuma E -post Kas tasub Windows 11 -le üle minna?

Windows on ümber kujundatud. Kuid kas sellest piisab, et veenda teid Windows 10 -lt Windows 11 -le üle minema?

Loe edasi
Seotud teemad
  • Tootlikkus
  • Küsige ekspertidelt
Autori kohta Bruce Epper(13 artiklit avaldatud)

Bruce on elektroonikaga mänginud alates 70ndatest, arvutitega alates 80ndate algusest ja vastab täpselt küsimustele tehnoloogia kohta, mida ta pole kasutanud ega kogu aeg näinud. Samuti ärritab ta ennast kitarri mängimisega.

Rohkem Bruce Epperilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin