Někdy je proces vytváření a používání dotazů v Accessu jednoduchou záležitostí, kdy stačí vybrat pole z tabulky, použít pár kritérií a pak zobrazit výsledky. Častěji se ale potřebná data nacházejí ve více tabulkách? Naštěstí můžete vytvořit dotaz, který zkombinuje informace z více zdrojů. V tomto tématu prozkoumáme některé scénáře, při kterých se data načítají z více tabulek, a ukážeme si, jak na to.
Co chcete udělat?
- Vylepšit informace v dotazu pomocí dat z tabulky v relaci
- Propojit data ve dvou tabulkách pomocí jejich relací s třetí tabulkou
- Zobrazit všechny záznamy ze dvou podobných tabulek
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 tabulky mají definovanou relaci v okně Relace.
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 se tyto tabulky zobrazují v okně Relace, zkontrolujte, jestli je relace už definovaná.
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
Můžete vytvořit relaci mezi polem, které má datový typ Automatické číslo, a polem, které má velikost pole Dlouhé celé číslo. Často tomu tak bývá, když vytváříte relaci 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. Je tomu tak obvykle 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. Dosáhnete toho tak, že vytvoříte třetí tabulku, která se nazývá spojovací tabulka nebo tabulka relací a bude mít primární a cizí klíč pro všechny ostatní 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 do dotazu zahrnout, a také na spojovací tabulku, která je propojuje, a pak klikněte na tlačítko 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 poté 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 položku Zákazníci, Objednávky a 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 ve vaší databázi, ale změny dat druhé školy se pak neprojeví ve vaší databázi. Lepším řešením by bylo propojit tabulky jiných škol a pak vytvořit dotazy, které by data sloučily, když je spustíte. Byli byste schopni analyzovat data jako jednu množinu, místo abyste prováděli dvě analýzy a snažili se je interpretovat, jako by to byla jedna.
Pokud chcete zobrazit všechny záznamy ze dvou tabulek se stejnou strukturou, použijte 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ý 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.