Toto je jeden ze sady článků o jazyku SQL v Accessu. Tento článek popisuje, jak se používá klauzule FROM, a pomocí příkladů ilustruje různé techniky, které můžete v klauzuli FROM použít.
V příkazu SELECT zadáte zdroje dat v klauzuli FROM. Klauzule FROM může obsahovat také operaci JOIN. Operace JOIN slouží k párování a kombinování dat ze dvou různých zdrojů dat, například ze dvou tabulek nebo z tabulky a dotazu.
Přehled jazyka SQL v Accessu najdete v článku Jazyk SQL v Accessu: základní koncepty, slovník a syntaxe.
V tomto článku
Zadání zdrojů dat
V příkazu SELECT klauzule FROM určuje tabulky nebo dotazy obsahující data, která bude klauzule SELECT používat.
Dejme tomu, že chcete znát telefonní číslo konkrétního zákazníka. Za předpokladu, že tabulka obsahující pole, ve kterém se tato data ukládají, má název tblCustomer, bude klauzule FROM vypadat nějak takto:
FROM tblCustomer
Název můžete uzavřít do hranatých závorek. Pokud název neobsahuje žádné mezery ani speciální znaky (třeba interpunkci), jsou hranaté závorky nepovinné. Pokud název obsahuje mezery nebo speciální znaky, musíte hranaté závorky použít.
Tip: Název, který obsahuje mezery, je srozumitelnější a dokáže vám při návrhu formulářů a sestav ušetřit čas, musíte se ale smířit s tím, že při vytváření příkazů SQL budete hodně psát. Při pojmenování objektů v databázi Accessu byste tuto skutečnost měli vzít do úvahy.
Použití náhradních názvů pro zdroje dat
Když využijete alias tabulky v klauzuli FROM, můžete na tabulku v příkazu SELECT odkazovat pomocí jiného názvu. Alias tabulky je název, který přiřadíte zdroji dat v dotazu, když jako zdroj dat používáte výraz nebo v případě, že chcete, aby se příkaz SQL snadněji zadával a byl čitelnější. To je zvlášť užitečné, pokud je název zdroje dat dlouhý nebo složitý – třeba v případě, že více polí má stejný název v různých tabulkách.
Pokud například chcete vybrat data ze dvou polí se stejným názvem (například ID), přičemž první pole pochází z tabulky tblCustomer a druhé z tabulky tblOrder, mohla by klauzule SELECT vypadat asi takto:
SELECT [tblCustomer].[ID], [tblOrder].[ID]
Když v klauzuli FROM použijete aliasy tabulek, bude se dotaz snadněji zadávat. Klauzule FROM s aliasy tabulek by mohla vypadat asi takto:
FROM [tblCustomer] AS [C], [tblOrder] AS [O]
Pak můžete tyto aliasy tabulky použít v klauzuli SELECT následujícím způsobem:
SELECT [C].[ID], [O].[ID]
Poznámka: Když používáte alias tabulky, můžete na tabulku v příkazu SQL odkazovat pomocí aliasu nebo pomocí úplného názvu tabulky.
Spojení souvisejících dat
Když potřebujete způsob, jak zkombinovat dvojici záznamů ze dvou zdrojů dat do jednoho záznamu ve výsledku dotazu, můžete je spojit. Spojení je operace SQL, která určuje, jak spolu dva zdroje dat souvisí a zda se mají zahrnout data z prvního zdroje v případě, že druhý zdroj neobsahuje žádná odpovídající data.
Pokud chcete zkombinovat informace ze dvou zdrojů dat, provedete operaci spojení u pole, které je pro oba zdroje společné. Když se hodnoty uložené v tomto poli shodují, data ze záznamů se ve výsledcích zkombinují.
Kromě kombinování dat můžete pomocí spojení také určit, zda se mají zahrnout záznamy z jedné nebo druhé tabulky v případě, že v související tabulce neexistuje odpovídající záznam.
Předpokládejme například, že chcete v dotazu použít data ze dvou tabulek: tblCustomer a tblOrder. Obě tabulky mají společné pole, CustomerID, které identifikuje zákazníka. Pro každý záznam v tabulce tblCustomer může v tabulce tblOrder existovat jeden nebo více odpovídajících záznamů a odpovídající hodnoty mohou být určeny hodnotami v poli CustomerID.
Pokud chcete spojit tabulky a v dotazu tak zkombinovat záznamy z obou tabulek (s výjimkou záznamů, pro které v druhé tabulce neexistují odpovídající záznamy), mohla by vaše klauzule FROM vypadat asi takto (pro lepší čitelnost jsme přidali zalomení řádku):
FROM [tblCustomer] INNER JOIN [tblOrder]
ON [tblCustomer].[CustomerID]=[tblOrder].[CustomerID]
V Accessu dochází ke spojení v klauzuli FROM příkazu SELECT. Existují dva typy spojení: vnitřní a vnější. V následujících částech se těmto typům spojení budeme věnovat blíže.
Vnitřní spojení
Jedná se o nejběžnější typ spojení. Když spustíte dotaz s vnitřním spojením, do výsledků dotazu se zahrnou jenom záznamy, pro které v obou spojených tabulkách existují společné hodnoty.
Vnitřní spojení má tuto syntaxi (pro lepší čitelnost jsme přidali zalomení řádku):
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field2
Následující tabulka popisuje různé části operace INNER JOIN.
Část |
Popis |
tabulka1, tabulka2 |
Názvy tabulek, ze kterých jsou slučovány záznamy |
pole1, pole2 |
Názvy slučovaných polí. Nejedná-li se o číselná pole, musí mít obě pole stejný Datový typ a obsahovat stejný druh dat, názvy polí se však nemusejí shodovat. |
operátor_porovnání |
Libovolný relační porovnávací operátor: "=," "<," ">," "<=," ">=," nebo "<>." |
Vnější spojení
Vnější spojení jsou obdobou vnitřních spojení, protože informují dotaz o tom, jak má zkombinovat informace ze dvou zdrojů. Liší se ale v tom, že také určují, zda se mají zahrnout data v případě, že neexistuje společná hodnota. Vnější spojení jsou směrová: můžete zadat, zda se mají zahrnout všechny záznamy z prvního zdroje dat zadaného ve spojení (toto se nazývá levé spojení), nebo zda se mají zahrnout všechny záznamy z druhého zdroje dat ve spojení (toto se nazývá pravé spojení).
Vnější spojení má následující syntaxi:
FROM tabulka1 [ LEFT | RIGHT ] JOIN tabulka2
ON tabulka1.pole1compopr tabulka2.pole2Následující tabulka popisuje různé části operací LEFT JOIN a RIGHT JOIN.
Část |
Popis |
tabulka1, tabulka2 |
Názvy tabulek, ze kterých jsou slučovány záznamy |
pole1, pole2 |
Názvy slučovaných polí. Pole musí mít stejný datový typ a obsahovat stejný druh dat, názvy polí se však nemusejí shodovat. |
operátor_porovnání |
Libovolný relační porovnávací operátor: "=," "<," ">," "<=," ">=," nebo "<>." |
Další informace o spojeních najdete v článku Spojení tabulek a dotazů.