Jazyk SQL v Accessu: základní koncepty, slovník a syntaxe

Platí pro
Access pro Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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?

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]

Začátek stránky

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:

Karta objektu SQL zobrazující příkaz SELECT

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:

Začátek stránky

Ř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.

Začátek stránky

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.

Začátek stránky

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.

Začátek stránky