Kai norite nuskaityti duomenis iš duomenų bazės, galite pateikti duomenų užklausą naudodami struktūrinių užklausų kalbą (SQL). SQL – tai kompiuterio kalba, kuri labai panaši į anglų kalbą, bet kurią supranta duomenų bazių programos. Kiekvienai vykdomai užklausai naudojama SQL fone.
Supratę, kaip veikia SQL, galėsite lengviau kurti geresnes užklausas ir žinosite, kaip pakoreguoti pageidaujamų rezultatų neteikiančią užklausą.
Tai yra vienas iš straipsnių apie „Access“ SQL rinkinių. Šiame straipsnyje aprašomi pagrindiniai SQL naudojimo principai pasirenkant duomenis ir naudojami pavyzdžiai SQL sintaksei iliustruoti.
Šiame straipsnyje
Kas yra SQL?
SQL yra kompiuterio kalba, skirta faktų rinkiniams ir jų ryšiams tvarkyti. Sąryšinės duomenų bazės programos, pvz., „Microsoft Office Access“, naudoja SQL duomenims tvarkyti. Priešingai nei daugumą kompiuterio kalbų, SQL nesudėtinga skaityti ir suprasti net naujokui. Kaip dauguma kompiuterio kalbų SQL yra tarptautinio standarto kalba, pripažįstama standartus nustatančių institucijų, pvz., ISO ir ANSI.
SQL naudojama duomenų rinkiniams, galintiems padėti atsakyti į klausimus, apibūdinti. Kai naudojate SQL, turite naudoti tinkamą sintaksę. Sintaksė – tai taisyklių, pagal kurias kalbos elementai tinkamai suderinami, rinkinys. SQL sintaksė pagrįsta anglų k. sintakse ir naudoja daug tų pačių elementų kaip „Visual Basic for Applications“ (VBA) sintaksė.
Pavyzdžiui, paprastas SQL sakinys, pagal kurį nuskaitomas kontaktų, kurių vardai Mary, pavardžių sąrašas, gali atrodyti taip:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Pastaba: SQL naudojama ne tik duomenims valdyti, bet ir duomenų bazės objektams, pvz., lentelėms, kurti ir keisti. SQL dalis, naudojama duomenų bazės objektams kurti ir keisti, vadinama duomenų aprašo kalba (DDL). Šioje temoje neįtraukiama DDL. Daugiau informacijos žr. straipsnyje Lentelių arba indeksų kūrimas ar keitimas naudojant duomenų aprašo užklausą.
SELECT sakiniai
Norint aprašyti duomenų rinkinį naudojant SQL, reikia rašyti SELECT sakinį. SELECT sakinys apima visą duomenų, kuriuos norite gauti iš duomenų bazės, rinkinio aprašą. Įtraukiami nurodyti elementai.
-
Kokiose lentelėse pateikiami duomenys.
-
Kaip susiję skirtingų šaltinių duomenys.
-
Kuriuose laukuose ar kokius skaičiavimus atliekant bus pateikti duomenys.
-
Kriterijai, kuriuos duomenys turi atitikti, kad būtų įtraukti.
-
Ar reikia ir kaip reikia rikiuoti rezultatus.
SQL sąlygos
Kaip įprastam sakiniui SQL sakiniui priskiriamos sąlygos. Kiekviena sąlyga atlieka SQL sakinio funkciją. Kai kurios sąlygos būtinos SELECT sakinyje. Toliau pateiktoje lentelėje nurodomos dažniausiai naudojamos SQL sąlygos.
SQL sąlyga |
Kaip ji veikia |
Būtina |
SELECT |
Išvardija laukus, kuriuose yra dominančių duomenų. |
Taip |
FROM |
Išvardija lenteles, kuriose yra laukai, nurodyti sąlygoje SELECT. |
Taip |
WHERE |
Nurodo lauko kriterijus, kuriuos kiekvienas įrašas turi atitikti, kad būtų įtrauktas į rezultatus. |
Ne |
ORDER BY |
Nurodo, kaip rūšiuoti rezultatus. |
Ne |
GROUP BY |
SQL sakinyje, kuriame yra sudėtinių funkcijų, išvardija laukus, kurie nėra apibendrinti sąlygoje SELECT. |
Tik jei yra tokių laukų |
HAVING |
SQL sakinyje, kuriame yra sudėtinių funkcijų, nurodo sąlygas, taikomas laukams, apibendrintiems sakinyje SELECT. |
Ne |
SQL terminai
Kiekvieną SQL sąlygą sudaro terminai, panašūs į kalbos dalis. Toliau pateiktoje lentelėje nurodomi SQL terminų tipai.
SQL terminas |
Panaši kalbos dalis |
Apibrėžimas |
Pavyzdys |
identifikatorius |
daiktavardis |
Pavadinimas, kurį naudojate duomenų bazės objektui identifikuoti, pvz., lauko pavadinimas. |
Klientai.[Telefono numeris] |
operatorius |
veiksmažodis arba prieveiksmis |
Raktinis žodis, vaizduojantis veiksmą arba keičiantis veiksmą. |
KAIP |
konstanta |
daiktavardis |
Nekintanti vertė, pvz., skaičius arba NULL. |
42 |
išraiška |
būdvardis |
Identifikatorių, operatorių, konstantų ir funkcijų derinys, kuris apskaičiuoja vieną vertę. |
>= Produktai.[Vieneto kaina] |
Pagrindinės SQL sąlygos: SELECT, FROM ir WHERE
SQL sakinyje naudojama bendroji forma:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Pastabos:
-
Programa „Access“ nepaiso eilučių lūžių SQL sakinyje. Tačiau apsvarstykite galimybę naudoti atskirą eilutę kiekvienai sąlygai, kad būtų lengviau skaityti SQL sakinius.
-
Visi SELECT sakiniai baigiasi kabliataškiu (;). Kabliataškis gali būti paskutinės sąlygos pabaigoje arba vienas eilutėje, SQL sakinio pabaigoje.
Pavyzdys naudojant „Access“
Toliau parodyta, kaip gali atrodyti paprastos pasirinkimo užklausos SQL sakinys programoje „Access“.
1. Sąlyga SELECT
2. Sąlyga FROM
3. Sąlyga WHERE
Šiame pavyzdyje SQL sakinys nurodo „Pažymėkite duomenis, kurie saugomi laukuose pav. „El. paštas“, „Adresas“ ir „Įmonė“ lentelėje pav. „Kontaktai“, ypač tuos įrašus, kurių lauko „Miestas“ reikšmė yra „Siatlas“.
Pažvelkime į pavyzdyje pateiktą kiekvieną sąlygą, kad sužinotume, kaip veikia SQL sintaksė.
Sąlyga SELECT
SELECT [E-mail Address], Company
Tai select sąlyga. Jį sudaro operatorius (SELECT) ir du identifikatoriai ([El. pašto adresas] ir Įmonė).
Jei identifikatoriuje yra tarpų arba specialiųjų simbolių (pvz., „El. pašto adresas“), jis turi būti rašomas laužtiniuose skliaustuose.
Sąlyga SELECT neturi nurodyti, kuriose lentelėse yra laukai, ir ji negali nurodyti jokių sąlygų, kurias turi atitikti duomenys, kad būtų įtraukti.
Sąlyga SELECT visada rodoma prieš sąlygą FROM SELECT sakinyje.
Sąlyga FROM
FROM Contacts
Tai yra sąlyga FROM. Ją sudaro operatorius (FROM) ir identifikatorius (Kontaktai).
Sąlyga FROM nenurodo laukų, kuriuose reikia pažymėti.
Sąlyga WHERE
WHERE City="Seattle"
Tai yra sąlyga WHERE. Ją sudaro operatorius (WHERE) ir išraiška (Miestas=„Siatlas“).
Pastaba: Priešingai nei sąlygos SELECT ir FROM, sąlyga WHERE nėra būtinas SELECT sakinio elementas.
Galite atlikti daug veiksmų, kuriuos SQL suteikia galimybę atlikti naudojant sąlygas SELECT, FROM ir WHERE. Daugiau informacijos apie šių sąlygų naudojimą pateikiama nurodytuose papildomuose straipsniuose.
Rezultatų rikiavimas: ORDER BY
Kaip „Microsoft Excel“ „Access“ leidžia rikiuoti užklausų rezultatus duomenų lape. Be to, užklausoje galite nurodyti, kaip norite rikiuoti rezultatus, kai vykdoma užklausa, naudodami sąlygą ORDER BY. Jei naudojate sąlygą ORDER BY, tai yra paskutinė SQL sakinio sąlyga.
Sąlyga ORDER BY apima laukų, kuriuos norite naudoti rikiuodami, sąrašą ta pačia tvarka, kuria norite taikyti rikiavimo operacijas.
Pavyzdžiui, tarkime, norite, kad rezultatai pirmiausia būtų surūšiuoti pagal lauko Įmonė reikšmę mažėjimo tvarka, o jei yra įrašų su tokia pačia įmonės reikšme, rūšiuojami toliau pagal reikšmes lauke El. pašto adresas didėjimo tvarka. Sąlyga ORDER BY būtų panaši į šią:
ORDER BY Company DESC, [E-mail Address]
Pastaba: Pagal numatytuosius parametrus „Access“ rikiuoja reikšmes didėjančia tvarka (A–Z, nuo mažiausios iki didžiausios). Reikšmėms rikiuoti mažėjančia tvarka naudokite raktažodį DESC.
Jei reikia daugiau informacijos apie sąlygą ORDER BY, žr. temą Sąlyga ORDER BY.
Apibendrintų duomenų naudojimas: GROUP BY ir HAVING
Kartais gali reikėti naudoti apibendrintus duomenis, pvz., bendrąjį mėnesio pardavimą arba brangiausias prekes. Kad tai atliktumėte, turite pritaikyti agregavimo funkcija lauke sąlygoje SELECT. Pavyzdžiui, jei norite, kad pateikus užklausą būtų rodomas kiekvienos įmonės pateiktų el. pašto adresų skaičius, sąlyga SELECT galėtų būti, kaip nurodyta toliau.
SELECT COUNT([E-mail Address]), Company
Agregavimo funkcijos, kurias galite naudoti, nustatomos atsižvelgiant į lauke esančių duomenų tipą arba norimą naudoti išraišką. Daugiau informacijos apie pasiekiamas agregavimo funkcijas rasite straipsnyje SQL agregavimo funkcijos.
Laukų, kurie nenaudojami agregavimo funkcijoje, nurodymas: sąlyga GROUP BY
Kai naudojate agregavimo funkcijas, paprastai taip pat turite sukurti sąlygą GROUP BY. Sąlyga GROUP BY nurodo visus laukus, kuriems netaikote agregavimo funkcijos. Jei taikote agregavimo funkcijas visiems užklausos laukams, nereikia kurti sąlygos GROUP BY.
Sąlyga GROUP BY pateikiama iškart po sąlyga WHERE arba sąlyga FROM, jei nėra sąlygos WHERE. Sąlyga GROUP BY pateikia laukus, kaip jie rodomi sąlygoje SELECT.
Pvz., toliau nagrinėjant ankstesnį pavyzdį, jei sąlyga SELECT taiko agregavimo funkciją laukui [El. pašto adresas], bet ne „Įmonė“, sąlyga GROUP BY atrodo, kaip nurodyta toliau.
GROUP BY Company
Jei reikia daugiau informacijos apie sąlygą GROUP BY, žr. temą Sąlyga GROUP BY.
Agreguotų reikšmių apribojimas naudojant grupės kriterijus: sąlyga HAVING
Jei norite naudoti kriterijus rezultatams apriboti, bet laukas, kuriam norite taikyti kriterijus, naudojamas agregavimo funkcijoje, negalite naudoti sąlygos WHERE. Vietoj to reikia naudoti sąlygą HAVING. Sąlyga HAVING veikia kaip sąlyga WHERE, bet naudojama agreguotiems duomenims.
Pavyzdžiui, tarkime, kad naudojate funkciją AVG (apskaičiuojančią vidutinę reikšmę) su pirmu lauku sąlygoje SELECT.
SELECT COUNT([E-mail Address]), Company
Jei norite pateikti užklausą, kad būtų apriboti rezultatai pagal tos funkcijos COUNT reikšmę, negalite naudoti kriterijų tame lauke sąlygoje WHERE. Vietoj to reikia pateikti kriterijus sąlygoje HAVING. Pavyzdžiui, jei norite, kad pateikus užklausą būtų pateiktos tik eilutės, jei yra daugiau nei vienas el. pašto adresas, susietas su įmone, sąlyga HAVING gali atrodyti, kaip nurodyta toliau.
HAVING COUNT([E-mail Address])>1
Pastaba: Užklausoje gali būti sąlygos WHERE ir HAVING – laukų, kurie nenaudojami agregavimo funkcijoje, kriterijai įtraukiami į sąlygą WHERE, o laukų, kurie naudojami agregavimo funkcijose, kriterijai įtraukiami į sąlygą HAVING.
Jei reikia daugiau informacijos apie sąlygą HAVING, žr. temą Sąlyga HAVING.
Užklausų rezultatų sujungimas: UNION
Jei norite kartu peržiūrėti visus duomenis, kurie gaunami pateikus kelias panašias pasirinkimo užklausas, kaip sujungtą rinkinį, reikia naudoti operatorių UNION.
Naudodami operatorių UNION galite sujungti du SELECT sakinius į vieną. Sujungiami SELECT sakiniai turi turėti tiek pat išvesties laukų, išdėstytų ta pačia tvarka ir su tokių pačių arba suderinamų tipų duomenimis. Kai vykdote užklausą, duomenys iš kiekvieno atitinkamų laukų rinkinio sujungiami į vieną išvesties lauką, kad užklausos išvestyje būtų tiek pat laukų, kiek ir kiekviename SELECT sakinyje.
Pastaba: „Union“ užklausose skaičių ir teksto duomenų tipai yra suderinami.
Kai naudojate operatorių UNION, taip pat galite nurodyti, ar užklausos rezultatai turėtų apimti pasikartojančias eilutes, jei jų yra, naudodami raktažodį ALL.
Pagrindinė sujungimo užklausos, sujungiančios du SELECT sakinius, SQL sintaksė nurodyta toliau.
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Pvz., tarkime, kad yra lentelė, pavadinta „Produktai“, ir kita lentelė, pavadinta „Paslaugos“. Abiejose lentelėse yra laukų, kuriuose nurodytas produkto ar paslaugos pavadinimas, kaina, garantija arba garantinis laikotarpis ir tai, ar siūlote produktą arba paslaugą išskirtinėmis teisėmis. Nors lentelėje „Produktai“ saugoma garantijos informacija, o lentelėje „Paslaugos“ saugoma garantinio laikotarpio informacija, pagrindinė informacija yra tokia pati (ar užtikrinama konkretaus produkto ar paslaugos kokybė). Keturiems laukams iš dviejų lentelių sujungti galite naudoti sujungimo užklausą, tokią, kaip pateikiama toliau.
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Daugiau informacijos, kaip sujungti SELECT sakinius naudojant operatorių UNION, ieškokite dalyje Kelių pasirinkimo užklausų rezultatų sujungimas naudojant sujungimo užklausą.