Někdy je proces vytváření a používání dotazů v Accessu jednoduchou záležitostí výběru polí z tabulky, případně použití některých kritérií a následného zobrazení výsledků. Co když jsou ale potřebná data rozložená ve více než jedné tabulce, jak je tomu častěji? Naštěstí můžete vytvořit dotaz, který kombinuje informace z více zdrojů. Toto téma zkoumá některé scénáře, ve kterých načítáte data z více než jedné tabulky, a ukazuje, jak to udělat.
Co chcete udělat?
Vylepšení informací v dotazu pomocí dat z tabulky v relaci
Můžou nastat situace, kdy dotaz, který je založený na jedné tabulce, sice poskytuje požadované informace, ale načtení dat z jiné tabulky by pomohlo k tomu, aby výsledky dotazu byly ještě jasnější a užitečnější. Předpokládejme například, že ve výsledcích dotazu se zobrazuje seznam kódů zaměstnanců. Uvědomujete si, že by bylo užitečnější, kdyby se ve výsledcích zobrazovalo jméno zaměstnance, avšak jména zaměstnanců se nacházejí v jiné tabulce. Pokud chcete ve výsledcích dotazu zobrazovat jména zaměstnanců, je nutné zahrnout do dotazu obě tabulky.
Vytvoření dotazu z primární tabulky a tabulky v relaci pomocí Průvodce dotazem
-
Ujistěte se, že dané tabulky mají v okně Relace definovanou relaci.
Jak na to?
-
Na kartě Databázové nástroje klikněte ve skupině Zobrazit či skrýt na Relace.
-
Na kartě Návrh ve skupině Relace klikněte na položku Všechny relace.
-
Identifikujte tabulky, které by měly mít definovanou relaci.
-
Pokud se tyto tabulky zobrazují v okně Relace, zkontrolujte, jestli je relace už definovaná.
Relace se zobrazuje jako čára spojující dvě tabulky se souvisejícími poli. Poklikáním na čáru relace zobrazíte, která pole v tabulkách jsou touto relací propojená.
-
Pokud se tyto tabulky nezobrazují v okně Relace, je nutné je přidat.
Na kartě Návrh klikněte ve skupině Zobrazit či skrýt na Názvy tabulek.
Poklikejte na každou z tabulek, které chcete zobrazit, a pak klikněte na Zavřít.
-
-
Pokud relaci mezi tabulkami nenajdete, vytvořte ji přetažením pole z jedné tabulky na pole v druhé tabulce. Pole, na jejichž základě vytváříte relaci mezi tabulkami, musí mít stejné datové typy.
Poznámka: Mezi polem s datovým typem Automatické číslo a polem s datovým typem Číslo je možné vytvořit relaci, pokud má dané pole velikost pro dlouhé celé číslo. K této situaci dochází často při vytváření relace 1:N.
Zobrazí se dialogové okno Upravit relace.
-
Klikněte na Vytvořit, aby se daná relace vytvořila.
Další informace o dostupných možnostech při vytváření relace najdete v článku Vytvoření, úprava a odstranění relace.
-
Zavřete okno Relace.
-
-
Na kartě Vytvoření klikněte ve skupině Dotazy na tlačítko Průvodce dotazem.
-
V dialogovém okně Nový dotaz klikněte na Průvodce jednoduchým dotazem a potom na OK.
-
V poli se seznamem Tabulky nebo dotazy klikněte na tabulku obsahující základní informace, které chcete do dotazu zahrnout.
-
V seznamu Dostupná pole klikněte na první pole, které chcete do dotazu zahrnout, a pak kliknutím na tlačítko s jednou šipkou doprava přesuňte dané pole do seznamu Vybraná pole. Proveďte stejný postup pro všechna další pole z této tabulky, která chcete do dotazu zahrnout. Může se jednat o pole, která se mají vrátit ve výstupu dotazu, nebo o pole, pomocí kterých chcete omezit počet řádků ve výstupu na základě kritérií.
-
V poli se seznamem Tabulky nebo dotazy klikněte na tabulku obsahující data v relaci, pomocí kterých chcete výsledky dotazu vylepšit.
-
Pole, pomocí kterých chcete výsledky dotazu vylepšit, přidejte do seznamu Vybraná pole a pak klikněte na Další.
-
V části Chcete použít podrobný nebo souhrnný dotaz klikněte na Podrobný nebo na Souhrnný.
Pokud nechcete, aby dotaz prováděl agregační funkce (Sum, Avg, Min, Max, Count, StDev nebo Var), zvolte podrobný dotaz. Pokud chcete, aby dotaz prováděl nějakou agregační funkci, zvolte souhrnný dotaz. Po provedení volby klikněte na Další.
-
Kliknutím na Dokončit zobrazte výsledky.
Příklad, který používá ukázkovou databázi Northwind
V následujícím příkladu pomocí Průvodce dotazem vytvoříte dotaz, který zobrazí seznam objednávek, cenu dopravy pro každou objednávku a jméno zaměstnance, který každou objednávku zpracoval.
Poznámka: V tomto příkladu se provádějí úpravy ukázkové databáze Northwind. Proto může být užitečné vytvořit si záložní kopii ukázkové databáze Northwind a pro tento příklad použít tuto záložní kopii.
Vytvoření dotazu pomocí Průvodce dotazem
-
Otevřete ukázkovou databázi Northwind. Zavřete formulář pro přihlášení.
-
Na kartě Vytvoření klikněte ve skupině Dotazy na tlačítko Průvodce dotazem.
-
V dialogovém okně Nový dotaz klikněte na Průvodce jednoduchým dotazem a potom na OK.
-
V poli se seznamem Tabulky nebo dotazy klikněte na Tabulka: Objednávky.
-
V seznamu Dostupná pole poklikejte na Kód objednávky, aby se toto pole přesunulo do seznamu Vybraná pole. Poklikejte na Cena dopravy, aby se toto pole přesunulo do seznamu Vybraná pole.
-
V poli se seznamem Tabulky nebo dotazy klikněte na Tabulka: Zaměstnanci.
-
V seznamu Dostupná pole poklikejte na Jméno, aby se toto pole přesunulo do seznamu Vybraná pole. Poklikejte na Příjmení, aby se toto pole přesunulo do seznamu Vybraná pole. Klikněte na Další.
-
Vytváříte seznam všech objednávek, a proto použijete podrobný dotaz. Pokud shrnujete cenu dopravy podle jednotlivých zaměstnanců nebo provádíte nějakou jinou agregační funkci, použijete souhrnný dotaz. Klikněte na Podrobný (zobrazí všechna pole všech záznamů) a pak klikněte na Další.
-
Kliknutím na Dokončit zobrazte výsledky.
Dotaz vrátí seznam objednávek, přičemž u každé z nich bude cena dopravy a jméno a příjmení zaměstnance, který ji zpracoval.
Propojení dat ve dvou tabulkách pomocí jejich relací s třetí tabulkou
Data ze dvou tabulek jsou často vzájemně v relaci prostřednictvím třetí tabulky. K tomu obvykle dochází proto, že data mezi prvními dvěma tabulkami jsou v relaci M:N. Při návrhu databáze bývá často užitečné rozdělit relaci M:N mezi dvěma tabulkami na dvě relace 1:N, které zahrnují tři tabulky. Uděláte to tak, že vytvoříte třetí tabulku (označuje se spojovací tabulka nebo tabulka relace), která bude mít primární klíč a cizí klíč pro obě další tabulky. Pak se vytvoří relace M:N mezi každým cizím klíčem ve spojovací tabulce a odpovídajícím primárním klíčem v jedné ze dvou dalších tabulek. V těchto případech je nutné do dotazu zahrnout všechny tři tabulky, a to i když chcete načítat data jenom ze dvou z nich.
Vytvoření výběrového dotazu pomocí tabulek s relací M:N
-
Na kartě Vytvoření klikněte ve skupině Dotazy na Návrh dotazu.
-
Poklikejte na dvě tabulky obsahující data, která chcete zahrnout do dotazu, a také na tabulku spojení, která je propojuje, a potom klikněte na Zavřít.
Všechny tři tabulky se zobrazí v pracovním prostoru pro návrh dotazu, přičemž příslušná pole jsou propojená.
-
Poklikejte na každé pole, které chcete použít ve výsledcích dotazu. Jednotlivá pole se pak zobrazí v návrhové mřížce dotazu.
-
V návrhové mřížce dotazu zadejte kritéria pro jednotlivá pole na řádek Kritéria. Pokud chcete kritérium pro pole použít, ale nechcete dané pole zobrazit ve výsledcích dotazu, zrušte zaškrtnutí v řádku Zobrazit pro dané pole.
-
Pokud chcete řadit výsledky podle hodnot v některém poli, klikněte v návrhové mřížce dotazu v řádku Řadit pro dané pole na možnost Vzestupně nebo Sestupně (podle toho, jak chcete záznamy řadit).
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Access zobrazí výstup dotazu v zobrazení Datový list.
Příklad, který používá ukázkovou databázi Northwind
Poznámka: V tomto příkladu se provádějí úpravy ukázkové databáze Northwind. Proto může být užitečné vytvořit si záložní kopii ukázkové databáze Northwind a pro tento příklad použít tuto záložní kopii.
Předpokládejme, že máte novou obchodní příležitost: dodavatel z Rio de Janeira našel váš web a chce s vámi navázat obchodní vztahy. Firma ale zatím působí jenom v Riu a v okolí São Paula. Dodává všechny kategorie potravinových produktů, se kterými obchodujete. Jde o poměrně velkou firmu, která od vás žádá příslib, že jim můžete nabídnout přístup k dostatečně velkým potenciálním objemům prodeje, aby to dávalo smysl: objem prodeje aspoň 20 000,00 BRL ročně (přibližně 9 300,00 USD). Můžete jim nabídnout trh, který vyžadují?
Data potřebná k odpovědi na tento dotaz se nacházejí na dvou místech: v tabulce Zákazníci a v tabulce Rozpis objednávek. Tyto tabulky vzájemně propojuje tabulka Objednávky. Relace mezi tabulkami jsou už definované. Každá objednávka v tabulce Objednávky může mít jenom jednoho zákazníka, který je v relaci s tabulkou Zákazníci prostřednictvím pole Kód zákazníka. Každý záznam v tabulce Rozpis objednávek je v relaci jenom s jednou objednávkou v tabulce Objednávky, a to prostřednictvím pole Kód objednávky. Takže daný zákazník může mít mnoho objednávek, přičemž každá z nich může mít mnoho rozpisů.
V tomto příkladu vytvoříte křížový dotaz, který zobrazuje celkové roční objemy prodeje ve městech Rio de Janeiro a São Paulo.
Vytvoření dotazu v návrhovém zobrazení
-
Otevřete databázi Northwind. Zavřete formulář pro přihlášení.
-
Na kartě Vytvoření klikněte ve skupině Dotazy na Návrh dotazu.
-
Poklikejte na Zákazníci, Objednávky a potomNa Podrobnosti objednávky.
Všechny tři tabulky se zobrazí v pracovním prostoru pro návrh dotazu.
-
V tabulce Zákazníci poklikejte na pole Město. Přidáte je tak do návrhové mřížky dotazu.
-
V návrhové mřížce dotazu zadejte ve sloupci Město na řádek Kritéria řetězec In ("Rio de Janeiro","São Paulo"). Takto se do dotazu zahrnou jenom záznamy, ve kterých se zákazník nachází v jednom z těchto dvou měst.
-
V tabulce Rozpis objednávek poklikejte na pole Datum přidělení a Cena za kus.
Pole se přidají do návrhové mřížky dotazu.
-
V návrhové mřížce dotazu ve sloupci Datum přidělení vyberte řádek Pole. Nahraďte [Datum přidělení] řetězcem Rok: Format([Datum přidělení],"rrrr"). Tím se vytvoří alias pole Rok, který vám umožňuje použít jenom část hodnoty z pole Datum přidělení, která udává rok.
-
V návrhové mřížce dotazu ve sloupci Cena za kus vyberte řádek Pole. Nahraďte [Cena za kus] řetězcem Objem prodeje: [Rozpis objednávek].[Cena za kus]*[Množství]-[Rozpis objednávek].[Cena za kus]*[Množství]*[Sleva]. Tím se vytvoří alias pole Objem prodeje, který vypočítá objem prodeje pro každý záznam.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na položku Křížový.
V návrhové mřížce dotazu se zobrazí dva nové řádky Souhrn a Křížová tabulka.
-
V návrhové mřížce dotazu klikněte ve sloupci Město na řádek Křížová tabulka a pak klikněte na položku Záhlaví řádku.
Tato akce způsobí, že se jako záhlaví řádků budou zobrazovat hodnoty pro město (dotaz tedy bude vracet pro každé město jeden řádek).
-
Ve sloupci Rok klikněte na řádek Křížová tabulka a pak klikněte na položku Záhlaví sloupce.
Tato akce způsobí, že se jako záhlaví sloupců budou zobrazovat hodnoty pro rok (dotaz tedy bude vracet pro každý rok jeden sloupec).
-
Ve sloupci Objem prodeje klikněte na řádek Křížová tabulka a pak klikněte na položku Hodnota.
Tato akce způsobí, že se v průsečíku řádků a sloupců budou zobrazovat hodnoty pro objem prodeje (dotaz tedy bude vracet pro každou kombinaci města a roku jednu hodnotu objemu prodeje).
-
Ve sloupci Objem prodeje klikněte na řádek Souhrn a pak klikněte na položku Sum.
Tato akce způsobí, že dotaz provede součet hodnot v tomto sloupci.
V dalších dvou sloupcích můžete v řádku Souhrn ponechat výchozí hodnotu Seskupit, protože v těchto sloupcích chcete zobrazovat jednotlivé hodnoty, nikoli agregované hodnoty.
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Teď máte dotaz, který vrací celkové roční objemy prodeje v Rio de Janeiru a São Paulu.
Zobrazení všech záznamů ze dvou podobných tabulek
Může se stát, že budete chtít zkombinovat data ze dvou tabulek, které mají stejnou strukturu, ale jedna z nich se nachází v jiné databázi. Podívejte se na tento scénář:
Předpokládejme, že jste analytik, který pracuje s daty studentů. Zahajujete iniciativu zabývající se sdílením dat mezi vaší školou a druhou školou, která umožní, aby obě školy mohly vylepšit svoje osnovy. U některých záležitostí, které chcete prozkoumat, by bylo lepší podívat se na všechny záznamy z obou škol společně a ne pro každou školu zvlášť.
Data druhé školy můžete importovat do nových tabulek v databázi, ale pak se změny v datech druhé školy neprojeví ve vaší databázi. Lepším řešením by bylo propojit tabulky druhé školy a pak vytvořit dotazy, které data při spuštění zkombinují. Data byste mohli analyzovat jako jednu sadu, místo abyste provedli dvě analýzy a pokusili se je interpretovat, jako by to byla jedna.
K zobrazení všech záznamů ze dvou tabulek se stejnou strukturou se používá sjednocovací dotaz.
Sjednocovací dotazy není možné zobrazit v návrhovém zobrazení. K jejich vytvoření se používají příkazy SQL, které se zadávají na kartu objektu Zobrazení SQL.
Vytvoření sjednocovacího dotazu pomocí dvou tabulek
-
Na kartě Vytvoření klikněte ve skupině Dotazy na Návrh dotazu.
-
Na kartě Návrh klikněte ve skupině Typ dotazu na položku Sjednocovací.
Dotaz přepne z návrhového zobrazení do zobrazení SQL. V tomto okamžiku je karta objektu Zobrazení SQL prázdná.
-
V zobrazení SQL zadejte klauzuli SELECT a za ni seznam polí z první požadované tabulky v dotazu. Názvy polí by měly být uzavřené v hranatých závorkách a oddělené čárkami. Až zadávání názvů polí dokončíte, stiskněte Enter. Kurzor se v zobrazení SQL přesune o jeden řádek dolů.
-
Zadejte klauzuli FROM a za ni název první tabulky požadované pro dotaz. Stiskněte Enter.
-
Pokud chcete zadat kritérium pro pole z první tabulky, zadejte klauzuli WHERE a za ni název pole, relační operátor (obvykle znak rovná se (=)) a příslušné kritérium. Další kritéria můžete přidat na konec klauzule WHERE pomocí klíčového slova AND a stejné syntaxe, kterou jste použili pro první kritérium, například WHERE [Úroveň předmětu]="100" AND [Zápočtové hodiny]>2. Až zadávání kritérií dokončíte, stiskněte Enter.
-
Zadejte klauzuli UNION a stiskněte Enter.
-
Zadejte klauzuli SELECT a za ni seznam polí z druhé požadované tabulky v dotazu. Měli byste z této tabulky zahrnout stejná pole, která jste zahrnuli z první tabulky, a to ve stejném pořadí. Názvy polí by měly být uzavřené v hranatých závorkách a oddělené čárkami. Až zadávání názvů polí dokončíte, stiskněte Enter.
-
Zadejte klauzuli FROM a za ni název druhé tabulky, kterou chcete zahrnout do dotazu. Stiskněte Enter.
-
V případě potřeby můžete přidat klauzuli WHERE podle popisu v kroku 6 tohoto postupu.
-
Zadejte středník (;), kterým se označuje konec dotazu.
-
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Výsledky se zobrazí v zobrazení Datový list.