Ak chcete načítať údaje z databázy, môžete si údaje vyžiadať pomocou jazyka Structured Query Language alebo SQL. SQL je počítačový jazyk, ktorý sa podobá angličtine, a ktorému rozumejú databázové programy. Každý dotaz, ktorý spustíte, používa na pozadí jazyk SQL.
Pochopenie fungovania jazyka SQL vám pomôže vytvárať lepšie dotazy a môže vám to uľahčiť opravu dotazu, ktorý nevracia požadované výsledky.
Toto je jeden zo súboru článkov o jazyku SQL programu Access. V tomto článku sa popisuje základné používanie jazyka SQL na výber údajov a pomocou príkladov ilustruje syntax SQL.
Obsah článku
Čo je SQL?
SQL je počítačový jazyk na prácu s množinami faktov a vzťahmi medzi nimi. Relačné databázové programy, ako je napríklad Microsoft Office Access, používajú SQL na prácu s údajmi. Na rozdiel od mnohých počítačových jazykov nie je SQL náročný na čítanie a porozumenie, dokonca ani pre začiatočníkov. Podobne ako mnohé počítačové jazyky, SQL je medzinárodný štandard, ktorý je uznávaný organizáciami pre štandardizáciu, ako je napríklad ISO a ANSI.
Jazyk SQL sa používa na popis množiny údajov, ktoré vám pomôžu odpovedať na otázky. Keď používate SQL, musíte použiť správnu syntax. Syntax je množina pravidiel, pomocou ktorých sa prvky jazyka správne kombinujú. Syntax jazyka SQL je založená na syntaxi anglického jazyka a používa množstvo rovnakých prvkov ako syntax jazyka Visual Basic for Applications (VBA).
Napríklad jednoduchý príkaz SQL, ktorý načíta zoznam priezvisk pre kontakty, ktorých meno je Mary, môže vyzerať takto:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Poznámka: SQL sa nepoužíva iba na manipuláciu s údajmi, ale aj na vytváranie a zmenu návrhu databázových objektov, ako sú napríklad tabuľky. Súčasť jazyka SQL, ktorá sa používa na vytváranie a zmenu databázových objektov, sa nazýva jazyk definície údajov (DDL). Táto téma sa nezaoberá jazykom DDL. Ďalšie informácie nájdete v článku Vytvorenie alebo úprava tabuliek alebo indexov pomocou dotazu definujúceho údaje.
Príkaz SELECT
Na popis množiny údajov pomocou SQL sa používa príkaz SELECT. Príkaz SELECT obsahuje podrobný popis množiny údajov, ktorú chcete získať z databázy. Patria medzi ne tieto prvky:
-
Ktoré tabuľky obsahujú údaje.
-
Ako súvisia údaje z rôznych zdrojov.
-
Ktoré polia alebo výpočty vygenerujú údaje.
-
Kritériá, ktoré údaje musia spĺňať, aby boli zahrnuté.
-
Informácia, či sa majú výsledky zoradiť a ako sa majú zoradiť.
Klauzuly jazyka SQL
Podobne ako veta, aj príkaz SQL obsahuje klauzuly. Každá klauzula vykoná funkciu pre príkaz SQL. Niektoré klauzuly sa v príkaze SELECT vyžadujú. V nasledujúcom zozname sú uvedené najbežnejšie SQL klauzuly.
SQL klauzula |
Jej funkcia |
Povinné |
SELECT |
Uvádza polia s relevantnými údajmi. |
Áno |
FROM |
Uvádza tabuľky, ktoré obsahujú polia uvedené v klauzule SELECT. |
Áno |
WHERE |
Uvádza kritériá pre polia, ktoré musí spĺňať každý záznam, ak sa má zahrnúť do výsledkov. |
Nie |
ORDER BY |
Určuje spôsob zoradenia výsledkov. |
Nie |
GROUP BY |
V SQL príkaze obsahujúcom agregačné funkcie uvádza polia, ktoré nie sú sumarizované v rámci klauzuly SELECT. |
Iba ak existujú takéto polia |
HAVING |
V SQL príkaze obsahujúcom agregačné funkcie určuje podmienky vzťahujúce sa na polia, ktoré nie sú sumarizované v rámci príkazu SELECT. |
Nie |
SQL výrazy
Každá SQL klauzula pozostáva z výrazov, čo pripomína prvky reči. V nasledujúcej tabuľke sú uvedené typy SQL výrazov.
SQL výraz |
Porovnateľné s rečou |
Definícia |
Príklad |
identifikátor |
podstatné meno |
Názov, ktorý používate na identifikáciu databázového objektu, ako je napríklad názov poľa. |
Zákazníci.[Telefónne číslo] |
operátor |
sloveso alebo príslovka |
Kľúčové slovo reprezentujúce akciu alebo upravujúce akciu. |
AS |
konštanta |
podstatné meno |
Hodnota, ktorá sa mení, napríklad číslo alebo NULL. |
42 |
výraz |
prídavné meno |
Kombinácia identifikátorov, operátorov, konštánt a funkcií, ktorá sa vyhodnotí ako jedna hodnota. |
>= Produkty.[Jednotková cena] |
Základné klauzuly jazyka SQL: SELECT, FROM a WHERE
SQL príkaz má všeobecný tvar:
SELECT field_1
FROM table_1 WHERE criterion_1 ;
Poznámky:
-
V SQL príkaze Access ignoruje zlomy riadkov. Zvážte však použitie samostatného riadka pre každú klauzulu, čím sa zlepší prehľadnosť vašich SQL príkazov pre vás aj pre ďalších používateľov.
-
Každý príkaz SELECT končí bodkočiarkou (;). Bodkočiarka sa môže zobraziť na konci poslednej klauzuly alebo v samostatnom riadku na konci SQL príkazu.
Príklad v Accesse
Nasledujúci príklad ukazuje, ako môže v Accesse vyzerať jednoduchý SQL príkaz pre jednoduchý výberový dotaz:
1. Klauzula SELECT
2. Klauzula FROM
3. Klauzula WHERE
Tento ukážkový SQL príkaz môžete prečítať takto: „Vybrať údaje, ktoré sú uložené v poliach s názvom E-mailová adresa a Spoločnosť z tabuľky s názvom Kontakty, a konkrétne tie záznamy, v ktorých je v poli Mesto uvedená hodnota Seattle.“
Pozrime sa na príklad postupne na jednotlivé klauzuly, aby sme zistili, ako funguje syntax jazyka SQL.
Klauzula SELECT
SELECT [E-mail Address], Company
Toto je klauzula SELECT. Obsahuje operátor (SELECT), za ktorým nasledujú dva identifikátory ([E-mailová adresa] a Spoločnosť).
Ak identifikátor obsahuje medzery alebo špeciálne znaky (napríklad „E-mailová adresa“), musí byť uzavretý v hranatých zátvorkách.
V klauzule SELECT sa nemusí uvádzať, ktoré tabuľky obsahujú dané polia, a nie je v nej možné špecifikovať žiadne podmienky, ktoré musia údaje spĺňať, aby sa zahrnuli do výberu.
V príkaze SELECT sa klauzula SELECT vždy nachádza pred klauzulou FROM.
Klauzula FROM
FROM Contacts
Toto je klauzula FROM. Pozostáva z operátora (FROM), za ktorým nasleduje identifikátor (Kontakty).
V klauzule FROM nie je uvedený zoznam polí, ktoré chcete vybrať.
Klauzula WHERE
WHERE City="Seattle"
Toto je klauzula WHERE. Obsahuje operátor (WHERE), za ktorým nasleduje výraz (Mesto=„Seattle“).
Poznámka: Na rozdiel od klauzúl SELECT a FROM, klauzula WHERE nie je v príkaze SELECT povinná.
Pomocou klauzúl SELECT, FROM a WHERE môžete vykonať mnoho činností, ktoré umožňuje jazyk SQL. Ďalšie informácie o používaní týchto klauzúl sú uvedené v týchto doplnkových článkoch:
Zoradenie výsledkov: ORDER BY
Podobne ako v Microsoft Exceli, aj Access umožňuje zoraďovať výsledky dotazu v údajovom hárku. V dotaze môžete tiež určiť spôsob zoradenia výsledkov pri spustení dotazu pomocou klauzuly ORDER BY. Ak použijete klauzulu ORDER BY, ide o poslednú klauzulu v príkaze SQL.
Klauzula ORDER BY obsahuje zoznam polí, ktoré chcete použiť na zoradenie. Polia sú v rovnakom poradí, v akom chcete použiť operácie zoradenia.
Predpokladajme napríklad, že chcete svoje výsledky zoradiť v zostupnom poradí podľa hodnoty v poli Spoločnosť, a ak existujú záznamy, ktoré majú rovnakú hodnotu pre pole Spoločnosť, výsledky sa ďalej zoradia podľa hodnoty v poli E-mailová adresa vo vzostupnom poradí. Klauzula ORDER BY by mala vyzerať takto:
ORDER BY Company DESC, [E-mail Address]
Poznámka: Podľa predvoleného nastavenia Access zoraďuje hodnoty vo vzostupnom poradí (A – Z, od najmenšieho po najväčšie). Ak chcete hodnoty zoradiť v zostupnom poradí, použite kľúčové slovo DESC.
Ďalšie informácie o klauzule ORDER BY nájdete v téme Klauzula ORDER BY.
Práca so súhrnnými údajmi: GROUP BY a HAVING
Niekedy sa môže stať, že budete chcieť pracovať so súhrnnými údajmi, ako je napríklad celkový predaj za mesiac alebo najdrahšie položky v zásobách. Na vykonanie tohto kroku použite agregačná funkcia pre pole v klauzule SELECT. Ak napríklad chcete, aby váš dotaz zobrazil počet e-mailových adries pre každú spoločnosť, vaša klauzula SELECT môže vyzerať napríklad takto:
SELECT COUNT([E-mail Address]), Company
Agregačné funkcie, ktoré je možné použiť, závisia od typu údajov, ktoré sa nachádzajú v poli alebo výraze, ktoré chcete použiť. Ďalšie informácie o dostupných agregačných funkciách nájdete v článku Agregačné funkcie SQL.
Určenie polí, ktoré sa nepoužijú v agregačnej funkcii: Klauzula GROUP BY
Keď používate agregačné funkcie, zvyčajne musíte vytvoriť aj klauzulu GROUP BY. V klauzule GROUP BY sa nachádza zoznam všetkých polí, na ktoré sa nevzťahuje agregačná funkcia. Ak sa agregačné funkcie vzťahujú na všetky polia v dotaze, nemusíte vytvárať klauzulu GROUP BY.
Klauzula GROUP BY nasleduje priamo za klauzulou WHERE alebo za klauzulou FROM, ak v príkaze nie je žiadna klauzula WHERE. Klauzula GROUP BY obsahuje polia, ktoré sú uvedené v klauzule SELECT.
Ak budeme pokračovať v predchádzajúcom príklade, v prípade, že sa v klauzule SELECT použije agregačná funkcia na pole [E-mailová adresa], ale nie na pole Spoločnosti, klauzula GROUP BY môže vyzerať takto:
GROUP BY Company
Ďalšie informácie o klauzule GROUP BY nájdete v téme Klauzula GROUP BY.
Obmedzenie agregovaných hodnôt skupinového kritéria: klauzula HAVING
Ak chcete použiť kritériá na obmedzenie výsledkov, ale pole, v ktorom chcete kritériá použiť, sa používa v agregačnej funkcii, klauzulu WHERE nie je možné použiť. Namiesto toho sa používa klauzula HAVING. Klauzula HAVING funguje rovnako ako klauzula WHERE, ale používa sa na súhrnné údaje.
Predpokladajme napríklad, že používate funkciu AVG (ktorý počíta priemernú hodnotu) s prvým poľom v klauzule SELECT:
SELECT COUNT([E-mail Address]), Company
Ak chcete, aby sa v dotaze obmedzili výsledky na základe hodnoty funkcie COUNT, nie je možné použiť kritériá pre toto pole v klauzule WHERE. Namiesto toho vložte kritérium do klauzuly HAVING. Ak napríklad chcete, aby dotaz vrátil iba riadky, ak existujú viaceré e-mailové adresy priradené k spoločnosti, klauzula HAVING môže vyzerať napríklad takto:
HAVING COUNT([E-mail Address])>1
Poznámka: Dotaz môže mať klauzulu WHERE aj klauzulu HAVING. Kritériá pre polia, ktoré nie sú použité v agregačnej funkcii, sa zadajú do klauzuly WHERE a kritériá pre polia, ktoré sa používajú v agregačnej funkcii, sa zadajú do klauzuly HAVING.
Ďalšie informácie o klauzule HAVING nájdete v téme Klauzula HAVING.
Kombinovanie výsledkov dotazu: UNION
Ak si chcete pozrieť všetky údaje, ktoré vráti niekoľko podobných výberových dotazov spolu ako kombinovanú množinu, môžete použiť operátor UNION.
Operátor UNION umožňuje kombinovať dva príkazy SELECT do jedného. Príkazy SELECT, ktoré kombinujete, musia mať rovnaký počet výstupných polí v rovnakom poradí a s rovnakými alebo kompatibilnými typmi údajov. Keď spustíte dotaz, údaje z každej skupiny zodpovedajúcich polí sa skombinujú do jedného výstupného poľa, aby mal výstup dotazu rovnaký počet polí ako každý výberový príkaz.
Poznámka: Na účely zjednocovacieho dotazu sú typy údajov Number a Text kompatibilné.
Ak použijete operátor UNION, môžete tiež určiť, či výsledky dotazu majú obsahovať duplicitné riadky, ak nejaké existujú, a to pomocou kľúčového slova ALL.
Základná syntax SQL pre zjednocovací dotaz, ktorý spája dva príkazy SELECT, vyzerá takto:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
Predpokladajme napríklad, že máte tabuľku s názvom Produkty a ďalšiu tabuľku s názvom Služby. V oboch tabuľkách sa nachádzajú polia s názvom produktu alebo služby, cenou, dostupnosťou záruky alebo ručenia a informáciou o tom, či ponúkate produkt alebo službu výhradne. Hoci tabuľka Produkty obsahuje informácie o záruke a tabuľka Služby informácie o ručení, základné informácie sú rovnaké (čiže to, či sa určitý produkt alebo služba poskytuje s prísľubom kvality). Na skombinovanie štyroch polí z dvoch tabuliek môžete použiť zjednocovací dotaz, napríklad tento:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
Ďalšie informácie o tom ako kombinovať príkazy SELECT pomocou operátora UNION nájdete v téme Skombinovanie výsledkov viacerých výberových dotazov použitím zjednocovacieho dotazu.