Pokud chcete načíst data z databáze, požádejte o data pomocí jazyk SQL (Structured Query Language) nebo SQL. SQL je počítačový jazyk, který se podobá angličtině, ale databázové programy tomu rozumí. Každý dotaz, který spustíte, používá SQL na pozadí.
Pochopení toho, jak SQL funguje, vám může pomoct vytvářet lepší dotazy a usnadnit vám pochopení, 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 používá příklady k ilustraci syntaxe SQL.
V tomto článku
Co je SQL?
SQL je počítačový jazyk pro práci se sadami faktů a vztahy mezi nimi. Aplikace relačních databází, například Microsoft Office Access, používají k práci s daty SQL. Na rozdíl od mnoha počítačových jazyků není sql obtížné číst a pochopit, a to ani pro začátečníky. Stejně jako mnoho počítačových jazyků je i SQL mezinárodní standard, který jsou uznávány normalizačními orgány, jako jsou ISO a ANSI.
Sql používáte k popisu sad dat, které vám pomůžou odpovědět na otázky. Pokud používáte SQL, musíte použít správnou syntaxi. Syntaxe je sada pravidel, podle kterých jsou prvky jazyka správně kombinovány. Syntaxe 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í pro kontakty, jejichž křestní jméno je Mary, může vypadat takto:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Poznámka: SQL se nepoužívá jen pro manipulaci s daty, ale také pro vytváření a změny návrhu databázových objektů, jako jsou tabulky. Část SQL, která se používá k vytváření a změnám databázových objektů, se nazývá jazyk DDL (data-definition language). Toto téma nepopisuje DDL. Další informace najdete v článku Vytvoření nebo úprava tabulek nebo indexů pomocí dotazu definice dat.
Příkazy SELECT
Pokud 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:
-
Jaké tabulky obsahují data.
-
Jak souvisí data z různých zdrojů.
-
Která pole nebo výpočty vytvoří data.
-
Kritéria, která se musí shodovat s daty, aby byla zahrnuta.
-
Zda a jak se mají výsledky seřadit.
Klauzule SQL
Podobně jako věta má příkaz SQL klauzule. Každá klauzule provádí funkci pro příkaz SQL. Některé klauzule jsou vyžadovány v příkazu SELECT. V následující tabulce jsou uvedeny nejběžnější klauzule SQL.
Klauzule SQL |
Akce |
Povinné |
SELECT |
Seznamy pole, která obsahují zajímavá data. |
Ano |
FROM |
Seznamy tabulky, které obsahují pole uvedená v klauzuli SELECT. |
Ano |
WHERE |
Určuje kritéria pole, která musí každý záznam splnit, aby byl zahrnut do výsledků. |
Ne |
ORDER BY |
Určuje, jak se mají výsledky seřadit. |
Ne |
GROUP BY |
V příkazu SQL, který obsahuje agregační funkce, zobrazí seznam polí, která nejsou shrnuta v klauzuli SELECT. |
Pouze v případě, že taková pole existují. |
HAVING |
V příkazu SQL, který obsahuje agregační funkce, určuje podmínky, které platí pro pole souhrnná v příkazu SELECT. |
Ne |
Termíny SQL
Každá klauzule SQL se skládá z termínů , které jsou srovnatelné s slovními částmi. V následující tabulce jsou uvedeny typy termínů SQL.
Termín SQL |
Srovnatelná část řeči |
Definice |
Příklad |
Identifikátor |
Podstatné jméno |
Název, který používáte 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 nezmění, například číslo nebo NULL. |
42 |
Výraz |
Adjektivum |
Kombinace identifikátorů, operátorů, konstant a funkcí, která se vyhodnocuje na jednu hodnotu. |
>= 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ámky:
-
Access ignoruje konce řádků v příkazu SQL. Zvažte ale použití řádku pro každou klauzuli, která vám pomůže zlepšit čitelnost příkazů SQL pro sebe i pro ostatní.
-
Každý příkaz SELECT končí středníkem (;). Středník se může objevit na konci poslední klauzule nebo na řádku samostatně na konci příkazu SQL.
Příklad v Accessu
Následující příklad 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 JAZYKa SQL obsahuje text "Vyberte data uložená v polích s názvy 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 zjistili, jak syntaxe SQL funguje.
Klauzule SELECT
SELECT [E-mail Address], Company
Toto je klauzule SELECT. Skládá se z operátoru (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í říkat, které tabulky obsahují pole, a nemůže určit žádné podmínky, které musí splňovat data, která mají být zahrnuta.
Klauzule SELECT se vždy zobrazí před klauzulí FROM v příkazu SELECT.
Klauzule FROM
FROM Contacts
Toto je klauzule FROM. Skládá se z operátoru (FROM) následovaného identifikátorem (Kontakty).
Klauzule FROM neobsahuje seznam polí, která mají být vybrána.
Klauzule WHERE
WHERE City="Seattle"
Toto je klauzule WHERE. Skládá se z operátoru (WHERE) následovaného výrazem (City="Seattle").
Poznámka: Na rozdíl od klauzulí SELECT a FROM není klauzule WHERE povinným prvkem příkazu SELECT.
Mnoho akcí, které sql umožňuje, můžete provést pomocí klauzulí SELECT, FROM a WHERE. Další informace o tom, jak tyto klauzule používáte, najdete v těchto dalších článcích:
Řazení výsledků: ORDER BY
Podobně jako v Microsoft Excelu vám Access umožňuje řadit výsledky dotazu v datovém listu. Pomocí klauzule ORDER BY můžete také v dotazu určit, jak se mají výsledky při spuštění dotazu seřadit. Pokud použijete klauzuli ORDER BY, je to poslední klauzule v příkazu SQL.
Klauzule ORDER BY obsahuje seznam polí, která chcete použít k řazení, ve stejném pořadí, v jakém chcete použít operace řazení.
Předpokládejme například, že chcete výsledky seřadit jako první podle hodnoty pole Společnost v sestupném pořadí a (pokud existují záznamy se stejnou hodnotou pro Společnost) seřazené vedle hodnot v poli E-mailová adresa ve vzestupném pořadí. Klauzule ORDER BY by vypadala takto:
ORDER BY Company DESC, [E-mail Address]
Poznámka: Ve výchozím nastavení Access seřadí hodnoty ve vzestupném pořadí (A až Z, od nejmenšího po největší). K seřazení hodnot v sestupném pořadí použijte klíčové slovo 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 celkovými prodeji za měsíc nebo nejdražšími položkami v inventáři. Uděláte to tak, že u pole v klauzuli SELECT použijete Agregační funkce. Pokud například chcete, aby dotaz zobrazoval počet e-mailových adres uvedených pro každou společnost, může klauzule SELECT vypadat takto:
SELECT COUNT([E-mail Address]), Company
Agregační funkce, které můžete použít, závisí na typu dat v poli nebo výrazu, který chcete použít. Další informace o dostupných agregačních funkcích najdete v článku Agregační funkce SQL.
Určení polí, která se nepoužívají v agregační funkci: Klauzule GROUP BY
Při použití agregačních funkcí je obvykle nutné vytvořit také klauzuli GROUP BY. Klauzule GROUP BY obsahuje seznam všech polí, na která nepoužíváte agregační funkci. Pokud použijete agregační funkce na všechna pole v dotazu, nemusíte vytvářet klauzuli GROUP BY.
Klauzule GROUP BY bezprostředně následuje za klauzulí WHERE nebo klauzulí FROM, pokud neexistuje žádná klauzule WHERE. Klauzule GROUP BY obsahuje seznam polí tak, jak se zobrazují v klauzuli SELECT.
Pokud například klauzule SELECT použije agregační funkci na [e-mailovou adresu], ale ne na 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í agregovaných hodnot pomocí kritérií skupiny: klauzule HAVING
Pokud chcete použít kritéria k omezení výsledků, ale pole, na které chcete kritéria použít, se používá 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 například, že používáte funkci AVG (která vypočítá průměrnou hodnotu) s prvním polem v klauzuli SELECT:
SELECT COUNT([E-mail Address]), Company
Pokud chcete, aby dotaz omezil výsledky na základě hodnoty funkce COUNT, nemůžete pro toto pole v klauzuli WHERE použít kritéria. Místo toho vložíte kritéria do klauzule HAVING. Pokud například chcete, aby dotaz vracel řádky jenom v případě, že je ke společnosti přidruženo více e-mailových adres, může klauzule HAVING vypadat takto:
HAVING COUNT([E-mail Address])>1
Poznámka: Dotaz může mít klauzuli WHERE a klauzuli HAVING – kritéria pro pole, která se nepoužívají v agregační funkci, přejdou do klauzule WHERE a kritéria pro pole používaná s agregačními funkcemi se nacházejí v klauzuli HAVING.
Další informace o klauzuli HAVING najdete v tématu Klauzule HAVING.
Kombinování výsledků dotazu: UNION
Pokud chcete zkontrolovat všechna data vrácená několika podobnými výběrové dotazy společně jako kombinovanou sadu, použijete operátor UNION.
Operátor UNION umožňuje zkombinovat dva příkazy SELECT do jednoho. Příkazy SELECT, které zkombinujete, 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 každé sady odpovídajících polí zkombinují do jednoho výstupního pole, takže výstup dotazu má stejný počet polí jako každý příkaz select.
Poznámka: Pro účely sjednocovacího dotazu jsou datové typy Číslo a Text kompatibilní.
Při použití operátoru UNION můžete také určit, jestli mají výsledky dotazu obsahovat duplicitní řádky (pokud existují), pomocí klíčového slova ALL.
Základní syntaxe 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 Produkty a jinou tabulku s názvem Služby. Obě tabulky obsahují pole, která obsahují název produktu nebo služby, cenu, záruku nebo dostupnost a informace o tom, jestli produkt nebo službu nabízíte výhradně. I když tabulka Products (Produkty) uchovává informace o záruce a tabulka Services stores (Služby) zaručuje informace, základní informace jsou stejné (bez ohledu na to, jestli konkrétní produkt nebo služba zahrnuje příslib kvality). Ke sloučení čtyř polí ze dvou tabulek můžete použít sjednocovací dotaz, například následující:
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 kombinovat příkazy SELECT pomocí operátoru UNION, najdete v tématu Kombinování výsledků několika výběrových dotazů pomocí sjednocovacího dotazu.