Andmebaasist andmete toomiseks tuleb kasutada SQL-keelt (Structured Query Language). SQL on arvutikeel, mis sarnaneb inglise keelega ja mida mõistavad andmebaasiprogrammid. Iga päring, mille käivitate, kasutab vaikimisi SQL-keelt.
SQL-keele toimimise mõistmine aitab teil luua paremaid päringuid ja hõlbustab nende päringute parandamist, mis ei tagasta soovitud andmeid.
See on üks Access SQL-i puudutavatest artiklitest. Selles artiklis kirjeldatakse SQL-i põhikasutust andmete valimiseks ja tuuakse näiteid SQL-süntaksi illustreerimiseks.
Selle artikli teemad
Mis on SQL?
SQL on faktikogumite ja nende omavaheliste seostega töötamiseks mõeldud arvutikeel. Relatsioonandmebaaside programmid (nt Microsoft Office Access) kasutavad SQL-keelt andmetega töötamiseks. Isegi algajal pole SQL-keelt (erinevalt paljudest arvutikeeltest) kuigi raske mõista. Sarnaselt paljude arvutikeeltega on SQL mitme standardimisorgani, nagu ISO ja ANSI poolt tunnustatud rahvusvaheline standard.
SQL-keele abil kirjeldatakse andmekogumeid, mille abil saate vastata küsimustele. SQL-i kasutamisel peate kasutama õiget süntaksit. Süntaks on komplekt reegleid, mida tuleb keele elementide kombineerimisel järgida. SQL-i süntaks põhineb inglise keele süntaksil ja kasutab mitmeid VBA (Visual Basic for Applications) süntaksiga sarnaseid elemente.
Näiteks lihtne SQL-lause, mis toob kõigi nende kontaktisikute perekonnanimed, kelle eesnimi on Mary, võiks olla umbes järgmine:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Märkus.: SQL-i kasutatakse lisaks andmete töötlemisele ka andmebaasiobjektide (nt tabelite) kujunduse muutmiseks. SQL-i osa, mida kasutatakse andmebaasiobjektide muutmiseks, nimetatakse andmekirjelduskeeleks (DDL). Selles teemas DDL-i ei käsitleta. Lisateavet leiate artiklist Tabelite ja registrite loomine ja muutmine andmekirjelduspäringu abil.
SELECT-laused
Andmekogumi kirjeldamiseks SQL-i abil kasutatakse SELECT-lauset. SELECT-lause sisaldab andmebaasist päritava andmekogumi täielikku kirjeldust. Need on muuhulgas järgmised:
-
millistes tabelites andmed paiknevad;
-
millised on seosed erinevatest allikatest pärinevate andmete vahel;
-
millistelt väljadelt või milliste arvutustega andmed saadakse;
-
kriteeriumid, millele kaasatavad andmed peavad vastama;
-
kas ja kuidas tulemeid sortida.
SQL-klauslid
SQL-lause sisaldab klausleid. Iga klausel täidab SQL-lauses kindlat funktsiooni. Mõni klausel on SELECT-lauses kohustuslik. Järgmises tabelis on loetletud levinumad SQL-klauslid.
SQL-klausel |
Toiming |
Nõutav |
SELECT |
Loetleb huvipakkuvaid andmeid sisaldavad väljad. |
Jah |
FROM |
Loetleb tabelid, mis sisaldavad SELECT-klauslis loetletud välju. |
Jah |
WHERE |
Määrab väljakriteeriumid, millele iga tulemitesse kaasatav kirje peab vastama. |
Ei |
ORDER BY |
Määrab tulemite sortimise järjestuse. |
Ei |
GROUP BY |
Loetleb kokkuvõttefunktsioone sisaldavas SQL-lauses väljad, mis pole SELECT-klauslis summeeritud. |
Ainult juhul, kui sellised väljad on olemas |
HAVING |
Määrab kokkuvõttefunktsioone sisaldavas SQL-lauses tingimused, mis rakendatakse SELECT-lauses summeeritud väljadele. |
Ei |
SQL-i terminid
Iga SQL-klauses koosneb terminitest, mida võib võrrelda sõnaliigiga. Järgmises tabelis loetletakse SQL-i terminite tüübid.
SQL-i termin |
Võrreldav sõnaliik |
Definitsioon |
Näide |
identifikaator |
nimisõna |
Nimi, mille abil tuvastatakse andmebaasiobjekt (nt välja nimi). |
Kliendid.[Telefoninumber] |
tehtemärk |
tegu- või määrsõna |
Võtmesõna, mis tähistab toimingut või muudab seda. |
AS |
konstant |
nimisõna |
Muutumatu väärtus (nt arv või väärtus NULL). |
42 |
avaldis |
omadussõna |
Identifikaatorite, tehtemärkide, konstantide ja funktsioonide kombinatsioon, mille tulemiks on üksikväärtus. |
>= Tooted.[Ühiku hind] |
SQL-i põhiklauslid: SELECT, FROM ja WHERE
SQL-lause üldkuju on järgmine:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Märkused:
-
Access ignoreerib SQL-lauses olevaid reapiire. Sellegipoolest on kasulik nii enda kui ka teiste huvides kirjutada SQL-lause loetavuse parandamiseks iga klausel eraldi reale.
-
SELECT-lause lõpeb alati semikooloniga (;). Semikoolon võib olla lause viimase klausli lõpus või omaette real.
Accessi näide
Järgnev näide illustreerib, milline võiks lihtsa valikupäringu SQL-lause Accessis välja näha.
1. SELECT-klausel
2. FROM-klausel
3. WHERE-klausel
Järgmist SQL-lauset tuleb lugeda nii: „Vali tabeli Kontaktid väljadel Meiliaadress ja Ettevõte talletatavad andmed, täpsemalt öeldes need kirjed, kus väljal Linn on väärtus Seattle“.
Analüüsime seda näidet klauslite kaupa, et näha, kuidas SQL-süntaks töötab.
SELECT-klausel
SELECT [E-mail Address], Company
See on klausel SELECT. See koosneb tehtemärgist (SELECT) ja sellele järgnevast kahest identifikaatorist (Meiliaadress ja Ettevõte).
Kui identifikaator sisaldab tühikuid või erimärke (nt „Meiliaadress“), tuleb see ümbritseda nurksulgudega.
SELECT-klausel ei pea määratlema, millistes tabelites väljad asuvad ja see ei saa määratleda andmete kaasamise tingimusi.
SELECT-lauses peab SELECT-klausel alati eelnema FROM-klauslile.
FROM-klausel
FROM Contacts
See on FROM-klausel. See koosneb tehtemärgist (FROM) ja sellele järgnevast identifikaatorist (Kontaktid).
FROM-klausel ei loetle valitavaid välju.
WHERE-klausel
WHERE City="Seattle"
See on WHERE-klausel. See koosneb tehtemärgist (WHERE) ja sellele järgnevast avaldisest (Linn="Seattle").
Märkus.: Erinevalt SELECT- ja FROM-klauslitest pole WHERE-klausel SELECT-lauses nõutav.
Klauslite SELECT, FROM ja WHERE kombineerimisel saate teha paljusid SQL-i abil võimalikke toiminguid. Lisateavet nende klauslite kasutamise kohta leiate järgmistest artiklitest:
Tulemite sortimine: ORDER BY
Sarnaselt Microsoft Exceliga võimaldab Access päringu tulemeid andmelehel sortida. Ent tulemite sortimisviisi saab määrata ka päringu käigus, kasutades selleks klauslit ORDER BY. Klausel ORDER BY on SQL-lause viimane klausel.
Klausliga ORDER BY saate sortimisel kasutatavad väljad loetleda järjestuses, mille alusel soovite sortimistoiminguid rakendada.
Oletagem näiteks, et soovite tulemid sortida esmalt välja Ettevõte järgi laskuvas järjestuses ja (kui leidub kirjeid, millel on välja Ettevõte väärtus sama) seejärel välja Meiliaadress väärtuste järgi tõusvas järjestuses. Teie klausel ORDER BY võiks välja näha umbes järgmine:
ORDER BY Company DESC, [E-mail Address]
Märkus.: Vaikimisi sordib Access väärtused tõusvas järjestuses (A–Z, väikseimast suurimani). Laskuvas järjestuses sortimiseks kasutage võtmesõna DESC.
Lisateavet klausli ORDER BY kohta leiate teemast Klausel ORDER BY.
Töötamine summeeritud andmetega: GROUP BY ja HAVING
Mõnikord on tarvis töötada summeeritud andmetega, näiteks kuu kogumüügiga või lao kõige kallimate kaupadega. Selleks tuleb SELECT-klausli väljale rakendada kokkuvõttefunktsioon. Kui näiteks soovite, et päring näitaks teile iga ettevõtte kohta salvestatud meiliaadresside arvu, võiks teie SELECT-klausel välja näha järgmine:
SELECT COUNT([E-mail Address]), Company
Saadaolevad kokkuvõttefunktsioonid sõltuvad väljal olevate andmete tüübist või avaldisest, mida soovite kasutada. Lisateavet kokkuvõttefunktsioonide kohta leiate artiklist SQL-i kokkuvõttefunktsioonid.
Väljade määratlemine, mida kokkuvõttefunktsioonis ei kasutata: klausel GROUP BY
Kui kasutate kokkuvõttefunktsioone, tuleb enamasti luua ka klausel GROUP BY. GROUP BY loetleb kõik väljad, millele kokkuvõttefunktsioone ei rakendata. Kui rakendate kokkuvõttefunktsioonid kõigile päringu väljadele, pole vaja klauslit GROUP BY luua.
Klausel GROUP BY järgneb vahetult klauslile WHERE või selle puudumisel vahetult klauslile FROM. Klausel GROUP BY loetleb väljad klauslis SELECT kuvamise järjestuses.
Jätkates eelmise näitega, siis näiteks kui SELECT-klausel rakendab kokkuvõttefunktsiooni väljale Meiliaadress, aga mitte väljale Ettevõte, peaks teie klausel GROUP BY olema umbes järgmine:
GROUP BY Company
Lisateavet klausli GROUP BY kohta leiate teemast Klausel GROUP BY.
Kokkuvõtteväärtuste piiramine rühmitamiskriteeriumiga: klausel HAVING
Kui soovite piirata tulemeid kriteeriumide abil, aga välja, millele te neid rakendada soovite, kasutab kokkuvõttefunktsioon, ei saa te klauslit WHERE kasutada. Selle asemel tuleb kasutada klauslit HAVING. Klausli HAVING tööpõhimõte sarnaneb klausliga WHERE, kuid seda kasutatakse liitandmete korral.
Oletagem, et kasutate SELECT-klausli esimese välja jaoks funktsiooni AVG (mis arvutab keskmise väärtuse).
SELECT COUNT([E-mail Address]), Company
Kui soovite piirata tulemeid vastavalt COUNT-funktsiooni väärtusele, ei saa te seda kriteeriumit kasutada WHERE-klauslis. Selle asemel tuleb kriteerium kirjutada klausliga HAVING. Näiteks kui soovite, et päring tooks read ainult siis, kui ettevõttega on seotud mitu meiliaadressi, võiks teie HAVING-klausel välja näha umbes järgmine:
HAVING COUNT([E-mail Address])>1
Märkus.: Päringul võib olla nii WHERE- kui ka HAVING-klausel – nende väljade kriteeriumid, mida kokkuvõttefunktsioonis ei kasutata, esitatakse WHERE-klauslis ja kokkuvõttefunktsioonis kasutatavate väljade kriteeriumid esitatakse HAVING-klauslis.
Lisateavet HAVING-klausli kohta leiate artiklist Klausel HAVING.
Päringutulemite ühendamine: UNION
Kui soovite mitme sarnase valikpäringu tulemeid ühtse hulgana läbi vaadata, saate seda teha tehtemärgi UNION abil.
UNION võimaldab ühendada kaks SELECT-lauset üheks lauseks. Kombineeritavatel SELECT-lausetel peab olema võrdne arv väljundvälju ja need peavad olema samas järjekorras ja sisaldama sama või sarnast tüüpi andmeid. Kuna päringu käivitamisel ühendatakse kummagi tulemi andmed ühel väljundväljal, on päringu väljundil sama arv välju kui igal valikpäringul.
Märkus.: Ühispäringu jaoks on andmetüübid Number ja Tekst ühilduvad.
Tehtemärgi UNION kasutamisel saate võtmesõna ALL abil määrata, kas päringutulemisse tuleks kaasata ka duplikaatread.
Kahte SELECT-lauset ühendava ühispäringu SQL-süntaksi baaskuju on järgmine:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Oletagem näiteks, et teil on tabel nimega Tooted (Products) ja tabel nimega Teenused (Services). Mõlemas tabelis on väljad, mis sisaldavad toote või teenuse nime, hinda, garantiitingimusi ja saadavust ning teavet selle kohta, kas toodet või teenust pakutakse eksklusiivselt. Kuigi toodete tabelis on garantiitingimused ja teenuste tabelis on teave garantiiteenuse kohta, on põhiteave sama (kas tootel või teenusel on kvaliteeditagatis). Nende nelja välja liitmine mõlemast tabelist toimub järgmise ühispäringu abil:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Lisateavet mitme SELECT-lause ühendamise kohta tehtemärgi UNION abil leiate artiklist Mitme valikpäringu ühendamine üheks ühispäringuks.