Tietojen hakemiseen tietokannasta käytetään SQL-kieltä (Structured Query Language). SQL on tietokonekieli, joka muistuttaa läheisesti englantia mutta jota tietokoneohjelmat ymmärtävät. Jokainen suorittamasi kysely suoritetaan SQL-kielellä.
Kun ymmärrät SQL:n toimintaa, voit luoda parempia kyselyitä. Se auttaa myös ymmärtämään, miten voit korjata kyselyä, jos se ei palauta haluamiasi tuloksia.
Tämä artikkeli kuuluu Access SQL:ää käsittelevään artikkelisarjaan. Tässä artikkelissa kuvataan SQL:n peruskäyttö tietojen valitsemiseen ja käytetään esimerkkejä SQL-syntaksin esittämiseen.
Artikkelin sisältö
Mikä SQL on?
SQL on tietokonekieli faktajoukkojen ja niiden välisten suhteiden käsittelyyn. Relaatiotietokantaohjelmat, kuten Microsoft Office Access, käsittelevät tietoja SQL:n avulla. Toisin kuin monia tietokonekieliä, SQL:ää ei ole edes vasta-alkajan vaikea lukea ja ymmärtää. Kuten useat tietokonekielet, SQL on kansainvälinen standardi, jonka ovat tunnustaneet eri standardointielimet, kuten ISO ja ANSI.
SQL:n avulla kuvaillaan tietojoukkoja, joiden avulla voit vastata kysymyksiin. Kun käytät SQL:ää, sinun on käytettävä oikeaa syntaksia. Syntaksi on sääntöjoukko, jonka perusteella kielen elementtejä yhdistetään oikein. SQL-syntaksi perustuu englannin kielen syntaksiin ja käyttää monia samoja elementtejä kuin Visual Basic for Applications (VBA) -syntaksi.
Esimerkiksi yksinkertainen SQL-lause, joka hakee nimiluettelon yhteystiedoista, joissa etunimenä on Mary, voi näyttää esimerkiksi tältä:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Huomautus: SQL:ää ei käytetä vain tietojen muokkaamiseen vaan myös tietokantaobjektien kuten taulukoiden rakenteen luomiseen ja muuttamiseen. Tietokantaobjektien luomiseen ja muuttamiseen tarkoitettua SQL:n osaa kutsutaan DDL:ksi (data definition language). Tässä artikkelissa ei käsitellä DDL:ää. Lisätietoja on artikkelissa Taulukoiden tai indeksien luominen tai muokkaaminen määrityskyselyn avulla.
SELECT-lausekkeet
SQL:n SELECT-lausekkeella kuvaillaan tietojoukko. SELECT-komento sisältää täydellisen kuvauksen tietojoukosta, jonka haluat hakea tietokannasta. Tämä sisältää seuraavat:
-
Mitkä taulukot sisältävät halutut tiedot.
-
Miten muissa lähteissä olevat tiedot liittyvät näihin tietoihin.
-
Mistä kentistä tai millä laskutoimituksilla tiedot saadaan.
-
Ehdot, jotka tiedoilta edellytetään, jotta ne otetaan mukaan tuloksiin.
-
Tieto siitä, lajitellaanko tiedot vai ei.
SQL-lauseet
Kuten virkkeissä, myös SQL-lauseissa on lausekkeita. Kukin lauseke suorittaa SQL-lauseen jonkin toiminnon. SELECT-lause edellyttää tiettyjä lausekkeita. Seuraavassa taulukossa on lueteltu yleisimmät SQL-lausekkeet.
SQL-lause |
Kuvaus |
Pakollinen |
SELECT |
Määrittää kentät, joissa on halutut tiedot. |
Kyllä |
FROM |
Määrittää taulukot, joissa on SELECT-lauseessa mainitut kentät. |
Kyllä |
WHERE |
Määrittää kenttätason ehdot, jotka kunkin tulokseen sisällytettävän tietueen on täytettävä. |
Ei |
ORDER BY |
Määrittää tulosten lajittelutavan. |
Ei |
GROUP BY |
Määrittää koostefunktioita sisältävässä SQL-komennossa kentät, joista SELECT-lause ei tee yhteenvetoa. |
Vain jos tällaisia kenttiä on. |
HAVING |
Määrittää koostefunktioita sisältävässä SQL-lauseessa ehdot, jotka liittyvät kenttiin, joista SELECT-lause tekee yhteenvedon. |
Ei |
SQL-ehdot
Kukin SQL-lause koostuu ehdoista, joita voi verrata puheen osiin. Seuraavassa taulukossa esitellään SQL-ehtojen tyypit.
SQL-ehto |
Puheen verrattava osa |
Määritelmä |
Esimerkki |
tunniste |
substantiivi |
Nimi, jonka avulla tunnistetaan tietokantaobjekti, kuten kentän nimi. |
Asiakkaat.[Puhelinnumero] |
operaattori |
verbi tai adverbi |
Avainsana, joka edustaa toimintoa tai tarkentaa sitä. |
AS |
vakio |
substantiivi |
Muuttumaton arvo, kuten luku tai NULL. |
42 |
ilmaus |
adjektiivi |
Tunnisteiden, operaattoreiden, vakioiden ja funktioiden yhdistelmä, joka tuottaa yhden arvon. |
>= Tuotteet.[Yksikköhinta] |
Tavallisia SQL-lausekkeita: SELECT, FROM ja WHERE
SQL-lauseen yleinen muoto:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Huomautukset:
-
Access jättää huomioimatta SQL-lauseen rivinvaihdot. SQL-lause kannattaa kuitenkin kirjoittaa yhdelle riville, koska se helpottaa lauseen lukemista itsesi ja muidenkin kannalta.
-
Jokainen SELECT-lauseke päättyy puolipisteeseen (;). Puolipiste voi olla joko viimeisen lauseen lopussa tai omalla rivillään SQL-lausekkeen lopussa.
Esimerkki Accessissa
Seuraavassa kuvataan, miltä yksinkertaisen valintakyselyn SQL-lause voi näyttää Accessissa:
1. SELECT-lauseke
2. FROM-lauseke
3. WHERE-lauseke
Tämä SQL-esimerkkilause tarkoittaa ”Valitse tiedot, jotka on tallennettu kenttiin nimeltä E-mail Address ja Company taulusta nimeltä Contacts, ja erityisesti ne tietueet, joissa City-kentän arvo on Seattle.”
Katsotaan esimerkkiä lauseke kerrallaan, jotta näet, miten SQL-syntaksi toimii.
SELECT-lauseke
SELECT [E-mail Address], Company
Tämä on SELECT-lauseke. Se koostuu operaattorista (SELECT), jonka perässä on kaksi tunnistetta ([E-mail Address] ja Company).
Jos tunniste sisältää välilyöntejä tai erikoismerkkejä (kuten ”E-mail Address”), se on kirjoitettava hakasulkeisiin.
SELECT-lausekkeessa ei tarvitse määrittää, mitkä taulukot sisältävät kentät, eikä siinä voida määrittää ehtoja, jotka tietojen on täytettävä, jotta ne otetaan mukaan tuloksiin.
SELECT-lauseke on SELECT-lauseessa aina ennen FROM-lauseketta.
FROM-lauseke
FROM Contacts
Tämä on FROM-lauseke. Se koostuu operaattorista (FROM), jonka perässä on tunniste (Contacts).
FROM-lausekkeessa ei luetella valittavia kenttiä.
WHERE-lauseke
WHERE City="Seattle"
Tämä on WHERE-lauseke. Se koostuu operaattorista (WHERE), jonka perässä on lauseke (City=”Seattle”).
Huomautus: Toisin kuin SELECT- ja FROM-lausekkeet, WHERE-lauseke ei ole SELECT-lauseen pakollinen osa.
Voit suorittaa useita SQL:n mahdollistamia toimintoja käyttämällä SELECT-, FROM- ja WHERE-lausekkeita. Lisätietoja näiden lausekkeiden käyttämisestä on näissä lisäartikkeleissa:
Tulosten lajittelu: ORDER BY
Kuten Microsoft Excelissä, myös Accessissa voit lajitella kyselytulokset taulukkonäkymässä. ORDER BY -lausekkeella voit lisäksi määrittää kyselyssä sen, kuinka haluat lajitella tulokset, kun kysely suoritetaan. Jos käytät ORDER BY -lauseketta, se sijoitetaan SQL-lauseen viimeiseksi lausekkeeksi.
ORDER BY -lauseke luettelon kentistä, joiden perusteella haluat lajittelun tehdä. Kentät kirjoitetaan siihen järjestykseen, jossa lajittelu halutaan tehdä.
Oletetaan, että haluat lajitella tulokset ensin Company-kentän mukaan laskevassa järjestyksessä ja sen jälkeen E-mail Address -kentän mukaan nousevassa järjestyksessä, jos Company-kentän tietyllä arvolla on useita tuloksia. ORDER BY -lausekkeesi näyttäisi silloin seuraavankaltaiselta:
ORDER BY Company DESC, [E-mail Address]
Huomautus: Oletusarvon mukaan Access lajittelee arvot nousevaan järjestykseen (A–Z, pienimmästä suurimpaan). Käytä DESC-avainsanaa, jos haluat sen sijaan lajitella arvot laskevassa järjestyksessä.
Saat lisätietoja ORDER BY -lausekkeesta ohjeaiheesta ORDER BY -lauseke.
Yhteenvedettyjen tietojen käsittely: GROUP BY ja HAVING
Joskus tarvitaan yhteenvetotietoja, kuten kuukauden kokonaismyynti tai varaston kalliimmat nimikkeet. Voit tehdä tämän käyttämällä KOOSTE-funktio-kenttää SELECT-lausekkeessa. Jos haluat esimerkiksi kyselyn, joka näyttää kunkin yrityksen sähköpostiosoitteiden yhteenlasketun määrän, SELECT-lausekkeesi voisi näyttää tältä:
SELECT COUNT([E-mail Address]), Company
Koostefunktioita on käytettävissä kentän tietotyypin tai käytettävän lauseen mukaan. Lisätietoja käytettävissä olevista koostefunktioita on artikkelissa SQL-koostefunktiot.
Koostefunktiosta pois jätettävien kenttien määrittäminen: GROUP BY -lauseke
Kun käytät koostefunktioita, sinun on yleensä luotava myös GROUP BY -lauseke. GROUP BY -lausekkeessa luetellaan kaikki kentät, joita ei oteta mukaan koostefunktioon. Jos käytät koostefunktiota kyselyn kaikille kentille, sinun ei tarvitse luoda GROUP BY -lauseketta.
GROUP BY -lauseke kirjoitetaan heti WHERE-lausekkeen perään tai FROM-lausekkeen perään, jos WHERE-lauseketta ei ole. GROUP BY -lausekkeessa luetellaan kentät samalla tavalla kuin ne ovat SELECT-lausekkeessa.
Jatketaan käyttäen edellistä esimerkkiä. Jos SELECT-lausekkeessasi käytetään koostefunktiota [E-mail Address] -kenttään mutta ei Company-kenttään, GROUP BY -lausekkeesi muistuttaisi seuraavaa:
GROUP BY Company
Saat lisätietoja GROUP BY -lausekkeesta ohjeaiheesta GROUP BY -lauseke.
Koostearvojen rajoittaminen käyttämällä ryhmän ehtoja: WHERE-lauseke
Jos haluat rajoittaa tuloksia ehtojen avulla, mutta kenttää, johon haluat käyttää ehtoja, käytetään koostefunktiossa, et voi käyttää WHERE-lauseketta. Sen sijaan sinun pitää käyttää HAVING-lauseketta. HAVING-lauseke toimii kuten WHERE-lauseke, mutta sitä käytetään kootuille tiedoille.
Oletetaan, että käytät AVG-funktiota (joka laskee keskiarvon) SELECT-lausekkeen ensimmäisessä kentässä:
SELECT COUNT([E-mail Address]), Company
Jos haluat, että kysely rajoittaa tuloksia kyseisen COUNT-funktion arvon perusteella, et voi käyttää ehtoja tälle kentälle WHERE-lausekkeessa. Kirjoita ehdot sen sijaan HAVING-lausekkeeseen. Jos esimerkiksi haluat kyselyn palauttavan rivejä, jos yritykselle on määritetty enemmän kuin yksi sähköpostiosoite, HAVING-lauseke voisi näyttää seuraavalta:
HAVING COUNT([E-mail Address])>1
Huomautus: Kyselyssä voi olla WHERE-lauseke ja HAVING-lauseke. Tällöin ehdot kentille, joita ei käytetä koostefunktiossa, sijoitetaan WHERE-lausekkeeseen, ja koostefunktiossa käytetyt kentät sijoitetaan HAVING-lausekkeeseen.
Saat lisätietoja HAVING-lausekkeesta ohjeaiheesta HAVING-lauseke.
Kyselytulosten yhdistäminen: UNION
Jos haluat tarkastella kaikkia useiden samanlaisten SELECT-kyselyiden palauttamia tietoja yhdistettynä joukkona, käytä UNION-operaattoria.
UNION-operaattorin avulla voit yhdistää kaksi SELECT-lausetta yhdeksi lausekkeeksi. Yhdistettävien SELECT-lausekkeiden tuloskenttien määrän on oltava samassa järjestyksessä ja tietotyyppien on oltava samat tai yhteensopivat. Kun suoritat kyselyn, kunkin vastaavan kenttäjoukon tiedot yhdistetään yhdeksi tuloskentäksi, jotta kyselyn tuloste sisältää saman määrän kenttiä kuin kussakin valintalausekkeessa.
Huomautus: Yhdistämiskyselyssä Luku- ja Teksti-tietotyypit ovat yhteensopivia.
Kun käytät UNION-operaattoria, voit ALL-avainsanan avulla määrittää, tuleeko kyselytuloksissa olla rivien mahdollisia kaksoiskappaleita.
Kaksi SELECT-lausetta yhdistävän yhdistämiskyselyn SQL-perussyntaksi on seuraava:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Oletetaan esimerkiksi, että sinulla on Products- ja Services-nimiset taulukot. Kummassakin taulukossa on kentät, joissa on tuotteen tai palvelun nimi, hinta, takuuaika ja tieto tuotteen tai palvelun tarjoamisesta yksinoikeudella. Vaikka Products-taulukko tallentaa tuotetakuutiedot ja Services-taulukko tallentaa palvelutakuutiedot, niiden tiedot vastaavat perustaltaan toisiaan (sisältyykö tiettyyn tuotteeseen tai palveluun laatulupaus vai ei). Nämä kummankin taulukon neljä kenttää voidaan yhdistää esimerkiksi seuraavanlaisella yhdistämiskyselyllä:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Saat lisätietoja SELECT-lauseiden yhdistämisestä UNION-operaattorilla artikkelista Useiden valintakyselyiden tulosten yhdistäminen yhdistämiskyselyn avulla.