Kuinka kirjoittaa Microsoft Accessin SQL -kyselyt tyhjästä

Kuinka kirjoittaa Microsoft Accessin SQL -kyselyt tyhjästä

Microsoft Access on epäilemättä tehokkain työkalu koko Microsoft Office -paketissa, mutta se mystifioi (ja joskus pelottaa) Officen käyttäjiä. Joku jyrkempi oppimiskäyrä kuin Word tai Excel, miten kenenkään pitäisi kääriä päänsä tämän työkalun käytön ympärille? Tällä viikolla Bruce Epper tarkastelee joitain kysymyksiä, joita yksi lukijoistamme herätti tässä kysymyksessä.





Lukija kysyy:

Minulla on ongelmia kyselyn kirjoittamisessa Microsoft Accessissa. Minulla on tietokanta, jossa on kaksi tuotetaulukkoa, jotka sisältävät yhteisen sarakkeen, jossa on numeerinen tuotekoodi ja siihen liittyvä tuotenimi. Haluan tietää, mitkä tuotteet taulukosta A löytyvät Haluan lisätä sarakkeen nimeltä Tulokset, joka sisältää tuotteen nimen taulukosta A, jos sellainen on, ja tuotteen nimen taulukosta B, jos sitä ei ole taulukossa A. Onko sinulla neuvoja?





Brucen vastaus:

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





SQL on komentokieli, jota käytetään tietokantaan tallennettujen tietojen lisäämiseen, poistamiseen, päivittämiseen ja palauttamiseen sekä tietokannan ydinosien muuttamiseen, kuten taulukoiden tai indeksien lisäämiseen, poistamiseen tai muokkaamiseen.

Lähtökohta

Jos sinulla ei vielä ole Accessin tai muun RDBMS: n tuntemusta, suosittelen, että aloitat näistä resursseista ennen kuin jatkat:



  • Joten mikä on tietokanta? Ryan Dube näyttää Excelin relaatiotietokantojen perusteet.
  • Pikaopas Microsoft Access 2007: n käytön aloittamiseen joka on korkean tason yleiskatsaus Accessista ja Access-tietokannan sisältävistä osista.
  • Pikaopetus taulukoihin Microsoft Access 2007: ssä tutkii ensimmäisen tietokannan ja taulukoiden luomista jäsenneltyjen tietojen tallentamiseksi.
  • Pikaopetus kyselyihin Microsoft Access 2007: ssä tarkastellaan keinoja palauttaa tietyt osat tietokantataulukoihin tallennetuista tiedoista.

Jos ymmärrät näissä artikkeleissa annetut käsitteet perusteellisesti, seuraava on helpompi sulattaa.

Tietokannan suhteet ja normalisointi

Kuvittele, että johdat yritystä, joka myy 50 erilaista widgettiä ympäri maailmaa. Sinulla on 1 250 asiakaskuntaasi ja myyt keskimäärin kuukaudessa 10 000 widgettiä näille asiakkaille. Käytät tällä hetkellä yhtä laskentataulukkoa kaikkien näiden myynnien seuraamiseen - käytännössä yhtä tietokantataulukkoa. Ja joka vuosi lisää tuhansia rivejä laskentataulukkoosi.





Yllä olevat kuvat ovat osa käyttämääsi tilausten seurantataulukkoa. 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 muutettava. Ongelma pahenee, jos sinulla on kaksi eri asiakasta nimeltä Joan Smith. On vain tullut paljon vaikeammaksi pitää myyntitietosi johdonmukaisina melko yleisen tapahtuman vuoksi.

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

Kun tarkastelemme vain esimerkkimme asiakasosaa, poistamme sarakkeet asiakkaan nimestä ja asiakkaan osoitteesta ja laitamme ne uuteen taulukkoon. Yllä olevassa kuvassa olen myös rikkonut asiat paremmin saadakseni yksityiskohtaisemman pääsyn tietoihin. Uudessa taulukossa on myös sarake ensisijaiselle avaimelle (ClientID) - numero, jota käytetään tämän taulukon jokaisen rivin käyttämiseen.

Alkuperäiseen taulukkoon, josta poistimme nämä tiedot, lisäisimme sarakkeen vieraalle avaimelle (ClientID), joka linkittää oikealle riville, joka sisältää tämän asiakkaan tiedot.

Nyt kun Joan Smith muuttaa nimensä Joan Bainesiksi, muutos on tehtävä vain kerran asiakastaulukossa. Kaikki muut viittaukset yhdistetyistä taulukoista hakevat oikean asiakkaan nimen, ja raportti, jossa tarkastellaan Joanin viimeisten viiden vuoden aikana ostamia tietoja, saa kaikki tilaukset sekä tyttö- että naimisissa olevilla nimillä ilman, että raportin luomistapaa tarvitsee muuttaa .

Lisäetuna tämä vähentää myös kulutetun tallennustilan kokonaismäärää.

Liity tyypit

SQL määrittelee viisi erilaista liitostyyppiä: SISÄINEN, VASEN OUTER, OIKEA ULKOINEN, FULL OUTER ja CROSS. OUTER -avainsana on valinnainen SQL -käskyssä.

Microsoft Access sallii SISÄINEN (oletus), VASEN OUTER, OIKEA ULKOINEN ja RISTI. FULL OUTER -toimintoa ei tueta sellaisenaan, mutta käyttämällä VASEN OUTER-, UNION ALL- ja RIGHT OUTER -toimintoja se voidaan väärentää useampien suoritusjaksojen ja I/O -toimintojen kustannuksella.

CROSS -liitoksen tulos sisältää jokaisen vasemman taulukon rivin, joka on yhdistetty oikean taulukon jokaiseen riviin. Ainoa kerta, kun olen koskaan nähnyt CROSS -liittymän käytettävän, on tietokantapalvelimien kuormitustestaus.

Katsotaanpa, miten perusliitokset toimivat, ja muokkaamme niitä tarpeidemme mukaan.

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

Automaattinen numero on automaattisesti kasvava pitkä kokonaisluku, joka määritetään syötteille, kun ne lisätään taulukkoon. Teksti -vaihtoehtoa ei muutettu, joten se hyväksyy enintään 255 merkin pituisen merkkijonon.

Täytä ne nyt joillakin tiedoilla.

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

Seuraava, luo uusi kysely menemällä Luo> Kyselyn suunnittelu . Valitse molemmat taulukot Näytä taulukko -valintaikkunasta ja napsauta Lisää , sitten kiinni .

Napsauta ProductID taulukossa ProdA, vedä se ProductID taulukkoon ProdB ja vapauta hiiren painike luodaksesi taulukoiden välisen suhteen.

Napsauta hiiren kakkospainikkeella taulukkojen välistä viivaa, joka edustaa kohteiden ja valitse Liity ominaisuuksiin .

Liittymistyyppi 1 (SISÄINEN) on oletusarvoisesti valittu. Vaihtoehto 2 on VASEN OUTER -liitos ja 3 OIKEA OUTER -liitos.

Tarkastelemme ensin SISÄINEN liittymistä, joten napsauta OK hylätäksesi valintaikkunan.

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

Kun suoritamme kyselyn (punainen huutomerkki valintanauhassa), se näyttää molempien taulukoiden ProductName -kentän, jonka arvo on taulukon ProdA ensimmäisessä sarakkeessa ja ProdB toisessa.

Huomaa, että tulokset näyttävät vain arvot, joissa ProductID on sama molemmissa taulukoissa. 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.

Käyttämällä valintanauhan Näytä -painiketta ja siirtymällä SQL -näkymään näet tulosten saamiseen käytetyn suunnittelijan luoman SQL -kyselyn.

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

Kun palaat suunnittelunäkymään, vaihda liitostyypiksi 2 (VASEN OUTER). Suorita kysely nähdäksesi tulokset.

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

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

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

Kokeile samaa kolmannen liittymän kanssa (OIKEA ULKO).

Tulokset näyttävät kaiken taulukosta ProdB, kun se näyttää tyhjiä (tunnetaan nimellä NULL) arvoja, joissa ProdA -taulukolla ei ole vastaavaa arvoa. Toistaiseksi tämä vie meidät lähelle lukijan kysymyksessä toivottuja tuloksia.

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

Toimintojen käyttäminen kyselyssä

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

Välitöntä IF (IIF) -toimintoa voidaan käyttää tämän tuloksen tuottamiseen. Toiminto ottaa kolme parametria. Ensimmäinen on ehto, jonka on arvioitava arvoksi Tosi tai Väärä. Toinen parametri on palautettava arvo, jos ehto on tosi, ja kolmas parametri on arvo, joka palautetaan, jos ehto on epätosi.

Tilanteemme täydellinen toimintorakenne näyttää tältä:

IIF(ProdA.ProductID Is Null, 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 tyhjä. Toisin sanoen Null ei ole yhtä kuin Null. Koskaan. Tämän ohittamiseksi tarkistamme arvon käyttämällä Is -avainsanaa.

Olisimme voineet käyttää myös 'Ei ole tyhjää' ja muuttaa tosi- ja vääriä parametrien järjestystä saadaksemme saman tuloksen.

Kun lisäät tämän kyselysuunnittelijaan, sinun on kirjoitettava koko funktio Kenttä: -merkintään. Jotta voit luoda Tulokset -sarakkeen, sinun on käytettävä aliaksia. Voit tehdä tämän esitoiminnolla toiminnolla 'Tulokset:', kuten seuraavassa kuvakaappauksessa näkyy.

Tätä varten vastaava SQL -koodi olisi:

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;

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

tekemistä vadelmapi 2: n kanssa

Tässä näemme jokaisesta merkinnästä, jossa taulukolla ProdA on arvo, joka näkyy Tulokset -sarakkeessa. Jos ProdA -taulukossa ei ole merkintää, ProdB -merkintä näkyy tuloksissa, mitä lukijamme pyysi.

Jos haluat lisätietoja Microsoft Accessin oppimisesta, tutustu Joel Leen artikkeliin How to Learn Microsoft Access: 5 Free Online Resources.

Jaa Jaa Tweet Sähköposti Kannattaako päivittää Windows 11: een?

Windows on suunniteltu uudelleen. Mutta riittääkö se vakuuttamaan sinut siirtymään Windows 10: stä Windows 11: een?

Lue seuraava
Liittyvät aiheet
  • Tuottavuus
  • Kysy asiantuntijoilta
Kirjailijasta Bruce Epper(13 artikkelia julkaistu)

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

Lisää Bruce Epperiltä

tilaa uutiskirjeemme

Liity uutiskirjeeseemme saadaksesi teknisiä vinkkejä, arvosteluja, ilmaisia ​​e -kirjoja ja ainutlaatuisia tarjouksia!

Klikkaa tästä tilataksesi