Oglas

Microsoft Access je zasigurno najmoćniji alat u čitavom paketu Microsoft Office-a, ali mistificira (a ponekad i zastrašuje) korisnike Office Officea. S strmijom krivuljom učenja od Worda ili Excel-a, kako bi se netko trebao omotati oko glave pomoću ovog alata? Ovaj tjedan, Bruce Epper osvrnut ćemo se na neke od tema koje je ovo pitanje pokrenulo od jednog od naših čitatelja.

Čitatelj pita:

Imam problema s pisanjem upita u programu Microsoft Access.

Imam bazu podataka s dvije tablice proizvoda koja sadrži zajednički stupac s numeričkim šifrom proizvoda i povezanim nazivom proizvoda.

Želim saznati koji se proizvodi iz tablice A mogu naći u tablici B. Želim dodati stupac s nazivom Rezultati koji sadrži naziv proizvoda iz tablice A ako postoji, te naziv proizvoda iz tablice B ako ga ne postoji u tablici A.

Imate li kakav savjet?

Bruceov odgovor:

Microsoft Access je sustav za upravljanje bazama podataka (DBMS) dizajniran za upotrebu na Windows i Mac računalima. Koristi Microsoftov pogon Jet baze podataka za obradu i pohranu podataka. Također nudi grafičko sučelje za korisnike što gotovo eliminira potrebu za razumijevanjem strukturiranog jezika upita (SQL).

instagram viewer

SQL je naredbeni jezik koji se koristi za dodavanje, brisanje, ažuriranje i vraćanje podataka pohranjenih u baze podataka kao i izmjenu osnovnih komponenti baze podataka poput dodavanja, brisanja ili izmjene tablica ili indeksi.

Polazna točka

Ako već nemate poznanstvo s Accessom ili nekim drugim RDBMS-om, predlažem vam da započnete s ovim resursima prije nego što nastavite:

  • Pa što je baza podataka? Pa što je uopće baza podataka? [MakeUseOf objašnjava]Za programera ili ljubitelja tehnologije koncept baze podataka nešto je što se doista može shvatiti zdravo za gotovo. Međutim, mnogima je sam koncept baze podataka malo strani ... Čitaj više gdje Ryan Dube koristi Excel kako bi pokazao osnove relacijskih baza podataka.
  • Kratki vodič za početak rada s Microsoft Accessom 2007 Kratki vodič za početak rada s Microsoft Accessom 2007 Čitaj više koji je pregled pristupa na visokoj razini i komponenti koje sadrže Access bazu podataka.
  • Brzi vodič za tablice u programu Microsoft Access 2007 Brzi vodič za tablice u programu Microsoft Access 2007 Čitaj više proučava stvaranje svoje prve baze podataka i tablica za pohranu vaših strukturiranih podataka.
  • Brzi vodič o upitima u programu Microsoft Access 2007 Brzi vodič o upitima u programu Microsoft Access 2007 Čitaj više promatra sredstva za vraćanje određenih dijelova podataka pohranjenih u tablicama baze podataka.

Osnovno razumijevanje koncepata navedenih u ovim člancima olakšat će vam probavu sljedećeg.

Odnosi i normalizacija baza podataka

Zamislite da imate tvrtku koja prodaje 50 različitih vrsta widgeta širom svijeta. Imate klijentsku bazu od 1.250 i u prosjeku prodate 10.000 widgeta tim klijentima. Trenutno koristite jednu proračunsku tablicu za praćenje svih tih prodaja - učinkovito jednu tablicu baze podataka. Svake godine u vašu proračunsku tablicu doda tisuće redaka.

ravnog stol 1ravnog Tablica 2

Gore navedene slike dio su proračunske tablice za praćenje narudžbi koju koristite. Sada recite da obojica ovih klijenata kupuju widgete od vas nekoliko puta godišnje, tako da imate puno više redaka za oba.

Ako se Joan Smith udala za Teda Bainesa i uzela mu prezime, svaki red koji sadrži njeno ime sada treba promijeniti. Problem je složen ako imate dva različita klijenta s imenom "Joan Smith". Upravo je postalo mnogo teže držati podatke o prodaji dosljednim zbog prilično uobičajenog događaja.

Korištenjem baze podataka i normalizacijom podataka možemo izdvojiti stavke u više tablica, kao što su inventar, klijenti i narudžbe.

normalizacija

Samo gledanjem dijela klijenta iz našeg primjera, uklonili bismo stupce za ime klijenta i adresu klijenta i stavili ih u novu tablicu. Na gornjoj slici također sam bolje razbio stvari radi detaljnijeg pristupa podacima. Nova tablica sadrži i stupac za primarni ključ (ClientID) - broj koji će se koristiti za pristup svakom retku u ovoj tablici.

U originalnoj tablici u kojoj smo uklonili ove podatke, dodali bismo stupac za strani ključ (ClientID) koji upućuje na odgovarajući redak koji sadrži podatke za konkretnog klijenta.

Sada, kad Joan Smith promijeni ime u Joan Baines, promjenu je potrebno izvršiti samo jednom u tablici klijenta. Svaka druga referenca iz pridruženih tablica povući će odgovarajuće ime klijenta i izvještaj koji promatra ono za što je Joan kupila u posljednjih 5 godina dobit će sve narudžbe pod djevojačkim i vjenčanim imenima, a da ne morate mijenjati način na koji je izvješće generiran.

Kao dodatnu korist, ovo također smanjuje ukupnu količinu potrošene zalihe.

Vrste pridruživanja

SQL definira pet različitih vrsta spajanja: UNUTAR, LIJEVA VANJSKA, DESNA OUTER, PUNA OUTER i CROSS. OUTER ključna riječ u SQL izrazu nije obavezna.

Microsoft Access dopušta upotrebu INNER-a (zadano), LEFT OUTER, DESNO OUTER i CROSS. PUNI OUTER nije podržan kao takav, ali upotrebom LIJEVO OUTER, UNION ALL i DESNO OUTER može se krivotvoriti po cijeni više CPU ciklusa i I / O operacija.

Izlaz CROSS pridruživanja sadrži svaki red lijeve tablice uparen sa svakim redom desne tablice. Jedini put kad sam vidio CROSS pridruživanje se koristi tijekom testiranja opterećenja poslužitelja baza podataka.

Pogledajmo kako funkcioniraju osnovne spojeve, a zatim ćemo ih modificirati da odgovaraju našim potrebama.

Započnimo stvaranjem dvije tablice, ProdA i ProdB, sa sljedećim dizajnerskim svojstvima.

pristup-stol-defs

Automatski broj automatski se povećava cijelim brojevima dodijeljenim unosima jer su dodani u tablicu. Opcija Text nije izmijenjena, pa će prihvatiti tekstualni niz do 255 znakova.

Sada ih popunite s nekim podacima.

pristup stolovi

Kako bih pokazao razlike u funkcioniranju 3 vrste pridruživanja, iz ProdA sam izbrisao unose 1, 5 i 8.

Zatim kreirajte novi upit Stvori> Dizajn upita. Odaberite obje tablice u dijaloškom okviru Prikaži tablicu i kliknite Dodaj, onda Zatvoriti.

Novi-upit

Kliknite na ProductID u tablici ProdA, povucite ga na ProductID u tablici ProdB i pustite gumb miša da stvorite odnos između tablica.

design_view

Desnom tipkom miša kliknite liniju između tablica koje predstavljaju odnos između stavki i odaberite Pridružite svojstva.

join_properties

Prema zadanim postavkama odabran je tip pridruživanja 1 (INNER). Opcija 2 je pridruživanje LEVO OUTER, a 3 je pridruživanje DESNO OUTER.

Prvo ćemo pogledati pridruživanje UNUTRA, pa kliknite U redu da biste isključili dijalog.

U dizajneru upita odaberite polja koja želimo vidjeti s padajućih popisa.

dizajn Prikaz 2

Kada pokrenemo upit (crveni uskličnik na vrpci), prikazat će se polje ProductName iz obje tablice sa vrijednosti iz tablice ProdA u prvom stupcu i ProdB u drugom.

inner_join

Primjetite da rezultati pokazuju vrijednosti samo ako je ProductID jednak u obje tablice. Iako u tablici ProdB postoji unos za ProductID = 1, u rezultatima se ne prikazuje jer ProductID = 1 ne postoji u tablici ProdA. Isto se odnosi i na ProductID = 11. Postoji u tablici ProdA, ali ne i u tablici ProdB.

dizajn vrpce

Upotrebom gumba View na vrpci i prebacivanjem na SQL View možete vidjeti SQL upit generiran od dizajnera koji se koristio za dobivanje tih rezultata.

ODABIR ProdA.ProductName, ProdB.ProductName IZ PRODA UNUTARNJA PRIDRUŽITE se ProdB ON ProdA.ProductID = ProdB.ProductID;

Vratite se na dizajn dizajna, promijenite vrstu spajanja u 2 (LIJEVI OUTER). Pokrenite upit da biste vidjeli rezultate.

left_outer_join

Kao što možete vidjeti, svaki je unos u tablici ProdA predstavljen u rezultatima, dok se u rezultatima prikazuju samo oni u ProdB-u koji imaju podudaranje ProductID unosa u tablici ProdB.

Prazni prostor u stupcu ProdB.ProductName posebna je vrijednost (NULL) jer u tablici ProdB nema odgovarajuće vrijednosti. To će se kasnije pokazati važnim.

SELECT ProdA.ProductName, ProdB.ProductName OD ProdA LEVO PRIDRUŽITE se ProdB ON ProdA.ProductID = ProdB.ProductID;

Pokušajte isto s trećom vrstom spajanja (DESNO OUTER).

right_outer_join

Rezultati pokazuju sve iz tablice ProdB dok prikazuje prazne (poznate kao NULL) vrijednosti gdje ProdA tablica nema odgovarajuću vrijednost. Za sada, to nam najviše približava željene rezultate u pitanju našeg čitatelja.

SELECT ProdA.ProductName, ProdB.ProductName OD ProdA DESNO PRIDRUŽITE se ProdB ON ProdA.ProductID = ProdB.ProductID;

Korištenje funkcija u upitu

Rezultati funkcije mogu se vratiti i kao dio upita. Želimo da se novi stupac pod nazivom "Rezultati" prikazuje u našem skupu rezultata. Njegova vrijednost bit će sadržaj stupca ProductName tablice ProdA ako ProdA ima vrijednost (nije NULL), u suprotnom treba uzeti iz tablice ProdB.

Da bi se postigao ovaj rezultat, može se koristiti funkcija IF (IIF). Funkcija ima tri parametra. Prvi je uvjet koji mora biti procijenjen na vrijednost True ili False. Drugi parametar je vrijednost koju treba vratiti ako je uvjet True, a treći parametar je vrijednost koja se vraća ako je uvjet False.

Konstrukt pune funkcije za našu situaciju izgleda ovako:

IIF (ProdA.ProductID je null, ProdB.ProductName, ProdA.ProductName)

Primijetite da parametar uvjeta ne provjerava jednakost. Nulta vrijednost u bazi podataka nema vrijednost koja se može uspoređivati ​​s bilo kojom drugom vrijednošću, uključujući drugu Null. Drugim riječima, Null ne odgovara Nullu. Ikad. Da bismo to prošli, umjesto toga provjeravamo vrijednost pomoću ključne riječi "Je".

Mogli smo također upotrijebiti 'Is Not Null' i promijeniti redoslijed parametara True i False da bismo postigli isti rezultat.

Kad ovo stavite u Dizajner upita, morate unijeti cijelu funkciju u polje Field:. Da biste ga kreirali u stupcu "Rezultati", morate upotrijebiti pseudonim. Da biste to učinili, predgovorite funkciju s "Rezultati:" kao što se vidi na sljedećoj snimci zaslona.

desni vanjski-aliased-rezultati-dizajn

Ekvivalentni SQL kôd za to bi bio:

SELECT ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID je nula, ProdB.ProductName, ProdA.ProductName) KAO Rezultati IZ PRODA PRIDRUŽITE se ProdB ON ProdA.ProductID = ProdB.ProductID;

Kada pokrenemo ovaj upit, proizvest će ove rezultate.

right_outer_with_aliased_results

Ovdje vidimo za svaki unos gdje tablica ProdA ima vrijednost, ta vrijednost se odražava u stupcu Rezultati. Ako u tablici ProdA nema unosa, unos iz ProdB-a pojavit će se u rezultatima, a to je upravo ono što je pitao naš čitatelj.

Za više resursa za učenje Microsoftovog pristupa, pogledajte Joel Lee Kako naučiti Microsoftov pristup: 5 besplatnih internetskih resursa Kako naučiti Microsoftov pristup: 5 besplatnih internetskih resursaMorate li upravljati velikom količinom podataka? Trebali biste pogledati Microsoftov pristup. Naši besplatni resursi za učenje mogu vam pomoći da započnete i naučite vještine za složenije projekte. Čitaj više .

Bruce se igrao s elektronikom od 70-ih, računalima od ranih 80-ih i točno je odgovarao na pitanja o tehnologiji koje nije koristio niti vidio cijelo vrijeme. Također se nervira pokušajem sviranja gitare.