Když chcete načíst data z databáze, požádejte o data pomocí jazyka SQL (Structured Query Language) neboli SQL. SQL je počítačový jazyk, který se velmi podobá angličtině, ale databázové programy mu rozumí. Každý dotaz, který spustíte, používá na pozadí jazyk SQL.
Když pochopíte, jak SQL funguje, můžete snadněji vytvářet lepší dotazy a snadněji pochopit, jak opravit dotaz, který nevrací požadované výsledky.
Toto je jeden ze sady článků o jazyku SQL v Accessu. Tento článek popisuje základní použití SQL k výběru dat a pomocí příkladů ilustruje syntaxi SQL.
V tomto článku
- Co je SQL?
- Základní klauzule SQL: SELECT, FROM a WHERE
- Řazení výsledků: ORDER BY
- Práce se souhrnnými daty: GROUP BY a HAVING
- Kombinování výsledků dotazu: UNION
Co je SQL?
SQL je počítačový jazyk pro práci s množinami faktů a vztahy mezi nimi. Programy pro relační databáze, jako je systém Microsoft Office Access, používají jazyk SQL pro práci s daty. Na rozdíl od mnoha počítačových jazyků není SQL obtížně čitelný a srozumitelný, a to ani pro nováčka. Stejně jako mnoho jiných počítačových jazyků je SQL mezinárodní standard, který je uznáván standardizačními orgány, jako jsou ISO a ANSI.
Jazyk SQL se používá k popisu množin dat, které vám můžou pomoct odpovědět na otázky. Při použití jazyka SQL musíte použít správnou syntaxi. Syntaxe je sada pravidel, podle kterých se prvky jazyka správně kombinují. Syntaxe SQL je založená na anglické syntaxi a používá mnoho stejných prvků jako syntaxe jazyka VBA (jazyk Visual Basic for Application).
Jednoduchý příkaz SQL, který načte seznam příjmení kontaktů, jejichž křestní jméno je Marie, by mohl vypadat takto:
SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';
Poznámka
Jazyk SQL se nepoužívá jenom k manipulaci s daty, ale také k vytváření a úpravám návrhu databázových objektů, například tabulek. Část jazyka SQL, která se používá k vytváření a pozměňování databázových objektů, se nazývá jazyk DDL (Data-Definition Language). Toto téma se DDL netýká. Další informace najdete v článku Vytvoření nebo úprava tabulek nebo indexů pomocí definičního dotazu.
Příkazy SELECT
Když chcete popsat sadu dat pomocí SQL, napíšete příkaz SELECT. Příkaz SELECT obsahuje úplný popis sady dat, která chcete získat z databáze. Patří k nim:
- Tabulky obsahující data
- Jak spolu souvisí data z různých zdrojů.
- která pole nebo výpočty vytvoří data,
- Kritéria, která musí data splňovat, aby mohla být zahrnuta.
- Zda a jak výsledky seřadit.
Klauzule SQL:
Podobně jako věta má i příkaz SQL klauzule. Každá klauzule provádí funkci příkazu SQL. Některé klauzule jsou v příkazu SELECT povinné. Následující tabulka obsahuje seznam nejběžnějších klauzulí SQL.
| Klauzule SQL | Funkce | Povinné |
|---|---|---|
| SELECT | Obsahuje pole obsahující potřebná data. | Ano |
| FROM | Obsahuje tabulky obsahující pole uvedená v klauzuli SELECT. | Ano |
| WHERE | Určuje kritéria pole, která musí každý záznam splňovat, aby byl zahrnutý do výsledků. | Ne |
| SEŘADIT PODLE | Určuje, jak se mají výsledky seřadit. | Ne |
| GROUP BY | V příkazu SQL, který obsahuje agregační funkce, obsahuje seznam polí, jejichž souhrn není zahrnut v klauzuli SELECT. | Pouze pokud taková pole existují |
| HAVING | V příkazu SQL, který obsahuje agregační funkce, určuje podmínky, které platí pro pole, která jsou shrnuta v příkazu SELECT. | Ne |
Termíny SQL
Každá klauzule SQL se skládá z termínů – srovnatelných se slovními druhy. V následující tabulce jsou uvedeny typy termínů SQL.
| Termín SQL | Srovnatelný slovní druh | Definice | Příklad |
|---|---|---|---|
| Identifikátor | Podstatné jméno | Název, který slouží k identifikaci databázového objektu, například název pole. | Zákazníci. [Telefonní číslo] |
| Operátor | Sloveso nebo příslovce | Klíčové slovo, které představuje akci nebo upravuje akci. | AS |
| Konstanta | Podstatné jméno | Hodnota, která se nemění, například číslo nebo NULL. | 42 |
| Výraz | Přídavné jméno | Kombinace identifikátorů, operátorů, konstant a funkcí, jejímž výsledkem je jediná hodnota. | >= Produkty. [Jednotková cena] |
Základní klauzule SQL: SELECT, FROM a WHERE
Příkaz SQL má obecnou podobu:
SELECT field_1
FROM table_1
WHERE criterion_1
;
Poznámka
- Access v příkazech SQL konce řádků ignoruje. Zvažte ale použití řádku pro každou klauzuli – pomůže vám to zlepšit čitelnost příkazů SQL pro vás i pro ostatní.
- Každý příkaz SELECT končí středníkem (;). Středník se může vyskytovat na konci poslední klauzule nebo na samostatném řádku na konci příkazu SQL.
Příklad v Accessu
Následující část ukazuje, jak může vypadat příkaz SQL pro jednoduchý výběrový dotaz v Accessu:
1. Klauzule SELECT
2. Klauzule FROM
3. Klauzule WHERE
Tento příklad příkazu SQL zní: "Vyberte data, která jsou uložená v polích E-mailová adresa a Společnost z tabulky Kontakty, konkrétně ty záznamy, ve kterých je hodnota pole Město Praha."
Podívejme se na příklad, jednu klauzuli po druhé, abychom viděli, jak funguje syntaxe SQL.
Klauzule SELECT
SELECT [E-mail Address], Company
Jedná se o klauzuli SELECT. Skládá se z operátora (SELECT) následovaného dvěma identifikátory ([E-mailová adresa] a Společnost).
Pokud identifikátor obsahuje mezery nebo speciální znaky (například "E-mailová adresa"), musí být uzavřen v hranatých závorkách.
Klauzule SELECT nemusí určovat, které tabulky pole obsahují, ani nemůže určovat podmínky, které musí data splňovat, aby se mohla zahrnout.
Klauzule SELECT je v příkazu SELECT vždy před klauzulí FROM.
Klauzule FROM
FROM Contacts
Toto je klauzule FROM. Skládá se z operátoru (FROM) následovaného identifikátorem (Contacts).
Klauzule FROM neobsahuje seznam polí, která se mají vybrat.
Klauzule WHERE
WHERE City="Seattle"
Toto je klauzule WHERE. Skládá se z operátoru (WHERE), za kterým následuje výraz (City="Seattle").
Poznámka
Na rozdíl od klauzulí SELECT a FROM není klauzule WHERE povinným prvkem příkazu SELECT.
Spoustu akcí, které vám SQL umožňuje, můžete provádět pomocí klauzulí SELECT, FROM a WHERE. Další informace o používání těchto klauzulí najdete v těchto dalších článcích:
- Jazyk SQL v Accessu: klauzule SELECT
- Jazyk SQL v Accessu: klauzule FROM
- Jazyk SQL v Accessu: Klauzule WHERE
Řazení výsledků: ORDER BY
Aplikace Access podobně jako Microsoft Excel umožňuje řazení výsledků dotazu v datovém listu. V dotazu můžete taky určit, jak chcete výsledky po spuštění dotazu seřadit, a to pomocí klauzule ORDER BY. Pokud použijete klauzuli ORDER BY, jedná se o poslední klauzuli v příkazu SQL.
Klauzule ORDER BY obsahuje seznam polí, která chcete použít pro řazení, ve stejném pořadí, v jakém chcete použít operace řazení.
Předpokládejme třeba, že chcete výsledky seřadit nejdřív podle hodnoty pole Společnost v sestupném pořadí a – pokud existují záznamy se stejnou hodnotou pro společnost – pak seřazené vzestupně podle hodnot v poli E-mailová adresa. Klauzule ORDER BY by vypadala nějak takto:
ORDER BY Company DESC, [E-mail Address]
Poznámka
Ve výchozím nastavení Access řadí hodnoty vzestupně (od A do Z, od nejmenší po největší). Místo toho seřaďte hodnoty sestupně pomocí klíčového slova DESC.
Další informace o klauzuli ORDER BY najdete v tématu Klauzule ORDER BY.
Práce se souhrnnými daty: GROUP BY a HAVING
Někdy chcete pracovat se souhrnnými daty, například s celkovým prodejem za měsíc nebo s nejdražšími položkami na skladových zásobách. Uděláte to tak, že na pole v klauzuli SELECT použijete agregační funkci. Pokud třeba chcete, aby dotaz zobrazil počet e-mailových adres uvedených pro jednotlivé společnosti, mohla by klauzule SELECT vypadat asi takto:
SELECT COUNT([E-mail Address]), Company
Agregační funkce, které lze použít, závisí na typu dat obsažených v poli nebo výrazu, který chcete použít. Další informace o dostupných agregačních funkcích naleznete v článku Agregační funkce SQL.
Určení polí, která se nepoužívají v agregační funkci: Klauzule GROUP BY
Pokud používáte agregační funkce, je obvykle nutné vytvořit také klauzuli GROUP BY. Klauzule GROUP BY obsahuje seznam všech polí, u kterých nepoužíváte agregační funkci. Pokud použijete agregační funkce u všech polí v dotazu, nemusíte klauzuli GROUP BY vytvářet.
Klauzule GROUP BY bezprostředně následuje za klauzulí WHERE nebo klauzulí FROM, pokud žádná klauzule WHERE neexistuje. Klauzule GROUP BY obsahuje seznam polí tak, jak jsou zobrazená v klauzuli SELECT.
Kdybychom například pokračovali v předchozím příkladu, pokud by klauzule SELECT použila agregační funkci na [E-mailová adresa], ale ne na společnost, vypadala by klauzule GROUP BY nějak takto:
GROUP BY Company
Další informace o klauzuli GROUP BY najdete v tématu Klauzule GROUP BY.
Omezení agregovaných hodnot pomocí skupinových kritérií: klauzule HAVING
Pokud chcete omezit výsledky pomocí kritérií, ale pole, na které chcete kritéria použít, je použité v agregační funkci, nemůžete použít klauzuli WHERE. Místo toho použijete klauzuli HAVING. Klauzule HAVING funguje jako klauzule WHERE, ale používá se pro agregovaná data.
Předpokládejme třeba, že použijete funkci AVG (která vypočítá průměrnou hodnotu) s prvním polem klauzule SELECT:
SELECT COUNT([E-mail Address]), Company
Pokud chcete, aby dotaz omezoval výsledky na základě hodnoty této funkce POČET, nemůžete pro toto pole použít kritérium v klauzuli WHERE. Místo toho je třeba kritéria umístit do klauzule HAVING. Pokud třeba chcete, aby dotaz vracel řádky jen v případě, že je s danou společností spojeno víc než jedna e-mailová adresa, mohla by klauzule HAVING vypadat asi takto:
HAVING COUNT([E-mail Address])>1
Poznámka
Dotaz může mít klauzuli WHERE i klauzuli HAVING – kritéria pro pole, která se nepoužívají v agregační funkci, se převedou do klauzule WHERE a kritéria pro pole, která se používají s agregačními funkcemi, se přesunou do klauzule HAVING.
Další informace o klauzuli HAVING najdete v tématu o klauzuli HAVING.
Kombinování výsledků dotazu: UNION
Pokud chcete zobrazit všechna data vrácená několika podobnými výběrovými dotazy dohromady jako kombinovanou sadu, použijete operátor UNION.
Operátor UNION umožňuje zkombinovat dva příkazy SELECT do jednoho. Příkazy SELECT, které kombinujete, musí mít stejný počet výstupních polí, ve stejném pořadí a se stejnými nebo kompatibilními datovými typy. Při spuštění dotazu se data z jednotlivých sad odpovídajících polí zkombinují do jednoho výstupního pole, aby výstup dotazu měl stejný počet polí jako každý z příkazů SELECT.
Poznámka
Pro účely sjednocovacího dotazu jsou kompatibilní datové typy Číslo a Text.
Při použití operátoru UNION můžete pomocí klíčového slova ALL také určit, jestli mají výsledky dotazu obsahovat duplicitní řádky, pokud nějaké existují.
Základní syntaxe jazyka SQL pro sjednocovací dotaz, který kombinuje dva příkazy SELECT, je následující:
SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;
Předpokládejme například, že máte tabulku s názvem Výrobky a druhou s názvem Služby. Obě tabulky obsahují pole, která obsahují název produktu nebo služby, cenu, dostupnost záruky a informace o tom, jestli produkt nebo službu nabízíte výhradně. I když tabulka Produkty obsahuje informace o záruce a tabulka Služby obsahuje informace o záruce, základní informace zůstávají stejné (ať už konkrétní produkt nebo služba obsahuje příslib kvality). Ke sloučení čtyř polí z obou tabulek můžete použít sjednocovací dotaz, jako je například tento:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
Další informace o kombinování příkazů SELECT pomocí operátoru UNION najdete v tématu Kombinování výsledků několika výběrových dotazů pomocí sjednocovacího dotazu.