Když chcete načíst data z databáze, požádáte o data pomocí jazyka SQL (Structured Query Language). SQL je jazyk počítače, který se podobá angličtině, ale tento databázovým programům rozumí. Každý dotaz, který spustíte, používá jazyk SQL na pozadí.
Když pochopíte, jak SQL funguje, můžete snadněji vytvářet lepší dotazy a snadněji pochopit, jak opravit dotaz, který nevrací výsledky, které chcete.
Toto je jeden ze sady článků o jazyku SQL v Accessu. Tento článek popisuje základní použití jazyka SQL k výběru dat a pomocí příkladů ilustruje syntaxi SQL.
V tomto článku
Co je jazyk SQL?
JAZYK SQL je počítačový jazyk pro práci se sadami faktů a vztahů mezi nimi. Relační databázové programy, jako je třeba Microsoft Office Access, používají k práci s daty jazyk SQL. Na rozdíl od mnoha počítačových jazyků není jazyk SQL obtížně čitelný a srozumitelný ani pro začátečník. Podobně jako mnoho počítačových jazyků je SQL mezinárodní standard, který rozpoznává standardy, jako jsou ISO a ANSI.
Jazyk SQL se používá k popisu sad dat, které vám můžou pomoct zodpovědět otázky. Při použití jazyka SQL je nutné použít správnou syntaxi. Syntaxe je sada pravidel, podle kterých se prvky jazyka správně kombinují. Syntaxe jazyka SQL je založená na anglické syntaxi a používá mnoho stejných prvků jako syntaxe jazyka VBA (Visual Basic for Applications).
Například jednoduchý příkaz SQL, který načte seznam příjmení kontaktů, jejichž k prvnímu jménu je Marie, by mohl vypadat asi takhle:
SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';
Poznámka: Jazyk SQL se používá nejen k práci s daty, ale také k vytváření a změně návrhu databázových objektů, jako jsou tabulky. Čá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 nevztahuje na DDL. Další informace najdete v článku Vytvoření nebo úprava tabulek nebo indexů pomocí definičního dotazu.
Příkazy SELECT
Pokud chcete popsat sadu dat pomocí jazyka SQL, napíšete příkaz SELECT. Příkaz SELECT obsahuje podrobný popis sady dat, které chcete získat z databáze. Patří k nim:
-
Které tabulky obsahují data.
-
Jaká jsou data z různých zdrojů v souvislosti.
-
Která pole nebo výpočty vytvoří data.
-
Kritéria, která se musí shodovat s daty, aby je bylo možné zahrnout
-
Jestli a jak seřadit výsledky
Klauzule SQL
Stejně jako u věty obsahuje příkaz SQL klauzule. Každá klauzule provede funkci pro příkaz SQL. V příkazu SELECT jsou vyžadovány některé klauzule. V následující tabulce jsou uvedeny nejběžnější klauzule SQL.
Klauzule SQL |
Akce |
Povinný |
SELECT |
Obsahuje pole obsahující data, která vás zajímají. |
Ano |
FROM |
Obsahuje tabulky obsahující pole uvedená v klauzuli SELECT. |
Ano |
WHERE |
Určuje kritéria polí, která musí být splněná v každém záznamu, aby byly zahrnuty do výsledků. |
Ne |
ORDER BY |
Určuje, jak seřadit výsledky. |
Ne |
GROUP BY |
V příkazu SQL, který obsahuje agregační funkce, jsou uvedena pole, která nejsou shrnutá v klauzuli SELECT. |
Pouze v případě, že existují taková pole: |
HAVING |
V příkazu SQL, který obsahuje agregační funkce, určuje podmínky, které platí pro pole, která jsou shrnutá v příkazu SELECT. |
Ne |
Podmínky jazyka SQL
Každá klauzule SQL se skládá z podmínek – srovnatelných s částmi řeči. V následující tabulce jsou uvedené typy termínů jazyka SQL.
Termín SQL |
Srovnatelná část řeči |
Definice |
Příklad |
Identifikátor |
Podstatné jméno |
Název, který použijete k identifikaci databázového objektu, například názvu 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í, která se vyhodnocuje jako jedna hodnota. |
>= Produkty. [Jednotková cena] |
Základní klauzule SQL: SELECT, FROM a WHERE
Příkaz SQL má obecně tento formulář:
SELECT field_1
FROM table_1
WHERE criterion_1
;
Poznámky:
-
Access ignoruje konce řádků v příkazu SQL. U každé klauzule ale zvažte možnost použití řádku, který vám pomůže zlepšit čitelnost příkazů SQL pro vás i pro ostatní uživatele.
-
Každý příkaz SELECT má na konci středník (;). Středník se může zobrazit na konci poslední klauzule nebo na řádku samotném na konci příkazu SQL.
Příklad v Accessu
Následující příklad ukazuje, jak může příkaz SQL jednoduchého výběrového dotazu vypadat v Accessu:
1. Klauzule SELECT
2. Klauzule FROM
3. Klauzule WHERE
Tento příklad příkazu SQL přečte "Select the data that is stored in the fields named E-mail Address and Company from the table named Contacts, specifically those records, in the value of the field City is Seattle."
Podívejme se na příklad, po jedné klauzuli, a podíváme se, jak syntaxe SQL funguje.
Klauzule SELECT
SELECT [E-mail Address], Company
Toto je klauzule SELECT. Skládá se z operátoru (SELECT), za ním dva 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í vytyčovat, které tabulky obsahují pole, a nemůže zadat podmínky, které musí být splněné daty, která se mají zahrnout.
Klauzule SELECT se v příkazu SELECT vždy zobrazí před klauzulí FROM.
Klauzule FROM
FROM Contacts
Toto je klauzule FROM. Skládá se z operátoru (FROM), za ním pak identifikátor (Kontakty).
Klauzule FROM neobsahuje pole, která chcete vybrat.
Klauzule WHERE
WHERE City="Seattle"
Toto je klauzule WHERE. Skládá se z operátoru (WHERE) a za ním výraz (City="Seattle").
Poznámka: Na rozdíl od klauzulí SELECT a FROM není klauzule WHERE povinným prvkem příkazu SELECT.
Pomocí klauzulí SELECT, FROM a WHERE můžete provést řadu akcí, které jazyk SQL umožňuje. Další informace o způsobu použití těchto klauzulí najdete v těchto dalších článcích:
Seřazení výsledků: ORDER BY
Podobně jako v Microsoft Excelu i Access umožňuje řadit výsledky dotazu v datovém listu. Pomocí klauzule ORDER BY můžete v dotazu také určit způsob řazení výsledků při spuštění dotazu. 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é chcete použít operace řazení.
Předpokládejme například, že chcete výsledky nejdřív seřadit podle hodnoty pole Společnost v sestupném pořadí a – pokud existují záznamy se stejnou hodnotou pro společnost – seřadit podle hodnot v poli E-mailová adresa ve vzestupném pořadí. Klauzule ORDER BY by měla vypadat takto:
ORDER BY Company DESC, [E-mail Address]
Poznámka: Access ve výchozím nastavení seřadí hodnoty ve vzestupném pořadí (A až Z, od nejmenšího k největšímu). Místo toho můžete hodnoty seřadit sestupně pomocí klíčového slova DESC.
Další informace o klauzuli ORDER BY najdete v tématu Klauzule ORDER BY.
Práce se souhrny dat: GROUP BY a HAVING
Někdy můžete chtít pracovat se souhrny dat, jako jsou celkový prodej v měsíci nebo ty levnější položky ve skladových zásobách. Pokud to chcete udělat, použijete Agregační funkce u pole v klauzuli SELECT. Pokud například chcete, aby dotaz zobrazovat počet e-mailových adres uvedených pro každou společnost, mohla by klauzule SELECT vypadat asi takto:
SELECT COUNT([E-mail Address]), Company
Agregační funkce, které můžete použít, závisí na typu dat, která jsou 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.
Zadání polí, která se nevyužíují v agregační funkci: Klauzule GROUP BY
Pokud používáte agregační funkce, musíte obvykle také vytvořit klauzuli GROUP BY. Klauzule GROUP BY obsahuje seznam všech polí, u kterých agregační funkci nepoužijete. Pokud použijete agregační funkce na všechna pole v dotazu, klauzuli GROUP BY vytvářet nemusí.
Klauzule GROUP BY bezprostředně následuje za klauzulí WHERE, nebo klauzule FROM, pokud neexistuje klauzule WHERE. Klauzule GROUP BY uvádí pole tak, jak jsou zobrazena v klauzuli SELECT.
Když například budete pokračovat v předchozím příkladu a klauzule SELECT použije agregační funkci pro [E-mailovou adresu], ale ne pro společnost, bude klauzule GROUP BY vypadat takto:
GROUP BY Company
Další informace o klauzuli GROUP BY najdete v tématu Klauzule GROUP BY.
Omezení agregačních hodnot pomocí skupinových kritérií: klauzule HAVING
Pokud chcete použít kritéria k omezení výsledků, ale v agregační funkci se použije pole, na které chcete kritéria použít, nemůžete použít klauzuli WHERE. Místo toho použijte klauzuli HAVING. Klauzule HAVING funguje jako klauzule WHERE, ale používá se pro agregovaná data.
Předpokládejme například, že v prvním poli klauzule SELECT použijete funkci AVG (která vypočítá průměrnou hodnotu):
SELECT COUNT([E-mail Address]), Company
Pokud chcete, aby dotaz omezil výsledky na základě hodnoty této funkce POČET, nemůžete pro toto pole v klauzuli WHERE použít kritéria. Místo toho kritéria dejte do klauzule HAVING. Pokud například chcete, aby dotaz vrátil řádky jenom v případě, že existuje víc e-mailových adres spojených se společností, mohla by klauzule HAVING vypadat asi takto:
HAVING COUNT([E-mail Address])>1
Poznámka: Dotaz může mít klauzuli WHERE a klauzuli HAVING – kritéria pro pole, která nejsou použitá v agregační funkci, jít do klauzule WHERE, a kritéria pro pole, která se používají s agregačními funkcemi, jsou uvedená v klauzuli HAVING.
Další informace o klauzuli HAVING najdete v tématu Klauzule HAVING.
Combining query results: UNION
Pokud chcete zkontrolovat všechna data vrácená několika podobnými výběrových dotazy najednou jako sloučenou sadu, použijte operátor UNION.
Operátor UNION umožňuje zkombinovat dva příkazy SELECT do jednoho. Příkazy SELECT, které slučují, 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. Po spuštění dotazu se data z každé sady 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 sjednoceového dotazu jsou datové typy Číslo a Text kompatibilní.
Když použijete operátor UNION, můžete také určit, jestli mají výsledky dotazu zahrnovat duplicitní řádky (pokud existují) – pomocí klíčového slova ALL.
Základní syntaxe JAZYKa SQL pro sjednoovací 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 jinou tabulku s názvem Služby. Obě tabulky obsahují pole obsahující název produktu nebo služby, cenu, záruku nebo záruku dostupnost a to, jestli produkt nebo službu nabízíte výhradně. I když tabulka Produkty ukládá informace o záruce a tabulka Služby ukládá informace o zárukách, základní informace jsou stejné (ať už je konkrétní produkt nebo služba s příslibem kvality). Ke sloučení čtyř polí ze dvou tabulek můžete použít například sjednoovací dotaz:
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
Další informace o tom, jak zkombinovat příkazy SELECT pomocí operátoru UNION, najdete v tématu Sloučení výsledků několika výběrových dotazů pomocí sjednotovacího dotazu.