Když do dotazu Accessu zahrnete více zdrojů dat, pomocí spojení omezíte záznamy, které chcete zobrazit, na základě toho, jak spolu zdroje dat vzájemně souvisejí. Spojení se také používá ke kombinování záznamů z obou zdrojů dat, aby se každá dvojice záznamů ze zdrojů ve výsledcích dotazu stala jedním záznamem.
Tento článek popisuje různé typy spojení a ukazuje, jak je používat v dotazu. Ve výchozím nastavení se spojení vytvoří automaticky, pokud už existuje relace mezi dvěma zdroji dat, které používáte v dotazu. Spojení se vytvoří také v případě, že existují pole, která si jasně odpovídají. Automaticky vytvořené spojení můžete odstranit. Tento článek obsahuje základní informace o relacích mezi tabulkami, včetně postupu jejich vytvoření.
Poznámka: Dotazy můžete spojovat stejným způsobem jako tabulky a můžete také spojovat obě tabulky.
V tomto článku
Přehled
Databáze je kolekce tabulek dat, které spolu nesou logické relace. Relace slouží k propojení tabulek podle polí, která mají společné. Tabulka může být součástí libovolného počtu relací, ale každá relace má vždy přesně dvě tabulky. V dotazu je relace reprezentována spojením.
Když do dotazu přidáte tabulky, Access vytvoří spojení založená na relacích definovaných mezi tabulkami. Spojení můžete ručně vytvořit v dotazech, i když nepředstavují relace, které již byly definovány. Pokud jako zdroje dat pro dotaz použijete jiné dotazy (místo tabulek nebo k nim navíc), můžete vytvořit spojení mezi zdrojovými dotazy a také mezi těmito dotazy a všemi tabulkami, které použijete jako zdroje dat.
Spojení se chovají podobně jako kritéria dotazu v tom, že stanoví pravidla, která musí odpovídat datům, aby byla zahrnuta do operací dotazu. Spojení na rozdíl od kritérií také určují, že každá dvojice řádků, která splňuje podmínky spojení, bude sloučena v sadě záznamů tak, aby vytvořila jeden řádek.
Existují čtyři základní typy spojení: vnitřní spojení, vnější spojení, křížová spojení a nerovná spojení. Tento článek popisuje jednotlivé typy spojení, které můžete použít, proč je používáte a jak je vytvořit.
Spojení slouží k dotazování, jaké jsou relace k tabulkám: indikují, jak je možné kombinovat data ve dvou zdrojích na základě hodnot dat, které mají společné. Tady je obrázek spojení v návrhovém zobrazení dotazu s otevřenými vlastnostmi spojení 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. Ve vnitřním spojení nejsou zahrnuta žádná jiná data. Ve 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í spojení, vnější spojení, křížová spojení a nerovná spojení. Křížová spojení a nerovná spojení jsou pokročilé typy spojení a používají se zřídka, ale měli byste o nich vědět, abyste plně porozuměli tomu, jak spojení fungují.
Vnitřní spojení: Pouze související data z obou tabulek zkombinované
Vnitřní spojení je spojení, do kterého Access zahrne data z tabulky jenom v případě, že jsou v související tabulce odpovídající data, a naopak. Ve většině případů budete používat vnitřní spojení. Když vytvoříte spojení a neurčíte, o jaký typ spojení se jedná, Access předpokládá, že chcete vnitřní 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 uvidíte, jenom když máte úplný obrázek.
Vnější spojení: všechna související data se správně zkombinují a všechny zbývající záznamy z jedné tabulky
Vnější spojení je jako vnitřní spojení, ale přidá 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í obsahuje všechny záznamy z pravé tabulky – druhé tabulky ve spojení.
Úplná vnější spojení: všechna data zkombinované tam, kde je to možné
V některých systémech může vnější spojení obsahovat všechny řádky z obou tabulek, přičemž řádky se zkombinují, když odpovídají. Říká se tomu úplné vnější spojení a Access je explicitně nepodporuje. K dosažení stejného efektu ale můžete použít křížové spojení a kritéria.
Křížové spojení: všechna data, zkombinované 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 jejich následného zapomenutí. Access to interpretuje tak, že chcete vidět všechny záznamy z jedné tabulky v kombinaci s každým záznamem z druhé tabulky – všechny možné kombinace záznamů. Vzhledem k tomu, že žádná data nelze kombinovat, tento druh spojení zřídka vede k užitečným výsledkům. Existuje ale několik případů, kdy je křížové spojení přesně to, co potřebujete.
Nerovná spojení: jako běžné spojení, ale kombinování řádků pomocí jiného porovnání
Nerovné spojení používají jiný operátor než rovnítko (=) k porovnání hodnot a určení, zda a jak kombinovat data. Nerovné spojení nejsou explicitně podporována, ale k dosažení stejného efektu můžete použít křížové spojení a kritéria.
Zobrazení řádků, kde existuje společná hodnota v obou spojených tabulkách
Pokud chcete zobrazit pouze ty řádky, které mají ve spojování odpovídající hodnoty, použijte vnitřní spojení. Access vytvoří vnitřní spojení automaticky.
Jedná se o nejběžnější typ spojení. Sdělí dotazu, že řádky z jedné ze spojených tabulek odpovídají řádkům v druhé tabulce na základě dat ve spojených polích. Při spuštění dotazu s vnitřním spojením budou do operací dotazu zahrnuty pouze ty řádky, kde existuje společná hodnota v obou spojených tabulkách.
Návody použít vnitřní spojení?
Ve většině případů nemusíte dělat nic, abyste mohli použít vnitřní spojení. Pokud tabulky, které přidáte do dotazu, už mají relace, Access při přidání tabulek automaticky vytvoří vnitřní spojení mezi jednotlivými dvojicemi souvisejících tabulek. Pokud je zajištěna Referenční integrita, je nad čarou spojení u Relace 1:N zobrazena číslice 1 označující tabulku na straně 1 a symbol nekonečna (∞) označující tabulku na straně N.
I když jste relace nevytvořili, Access automaticky vytvoří vnitřní spojení, pokud do dotazu přidáte dvě tabulky a každá tabulka má pole se stejným nebo kompatibilním datovým typem a jedno ze spojování polí je Primární klíč. Symboly "one" a "many" se v tomto případě nezobrazují, protože referenční integrita není vynucována.
Pokud do dotazu přidáte dotazy a nevytvoříte mezi nimi relace, Access automaticky nevytváří vnitřní spojení mezi těmito dotazy nebo mezi dotazy a tabulkami. Obecně platí, že byste 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 SQL pro vnitřní spojení
Vnitřní spojení jsou zadána v SQL v klauzuli FROM, jak je znázorněno níže:
FROM tabulka1 INNER JOIN tabulka2 ON tabulka1.field1 compare table2.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 vnitřního spojení najdete v tématu Operace INNER JOIN.
Zobrazit všechny řádky z jedné tabulky a odpovídající řádky z druhé tabulky
Vnější spojení říkají dotazu, že i když některé řádky na obou stranách spojení přesně odpovídají, dotaz by měl obsahovat všechny řádky z jedné tabulky a také řádky z druhé tabulky, které sdílejí společnou hodnotu na obou stranách spojení.
Vnější spojení mohou být levá vnější spojení nebo pravá vnější spojení. V levém vnějším spojení dotaz zahrnuje všechny řádky z první tabulky v klauzuli FROM příkazu SQL a pouze ty řádky z druhé tabulky, kde spojování 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, kde spojování pole obsahuje hodnoty společné pro obě tabulky.
Poznámka: Pokud chcete snadno zjistit, která tabulka je levá nebo pravá tabulka v daném spojení, poklikejte na spojení a pak se podíváte do dialogového okna Vlastnosti spojení . Můžete také přepnout do zobrazení SQL a pak prozkoumat klauzuli FROM.
Vzhledem k tomu, že některé řádky na jedné straně vnějšího spojení nebudou obsahovat odpovídající řádky z druhé tabulky, některá pole vrácená ve výsledcích dotazu z této jiné tabulky budou 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ší spojení.
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 poznamenejte možnosti uvedené vedle možností 2 a 3.
-
Klikněte na požadovanou možnost a potom klikněte na OK.
-
Access zobrazí spojení a zobrazí šipku, která odkazuje ze zdroje dat, kde budou všechny řádky zahrnuty do zdroje dat, kde budou zahrnuty pouze ty řádky, které splňují podmínku spojení.
Nejednoznačná vnější spojení
Pokud vytvoříte dotaz, který obsahuje LEFT JOIN a INNER JOIN, nemusí být Access schopen určit, která operace spojení se má provést jako první. Vzhledem k tomu, že se výsledky liší v závislosti na tom, jestli je levé nebo vnitřní spojení provedeno jako první, Access zobrazí chybovou zprávu:
Chcete-li tuto chybu opravit, je nutné upravit dotaz tak, aby bylo jasné, které spojení se má provést jako první.
Syntaxe SQL pro vnější spojení
Vnější spojení jsou zadána v SQL v klauzuli FROM, jak je znázorněno níže:
FROM tabulka1 [ VLEVO | RIGHT ] JOIN table2
ON table1.field1 compare table2.field2Operace 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.
Zobrazit všechny řádky z obou tabulek a spojit je tam, kde existuje společná hodnota
Pokud 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 pomocí sjednocovacího dotazu. Následující postup vysvětluje, jak to udělat, ale pokud potřebujete další informace o sjednocovacích dotazech, přečtěte si část Viz také .
Použití sjednocovacího dotazu k provedení úplného vnějšího spojení:
-
Vytvořte dotaz, který má levé vnější spojení v poli, 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.
-
Stisknutím kombinace kláves CTRL+C zkopírujte kód SQL.
-
Odstraňte středník na konci klauzule FROM a stiskněte 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 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 NULL
-
Zadejte středník (;) na konci klauzule WHERE, která označuje 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 spojení tím, že nejsou explicitně reprezentována v Access. V křížovém spojení se každý řádek z jedné tabulky zkombinuje s každým řádkem z jiné tabulky, což vede k tomu, co se nazývá křížový produkt nebo kartézský součin. Kdykoli spustíte dotaz, který obsahuje tabulky, které nejsou explicitně spojeny, výsledkem je křížový produkt. Křížová spojení jsou obvykle neúmyslná, ale existují případy, kdy mohou být užitečné.
Proč používat křížové spojení?
Pokud chcete prozkoumat 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 úžasný rok a vy uvažujete o tom, že zákazníkům poskytnete slevy. Můžete vytvořit dotaz, který sečte nákupy každého zákazníka, vytvořit malou tabulku s několika možnými procenty rabatu a zkombinovat je do dalšího dotazu, který provede křížové spojení. Nakonec se zobrazí dotaz, který zobrazí sadu hypotetických rabatů pro každého zákazníka.
Návody použít křížové spojení?
Křížové spojení se vytvoří vždy, když do dotazu zahrnete tabulky nebo dotazy, a nevytvoříte alespoň jedno explicitní spojení pro každou tabulku nebo dotaz. Access kombinuje všechny řádky z každé tabulky nebo dotazu, které nejsou explicitně spojené s žádnou jinou tabulkou nebo dotazem, s každým dalším řádkem ve výsledcích. Představte si scénář rabatu z předchozího odstavce. Předpokládejme, že máte 91 zákazníků a že se chcete podívat na pět možných procent rabatu. Křížové spojení vytvoří 455 řádků (součin 91 a 5).
Jak si můžete představit, neúmyslná křížová spojení můžou ve výsledcích dotazu vytvořit obrovské množství řádků. Kromě toho 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 zkombinovaných řádků, které se zobrazí ve výsledcích, nebude dávat smysl. A nakonec může spuštění dotazů, které používají neúmyslná křížová spojení, trvat velmi dlouhou dobu.
1. Pole zakroužkovaná v kroužku by měla být vzájemně propojena.
1. Všimněte si velmi velkého počtu záznamů.
1. Všimněte si, že počet záznamů je mnohem menší.
Spojení tabulek na základě nerovnosti hodnot polí
Spojení nemusí být založená na ekvivalenci spojených polí. Spojení může být založené na libovolném operátoru porovnání, například větší než (>), menší než (<) nebo se nerovná (<>). Spojení, která nejsou založená na ekvivalenci, se nazývají nerovná spojení.
Pokud chcete zkombinovat řádky dvou zdrojů dat na základě hodnot polí, které nejsou stejné, použijete nerovné spojení. Nerovné spojení jsou obvykle založená na relačních operátorech větší než (>), menší než (<), větší než nebo rovno (>=) nebo menší než nebo rovno (<=). Nerovná spojení založená na operátoru nerovná se (<>) můžou vrátit téměř tolik řádků jako křížová spojení a výsledky se můžou obtížně interpretovat.
Návody použít nerovné spojení?
Nerovné spojení nejsou v návrhovém zobrazení podporována. Pokud je chcete použít, musíte to udělat pomocí zobrazení SQL. Můžete ale 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. Až to uděláte, můžete dotaz znovu otevřít pouze v návrhovém zobrazení, pokud nejprve změníte relační operátor zpět na rovná se (=) v zobrazení SQL.
Odstranění spojení
Pokud Access automaticky vytvoří spojení, které nechcete, nebo pokud vytvoříte spojení omylem – například spojení mezi dvěma poli s různými datovými typy – můžete spojení odstranit.
-
V návrhové mřížce dotazu klikněte na spojení, které chcete odebrat.
-
Stiskněte klávesu DELETE.
– nebo –
-
V návrhové mřížce dotazu klikněte pravým tlačítkem na spojení, které chcete odebrat, a potom klikněte na Odstranit.