Když do dotazu Accessu zahrnete víc zdrojů dat, omezíte pomocí spojení záznamy, které chcete zobrazit, na základě vzájemné relace mezi zdroji dat. Spojení se také používá ke kombinování záznamů z obou zdrojů dat, aby se z každé dvojice záznamů ze zdrojů stal ve výsledcích dotazu jeden záznam.
Tento článek popisuje různé typy spojení a ukáže vám, jak je používat v dotazech. Ve výchozím nastavení se spojení vytvoří automaticky, pokud mezi dvěma zdroji dat, které používáte v dotazu, už existuje relace. Spojení se vytvoří také v případě, že existují pole, která spolu jasně souvisejí. Automaticky vytvořené spojení můžete odstranit. Tento článek obsahuje základní informace o relacích mezi tabulkami a také návod, jak je vytvořit.
Poznámka
Dotazy můžete spojit stejným způsobem jako tabulky a můžete je také spojit.
V tomto článku
- Přehled
- Typy spojení
- Zobrazit řádky, ve kterých v obou spojených tabulkách existuje společná hodnota.
- Zobrazení všech řádků z jedné tabulky a odpovídajících řádků z druhé tabulky
- Zobrazte všechny řádky z obou tabulek a spojte je tam, kde existuje společná hodnota
- Křížová spojení
- Spojování tabulek na základě nerovnosti hodnot polí
- Odstranění spojení
Přehled
Databáze je kolekce tabulek dat, které mají navzájem logické vztahy. Pomocí relací propojujete tabulky podle polí, která jsou společná. Tabulka může být součástí libovolného počtu relací, ale každá relace má vždycky právě dvě tabulky. V dotazu je relace reprezentována spojením.
Když přidáváte tabulky do dotazu, aplikace Access vytvoří spojení založená na relacích definovaných mezi tabulkami. Spojení v dotazech můžete vytvořit ručně, a to i v případě, že nepředstavují relace, které už jsou definované. Pokud jako zdroj dat pro dotaz použijete jiné dotazy (místo nebo kromě tabulek), můžete vytvořit spojení mezi zdrojovými dotazy a také mezi těmito dotazy a tabulkami, které použijete jako zdroje dat.
Spojení se chovají podobně jako kritéria dotazu v tom, že stanovují pravidla, kterým musí data odpovídat, aby byla zahrnuta do operací dotazu. Na rozdíl od kritérií spojení také určují, že každá dvojice řádků, které splňují podmínky spojení, se v sadě záznamů zkombinuje do jednoho řádku.
Existují čtyři základní typy spojení: vnitřní, vnější, křížová a nerovná spojení. Tento článek zkoumá jednotlivé typy spojení, které můžete použít, proč je používáte a jak spojení vytvořit.
Spojení jsou s dotazy, jaké jsou relace vzhledem k tabulkám: Označení toho, jak lze kombinovat data ze dvou zdrojů na základě společných datových hodnot. Tady je ilustrace spojení v návrhovém zobrazení dotazu s vlastnostmi spojení otevřenými v dialogovém okně:
Tato čára mezi tabulkami představuje spojení. Poklikáním na spojení otevřete dialogové okno Vlastnosti spojení (znázorněné) a zkontrolujte nebo změňte spojení.
Spojení jsou někdy směrová. Tato oblast dialogového okna ukazuje, která tabulka je která ve spojení a která pole se používají ke spojení tabulek.
Tato oblast určuje typ spojení: možnost 1 je vnitřní spojení, 2 je levé vnější spojení a 3 je pravé vnější spojení.
Můžete použít pole z obou tabulek a z každé z nich se zobrazí data, která se týkají daného úkolu. Do vnitřního spojení nejsou zahrnuta žádná další data. Při vnějším spojení jsou do výsledků dotazu zahrnuty také nesouvisející záznamy z jedné tabulky.
Typy spojení
Existují čtyři základní typy spojení: vnitřní, vnější, křížová a nerovná spojení. Křížová a nerovná spojení jsou pokročilé typy spojení a používají se zřídka. Měli byste je však znát, abyste dobře porozuměli tomu, jak spojení fungují.
Vnitřní spojení: Z obou tabulek se kombinují pouze související data
Vnitřní spojení je takové, ve kterém Access zahrnuje data z tabulky pouze v případě, že existují odpovídající data v související tabulce (a naopak). Většinou budete používat vnitřní spojení. Pokud vytvoříte spojení a neurčíte, o jaký druh spojení se jedná, předpokládá aplikace Access použití vnitřního spojení. Vnitřní spojení jsou užitečná, protože umožňují kombinovat data ze dvou zdrojů na základě sdílených hodnot – takže data vidíte, jen když máte k dispozici úplný obrázek.
Vnější spojení: všechna související data se zkombinovala správně plus všechny zbývající záznamy z jedné tabulky.
Vnější spojení je podobné vnitřnímu spojení, ale přidává zbývající řádky z jedné z tabulek. Vnější spojení jsou směrová: levé vnější spojení zahrnuje všechny záznamy z levé tabulky – první tabulky ve spojení – a pravé vnější spojení zahrnuje všechny záznamy z pravé tabulky – druhé tabulky ve spojení.
Úplná vnější spojení: všechna data, kde je to proveditelné, kombinovaná
V některých systémech může vnější spojení zahrnovat všechny řádky z obou tabulek a řádky se kombinují, když si odpovídají. Tomu se říká úplné vnější spojení a Access je explicitně nepodporuje. Stejného efektu však dosáhnete, když použijete křížové spojení a kritéria.
Křížová spojení: všechna data, kombinovaná všemi možnými způsoby
Křížové spojení je většinou vedlejším efektem přidání dvou tabulek do dotazu a následného zapomenutí je spojit. Access to interpretuje tak, že chcete zobrazit všechny záznamy z jedné tabulky v kombinaci se všemi záznamy z druhé tabulky – tedy se všemi možnými kombinacemi záznamů. Protože se žádná data nedají kombinovat, vrací tento druh spojení jen zřídka užitečné výsledky. Existuje ale několik případů, kdy je křížové spojení přesně to, co potřebujete.
Nerovnoměrná spojení: Jako běžné spojení, ale při kombinování řádků se používá jiné porovnání
Nerovná spojení používají jiný operátor než symbol rovná se (=) k porovnání hodnot a určení, jestli a jak se data zkombinují. Nerovná spojení nejsou explicitně podporována, ale k dosažení stejného efektu můžete použít křížové spojení a kritéria.
Zobrazit řádky, ve kterých v obou spojených tabulkách existuje společná hodnota.
Pokud chcete zobrazit pouze ty řádky, které mají ve spojených polích shodné hodnoty, použijte vnitřní spojení. Aplikace Access vytváří vnitřní spojení automaticky.
Jedná se o nejběžnější typ spojení. Na základě dat ve spojených polích říkají dotazu, že řádky z jedné ze spojených tabulek odpovídají řádkům v druhé tabulce. Při spuštění dotazu s vnitřním spojením se do operací dotazu zahrnou jenom ty řádky, ve kterých v obou spojených tabulkách existuje společná hodnota.
Návody použití vnitřního spojení?
Ve většině případů nemusíte k použití vnitřního spojení nic dělat. Pokud tabulky, které přidáváte do dotazu, už mají relace, Access po přidání tabulek automaticky vytvoří vnitřní spojení mezi každou dvojicí souvisejících tabulek. Pokud je referenční integrita vynucená, zobrazí Access nad čarou spojení také číslici 1, která ukazuje, která tabulka je v relaci 1:N na straně 1, a symbol nekonečna (∞), který ukazuje, která tabulka je na straně N.
I když jste relace nevytvořili, vytvoří Access automaticky vnitřní spojení, pokud do dotazu přidáte dvě tabulky, které mají pole se stejným nebo kompatibilním datovým typem a jedno z těchto polí spojení je primárním klíčem. Symboly "jeden" a "N" se v tomto případě nezobrazují, protože není vynucena referenční integrita.
Pokud do dotazu přidáte dotazy a nevytvoříte mezi nimi relace, aplikace Access mezi nimi, nebo mezi dotazy a tabulkami automaticky nevytvoří vnitřní spojení. Obecně platí, že byste si je měli vytvořit sami. Vnitřní spojení vytvoříte přetažením pole z jednoho zdroje dat do pole v jiném zdroji dat. Mezi těmito dvěma poli se zobrazí čára, která označuje vytvořené spojení.
Syntaxe jazyka SQL pro vnitřní spojení
Vnitřní spojení jsou specifikována v jazyce SQL v klauzuli FROM, jak je znázorněno níže:
FROM tabulka1 INNER JOIN tabulka2 ON tabulka1. pole1 srovnej tabulku2. pole2
Operace INNER JOIN se skládá z těchto částí:
| Čá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. |
| porovnat | Libovolný relační porovnávací operátor: "=," "<," "," "><=," ">=" nebo "<>." |
Další informace o syntaxi INNER JOIN najdete v tématu Operace INNER JOIN.
Zobrazení všech řádků z jedné tabulky a odpovídajících řádků z druhé tabulky
Vnější spojení říkají dotazu, že ačkoli některé řádky na obou stranách spojení přesně odpovídají, měl by dotaz zahrnovat všechny řádky z jedné tabulky a také ty řádky z druhé tabulky, které sdílejí společnou hodnotu na obou stranách spojení.
Vnější spojení můžou být levá nebo pravá vnější. V levém vnějším spojení zahrnuje dotaz všechny řádky z první tabulky v klauzuli FROM příkazu SQL a pouze ty řádky z druhé tabulky, ve kterých spojovací pole obsahuje hodnoty společné pro obě tabulky. V pravém vnějším spojení zahrnuje dotaz všechny řádky z druhé tabulky v klauzuli FROM příkazu SQL a pouze ty řádky z druhé tabulky, ve kterých spojovací pole obsahuje hodnoty společné pro obě tabulky.
Poznámka
Která tabulka je v daném spojení levá nebo pravá, můžete snadno zjistit poklikáním na spojení a následným pohledem do dialogového okna Vlastnosti spojení . Můžete taky přepnout do zobrazení SQL a zkontrolovat klauzuli FROM.
Protože některé řádky na jedné straně vnějšího spojení nebudou mít odpovídající řádky z druhé tabulky, budou některá pole vrácená ve výsledcích dotazu z této jiné tabulky prázdná, pokud řádky neodpovídají.
Návody použít vnější spojení?
Vnější spojení vytvoříte úpravou existujícího vnitřního spojení. Pokud žádné vnitřní spojení neexistuje, vytvořte ho a pak ho změňte na vnější.
Změna vnitřního spojení na vnější spojení
- V návrhovém zobrazení dotazu poklikejte na spojení, které chcete změnit.
Zobrazí se dialogové okno Vlastnosti spojení. - V dialogovém okně Vlastnosti spojení si všimněte možností uvedených vedle možností 2 a 3.
- Klikněte na požadovanou možnost a potom klikněte na OK.
- Access zobrazí spojení a šipku směřující ze zdroje dat, ve kterém budou zahrnuty všechny řádky, do zdroje dat, kde budou zahrnuty pouze řádky splňující podmínku spojení.
Nejednoznačná vnější spojení
Pokud vytvoříte dotaz, který obsahuje operace LEFT JOIN a INNER JOIN, Access nemusí být schopen určit, kterou operaci spojení provést jako první. Protože se výsledky liší v závislosti na tom, jestli se nejprve provede levé nebo vnitřní spojení, zobrazí Access chybovou zprávu:
Chcete-li tuto chybu opravit, je nutné upravit dotaz tak, aby bylo jasné, které spojení chcete provést jako první.
Syntaxe jazyka SQL pro vnější spojení
Vnější spojení se v SQL zadávají v klauzuli FROM, jak je znázorněno níže:
FROM tabulka1 [ LEFT | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2
Operace LEFT JOIN a RIGHT JOIN mají následující části:
| Čá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. |
| porovnat | Libovolný relační porovnávací operátor: "=," "<," "," "><=," ">=" nebo "<>." |
Další informace o syntaxi vnějšího spojení najdete v tématu Operace LEFT JOIN, RIGHT JOIN.
Zobrazte všechny řádky z obou tabulek a spojte je tam, kde existuje společná hodnota
Když chcete zobrazit všechny řádky ze dvou tabulek a spojit je na základě společných hodnot, použijete úplné vnější spojení. Access explicitně nepodporuje úplná vnější spojení, ale stejného efektu můžete dosáhnout použitím sjednocovacího dotazu. Následující postup je vysvětlen. Pokud ale potřebujete další informace o sjednocovacích dotazech, podívejte se do části Viz také .
Použití sjednocovacího dotazu k provedení úplného vnějšího spojení:
Vytvořte dotaz s levým vnějším spojením s polem, které chcete použít pro úplné vnější spojení.
Na kartě Domů klikněte ve skupině Zobrazení na tlačítko Zobrazení a potom na položku Zobrazení SQL.
Zkopírujte kód SQL stisknutím kombinace kláves CTRL+C.
Odstraňte středník na konci klauzule FROM a stiskněte klávesu ENTER.
Zadejte klauzuli UNION a stiskněte Enter.
Poznámka
Nepoužívejte klíčové slovo ALL při použití sjednocovacího dotazu k provedení úplného vnějšího spojení.
Stisknutím kombinace kláves CTRL+V vložte kód SQL, který jste zkopírovali v kroku 3.
V kódu, který jste vložili, změňte LEFT JOIN na RIGHT JOIN.
Odstraňte středník na konci druhé klauzule FROM a stiskněte klávesu ENTER.
Přidejte klauzuli WHERE, která určuje, že hodnota pole spojení je NULL v první tabulce uvedené v klauzuli FROM (levá tabulka).
Pokud je například klauzule FROM:FROM Products RIGHT JOIN [Order Details] ON Products.ID = [Order Details].[Product ID]Přidali byste následující klauzuli WHERE:
WHERE Products.ID IS NULLZadáním středníku (;) na konec klauzule WHERE označíte konec sjednocovacího dotazu.
Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.
Křížová spojení
Křížová spojení se liší od vnitřních a vnějších v tom, že nejsou v Accessu explicitně znázorněna. Při křížovém spojení se každý řádek z jedné tabulky kombinuje s příslušnými řádky z jiné tabulky. Výsledkem je takzvaný křížový součin nebo kartézský součin. Kdykoli spustíte dotaz obsahující tabulky, které nejsou explicitně spojené, je výsledkem křížový součin. Křížová spojení jsou obvykle neúmyslná, ale existují případy, kdy mohou být užitečná.
Proč mám používat křížové spojení?
Pokud chcete prověřit všechny možné kombinace řádků mezi dvěma tabulkami nebo dotazy, použijte křížové spojení. Předpokládejme například, že vaše firma má za sebou velkolepý rok a vy uvažujete o tom, že svým zákazníkům poskytnete slevy. Můžete vytvořit dotaz, který sečte nákupy jednotlivých zákazníků, vytvořit malou tabulku, která bude obsahovat několik možných procent rabatu, a zkombinovat tato dvě data do dalšího dotazu, který provede křížové spojení. Zobrazí se dotaz, který zobrazí sadu hypotetických rabatů pro každého zákazníka.
Návody použití křížového spojení?
Křížové spojení vznikne pokaždé, když do dotazu zahrnete tabulky nebo dotazy a nevytvoříte pro každou tabulku nebo dotaz alespoň jedno explicitní spojení. Access sloučí všechny řádky z tabulek nebo dotazů, které nejsou explicitně spojené s žádnou jinou tabulkou nebo dotazem, do všech ostatních řádků výsledků. Podívejte se na scénář rabatu z předchozího odstavce. Předpokládejme, že máte 91 zákazníků a chcete se podívat na pět možných procent rabatu. Křížovým spojením vznikne 455 řádků (součin hodnot 91 a 5).
Jak si asi dovedete představit, neúmyslná křížová spojení můžou ve výsledcích dotazu vytvářet obrovské množství řádků. Navíc jsou tyto výsledky obecně bezvýznamné, protože pokud ve skutečnosti nemáte v úmyslu kombinovat každý řádek s každým druhým řádkem, většina sloučených řádků zobrazených ve výsledcích nebude dávat smysl. A konečně, spuštění dotazů, které používají neúmyslná křížová spojení, může trvat velmi dlouho.
1. Zakroužkovaná pole by měla být vzájemně spojená.
1. Všimněte si velkého počtu záznamů.
1. Všimněte si, že počet záznamů je mnohem menší.
Spojování tabulek na základě nerovnosti hodnot polí
Spojení nemusí být založena na ekvivalenci spojených polí. Spojení může být založeno na libovolném relačním operátoru, například větší než (>), menší než (<) nebo se nerovná (<>). Spojení, která nejsou založena na ekvivalenci, se nazývají nerovná spojení.
Chcete-li sloučit řádky dvou zdrojů dat na základě hodnot polí, které se nerovnají, použijte nerovné spojení. Obvykle jsou nerovná spojení založena na relačních operátorech "větší než" (>), "menší než<", "větší než" nebo "rovna (>=") nebo "menší než" nebo rovno (<=). Nerovná se spojení založená na operátoru Nerovná se (<>) mohou vrátit téměř tolik řádků jako křížová spojení a výsledky může být obtížné interpretovat.
Návody použití nerovného spojení?
Nerovná spojení nejsou v návrhovém zobrazení podporována. Pokud je chcete používat, musíte tak učinit pomocí zobrazení SQL. Můžete však vytvořit spojení v návrhovém zobrazení, přepnout do zobrazení SQL, najít relační operátor rovná se (=) a změnit ho na operátor, který chcete použít. Poté již lze dotaz znovu otevřít v návrhovém zobrazení pouze v případě, že v zobrazení SQL změníte porovnávací operátor zpět na rovná se (=).
Odstranění spojení
Pokud aplikace Access vytvoří automaticky spojení, které nechcete, nebo pokud spojení vytvoříte omylem (například spojení mezi dvěma poli s různými datovými typy), můžete toto spojení odstranit.
- V návrhové mřížce dotazu klikněte na spojení, které chcete odebrat.
- Stiskněte DELETE.
– nebo –
- V návrhové mřížce dotazu klikněte pravým tlačítkem myši na spojení, které chcete odebrat, a potom klikněte na příkaz Odstranit.
Přidání záznamů do tabulky pomocí přidávacího dotazuSloučení výsledků několika výběrových dotazů pomocí sjednocovacího dotazuVytvoření dotazu založeného na několika tabulkáchVytvoření, úprava a odstranění relace