Mainos

Microsoft Access on kiistatta tehokkain työkalu koko Microsoft Office -sarjassa, mutta se mystifioi (ja joskus pelottaa) Office-virrankäyttäjiä. Jos joku oppimiskäyrä on Wordia tai Excelä parempi, kuinka kukaan aikoo kiertää päänsä tämän työkalun käytön ympärille? Tämä viikko, Bruce Epper tarkastelemme eräitä lukijoidemme tämän kysymyksen kannustimia aiheita.

Lukija kysyy:

Minulla on vaikeuksia kyselyn kirjoittamisessa Microsoft Accessiin.

Minulla on tietokanta, jossa on kaksi tuotelistausta, jotka sisältävät yhteisen sarakkeen, jossa on numeerinen tuotekoodi ja siihen liittyvä tuotenimi.

Haluan selvittää, mitkä taulukon A tuotteet löytyvät taulukosta B. Haluan lisätä Tulokset-sarakkeen, joka sisältää tuotenimen taulukosta A, jos sitä on, ja tuotenimen taulukosta B, kun sitä ei ole taulukossa A.

Onko sinulla neuvoja?

Brucen vastaus:

Microsoft Access on tietokannan hallintajärjestelmä (DBMS), joka on tarkoitettu käytettäväksi sekä Windows- että Mac-koneissa. Se käyttää Microsoftin Jet-tietokantamoottoria tietojen käsittelyyn ja varastointiin. Se tarjoaa myös graafisen käyttöliittymän käyttäjille, joka melkein eliminoi tarpeen ymmärtää rakenteellista kyselykieltä (SQL).

instagram viewer

SQL on komentokieli, jota käytetään hakemistoon tallennettujen tietojen lisäämiseen, poistamiseen, päivittämiseen ja palauttamiseen tietokanta sekä muokata ydintietokantakomponentteja, kuten lisäämällä, poistamalla tai muuttamalla taulukoita tai indeksit.

Lähtökohta

Jos sinulla ei ole jo jonkin verran tuntemusta Accessista tai toisesta RDBMS-järjestelmästä, suosittelen aloittamista seuraavilla resursseilla ennen jatkamista:

  • Joten mikä on tietokanta? Joten mikä on tietokanta, joka tapauksessa? [MakeUseOf selittää]Ohjelmoijalle tai tekniikan harrastajalle tietokannan käsite on jotain, jota voidaan pitää itsestään selvänä. Monille ihmisille tietokannan käsite itsessään on kuitenkin vähän vieras ... Lue lisää missä Ryan Dube käyttää Exceliä osoittamaan relaatiotietokantojen perusteet.
  • Pikaopas Microsoft Access 2007 -sovelluksen käytön aloittamiseen Pikaopas Microsoft Access 2007 -sovelluksen käytön aloittamiseen Lue lisää joka on korkean tason katsaus Accessiin ja Access-tietokannan muodostaviin komponentteihin.
  • Pikaopastus taulukkoihin Microsoft Access 2007: ssä Pikaopastus taulukkoihin Microsoft Access 2007: ssä Lue lisää tarkastelee ensimmäisen tietokannan ja taulukoiden luomista strukturoidun tiedon tallentamiseksi.
  • Pikaoppi kyselyihin Microsoft Access 2007: ssä Pikaoppi kyselyihin Microsoft Access 2007: ssä Lue lisää tarkastelee keinoja palauttaa tietyt osat tietokantataulukoihin tallennetusta tiedosta.

Tämän artikkelin tarjoamien käsitteiden perustiedot ymmärtävät seuraavia hieman helpommin.

Tietokantasuhteet ja normalisointi

Kuvittele, että sinulla on yritys, joka myy 50 erityyppistä widgettiä ympäri maailmaa. Sinulla on 1 250 asiakaskunta ja myyt keskimäärin kuukaudessa 10 000 widgettiä näille asiakkaille. Käytät tällä hetkellä yhtä laskentataulukkoa seurataksesi kaikkia näitä myyntiä - käytännössä yhtä tietokantataulua. Ja joka vuosi lisää tuhansia rivejä laskentataulukkoosi.

flat-taulukko-1flat-taulukko-2

Yllä olevat kuvat ovat osa käyttämääsi tilausseurantataulukkoa. Sano nyt, että molemmat asiakkaat ostavat widgettejä sinulta useita kertoja vuodessa, joten sinulla on paljon enemmän rivejä molemmille.

Jos Joan Smith menee naimisiin Ted Bainesin kanssa ja ottaa hänen sukunimensä, jokainen rivi, joka sisältää hänen nimensä, on nyt vaihdettava. Ongelma on monimutkainen, jos sinulla on kaksi eri asiakasta nimellä Joan Smith. Myyntitietojesi pitäminen on juuri tullut paljon vaikeammaksi melko yleisen tapahtuman takia.

Käyttämällä tietokantaa ja normalisoimalla tietoja, voimme erottaa kohteet useisiin taulukoihin, kuten varastot, asiakkaat ja tilaukset.

normalisointi

Vain tarkastelemalla esimerkissämme olevaa asiakasosaa, poisimme Asiakkaan nimen ja Asiakkaan osoitteen sarakkeet ja laitamme ne uuteen taulukkoon. Yllä olevassa kuvassa olen myös rikkoutunut asiat paremmin saadakseen yksityiskohtaisemman pääsyn tietoihin. Uusi taulukko sisältää myös sarakkeen ensisijaiselle avaimelle (ClientID) - numerolle, jota käytetään pääsemään jokaiseen tämän taulukon riviin.

Alkuperäiseen taulukkoon, jossa poistimme nämä tiedot, lisääisimme vieraan avaimen (ClientID) sarakkeen, joka linkittää oikeaan riviin, joka sisältää tiedot kyseisestä asiakkaasta.

Nyt kun Joan Smith muuttaa nimensä Joan Bainesiksi, muutos on tehtävä vain kerran asiakastaulukossa. Jokainen liitettyihin taulukoihin liitetty viite vetää oikean asiakkaan nimen ja raportin, jossa tarkastellaan mitä Joan on ostanut viimeiset 5 vuotta saavat kaikki tilaukset sekä tyttö- että naimisissa olevilla nimillä ilman, että tarvitsee muuttaa raportin tapaa syntyy.

Lisäetuena tämä vähentää myös kokonaisen kuluneen varastoinnin määrää.

Liity tyyppeihin

SQL määrittelee viisi erityyppistä liittymistä: SISÄINEN, VASEN ULKO, OIKEA ULKO, TÄYSINEN ULKO ja Risti. ULKOINEN avainsana on valinnainen SQL-käskyssä.

Microsoft Access sallii INNER (oletus), LEFT OUTER, OIKEA ULKO ja Risti. FULL OUTER: ää ei tueta sellaisenaan, mutta käyttämällä VASEMMALLA ULKOA, UNION ALL ja OIKEA ULKOPUOLIA, se voidaan väärentää lisää CPU-jaksoja ja I / O-toimintoja.

CROSS-liittymän lähtö sisältää jokaisen vasemman taulukon rivin pareittain oikean taulukon jokaisen rivin kanssa. Ainoa kerta kun olen nähnyt käytetyn CROSS-liittymän, on tietokantapalvelimien kuormitustestaus.

Katsotaanpa, kuinka perusliitokset toimivat, niin muokkaamme niitä tarpeidemme mukaan.

Aloitetaan luomalla kaksi taulukkoa, ProdA ja ProdB, joilla on seuraavat suunnitteluominaisuudet.

pääsy-table-defs

AutoNumber on automaattisesti kasvava pitkä kokonaisluku merkinnöille, kun ne lisätään taulukkoon. Tekstiasetusta ei muokattu, joten se hyväksyy enintään 255 merkkiä pitkä merkkijono.

Nyt, täytä heille joitain tietoja.

pääsy-pöydät

Jotta voin näyttää erot kolmen liittymistyypin toiminnassa, olen poistanut merkinnät 1, 5 ja 8 ProdA: sta.

Luo seuraavaksi uusi kysely menemällä kohtaan Luo> Kyselyn suunnittelu. Valitse molemmat taulukot Näytä taulukko -valintaikkunassa ja napsauta Lisää, sitten kiinni.

uusi-kysely

Napsauta ProductID taulukossa ProdA, vedä se ProductID taulukossa ProdB ja vapauta hiiren painike luodaksesi yhteyden taulukoiden välillä.

design_view

Napsauta hiiren kakkospainikkeella riviä taulukoiden välillä, jotka edustavat kohteiden ja Valitse Liity ominaisuuksiin.

join_properties

Oletuksena liittymistyyppi 1 (INNER) on valittu. Vaihtoehto 2 on VASEN ULKO-liitos ja 3 on OIKEA ULKO-liitos.

Tarkastellaan ensin INNER-liittymistä, joten hylättävä valintaikkuna napsauttamalla OK.

Valitse kyselysuunnittelussa avattavista luetteloista kentät, joita haluamme nähdä.

suunnittelu-view-2

Kun suoritamme kyselyn (punainen huutomerkki nauhassa), se näyttää ProductName-kentän molemmista taulukoista, joiden arvo on taulukon ProdA ensimmäisessä sarakkeessa ja ProdB toisessa.

inner_join

Huomaa, että tulokset näyttävät vain arvot, joissa ProductID on molemmissa taulukoissa sama. Vaikka taulukossa ProdB on merkintä ProductID = 1, se ei näy tuloksissa, koska ProductID = 1 ei ole taulukossa ProdA. Sama koskee tuotetunnusta = 11. Se on taulukossa ProdA, mutta ei taulukossa ProdB.

suunnittelu-nauha

Käyttämällä nauhan Näytä-painiketta ja siirtymällä SQL-näkymään näet suunnittelijan tuottaman SQL-kyselyn, jota käytetään näiden tulosten saamiseen.

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

Palaa takaisin Design View -näkymään, vaihda liitostyyppi arvoon 2 (LEFT OUTER). Suorita kysely nähdäksesi tulokset.

left_outer_join

Kuten näette, jokainen taulukon ProdA-merkintä on edustettuna tuloksissa, kun taas vain ne ProdB-tietokannat, joilla on vastaava ProductID-merkintä taulukossa ProdB, näkyvät tuloksissa.

ProdB.ProductName -sarakkeen tyhjä tila on erityinen arvo (NULL), koska taulukossa ProdB ei ole vastaavaa arvoa. Tämä osoittautuu tärkeäksi myöhemmin.

VALITSE ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT LIITÄ ProdB ON ON ProdA.ProductID = ProdB.ProductID;

Kokeile samaa asiaa myös kolmannella liitostyypillä (OIKEA).

right_outer_join

Tulokset näyttävät kaiken taulukosta ProdB, kun taas siinä on tyhjiä (tunnetaan nimellä NULL) arvoja, joissa ProdA-taulukolla ei ole vastaavaa arvoa. Toistaiseksi tämä vie meidät lähinnä lukijamme kysymyksessä toivottuihin tuloksiin.

VALITSE ProdA.ProductName, ProdB.ProductName FROM ProdA OIKEAAN LIITTYMINEN ProdB ON ProdA.ProductID = ProdB.ProductID;

Toimintojen käyttäminen kyselyssä

Funktion tulokset voidaan palauttaa myös osana kyselyä. Haluamme uuden tuloksen nimeltä 'Tulokset', joka ilmestyy tulosjoukkoomme. Sen arvo on ProdA-taulukon ProductName -sarakkeen sisältö, jos ProdA: lla on arvo (se ei ole NULL), muuten se tulisi ottaa taulukosta ProdB.

Välittömän IF: n (IIF) toimintoa voidaan käyttää tämän tuloksen tuottamiseen. Toiminto ottaa kolme parametria. Ensimmäinen on ehto, jonka on arvioitava oikean tai väärin arvoon. Toinen parametri on palautettava arvo, jos ehto on totta, ja kolmas parametri on palautettava arvo, jos ehto on väärä.

Täydellinen toimintorakenne tilanteeseemme näyttää tältä:

IIF (ProdA.ProductID on tyhjä, ProdB.ProductName, ProdA.ProductName)

Huomaa, että ehtoparametri ei tarkista tasa-arvoa. Tietokannan nolla-arvolla ei ole arvoa, jota voidaan verrata mihinkään muuhun arvoon, mukaan lukien toinen nolla. Toisin sanoen, Null ei ole yhtä kuin Null. Koskaan. Päästäksesi ohi tarkistamme sen sijaan arvon Is-avainsanalla.

Voisimme käyttää myös ”Is Not Null” -sovellusta ja muuttaa True and False -parametrien järjestystä saadaksesi saman tuloksen.

Kun lisäät tämän kyselyn suunnittelijaan, sinun on kirjoitettava koko toiminto Kenttä: -kenttään. Sinun on käytettävä aliasta, jotta voit luoda sen Tulokset-sarakkeen. Esitä tätä varten esipuhe toiminnolla 'Tulokset:' seuraavassa kuvakaappauksessa esitetyllä tavalla.

oikea-ulompi-alias-tulokset suunnittelun

Vastaava SQL-koodi tähän on:

VALITSE 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;

Nyt kun suoritamme tämän kyselyn, se tuottaa nämä tulokset.

right_outer_with_aliased_results

Täällä näemme jokaisesta merkinnästä, jossa taulukolla ProdA on arvo, tämä arvo heijastuu Tulokset-sarakkeessa. Jos ProdA-taulukossa ei ole merkintää, ProdB: n merkintä näkyy Tulokset-kohdassa, mitä lukijamme kysyi.

Katso Joel Leen lisätietoja Microsoft Accessin oppimisesta Kuinka oppia Microsoft Access: 5 ilmaista verkkoresurssia Kuinka oppia Microsoft Access: 5 ilmaista verkkoresurssiaPitääkö sinun hallita suurta määrää tietoa? Sinun tulisi tutkia Microsoft Accessiä. Ilmaiset opintoresurssimme voivat auttaa sinua pääsemään alkuun ja oppimaan taitoja monimutkaisempiin hankkeisiin. Lue lisää .

Bruce on pelannut elektroniikalla 70-luvulta lähtien, tietokoneilla 80-luvun alusta, ja vastannut tarkasti tekniikkakysymyksiin, joita hän ei ole käyttänyt eikä nähnyt koko ajan. Hän ärsyttää itseään myös yrittämällä soittaa kitaraa.