Propojení tabulek a dotazů

Když do dotazu Accessu zahrníte víc zdrojů dat, použijete spojení k omezení záznamů, které chcete zobrazit, na základě toho, jak spolu zdroje dat souvisí. Pomocí spojení můžete zkombinovat záznamy z obou zdrojů dat, aby se jednotlivé dvojice záznamů ze zdrojů staly ve výsledcích dotazu jedním záznamem.

Tento článek popisuje různé typy spojení a ukáže, jak je použít v dotazu. Ve výchozím nastavení se spojení vytvoří automaticky, pokud už existují relace mezi dvěma zdroji dat, které používáte v dotazu. Spojení se vytvoří také v případě, že jsou 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ě toho, jak je vytvořit.

Poznámka: Dotazy můžete spojit stejným způsobem jako tabulky a můžete spojit obě tabulky.

V tomto článku

Přehled

Databáze je kolekce tabulek dat, která mezi sebou nese logické relace. Relace se používají k propojení tabulek podle společných polí. 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 v dotazech vytvořit ručně, i když nepředstavují relace, které už jsou definované. Pokud jako zdroje dat dotazu používáte jako zdroje dat jiné dotazy (namísto tabulek nebo kromě nich), můžete mezi zdrojovými dotazy a taky mezi těmito dotazy a tabulkami, které používáte jako zdroje dat, vytvořit spojení.

Spojení se podobají kritériím dotazu tím, že stanoví pravidla, která se musí shodovat s daty, aby byla zahrnutá do operací dotazu. Na rozdíl od kritérií určuje spojení také to, že každou dvojici řádků, které vyhovují podmínkám spojení, se zkombinují v sadě záznamů do jednoho řádku.

Existují čtyři základní typy spojení: vnitřní, vnější, křížová a nerovná spojení. Tento článek popisuje jednotlivé typy spojení, které můžete použít, proč jednotlivé typy spojení používáte a jak spojení vytvořit.

Spojení jsou dotazy, které relace s tabulkami jsou – označení toho, jak lze data ve dvou zdrojích kombinovat na základě společných datových hodnot. Tady je obrázek spojení v návrhovém zobrazení dotazu s vlastnostmi spojení otevřenými v dialogovém okně:

Okno Vlastnosti spojení.

Tato čára mezi tabulkami představuje spojení. Poklikejte na spojení a otevřete dialogové okno Vlastnosti spojení (znázorněné) a zkontrolujte nebo změňte spojení.

Spojení jsou někdy směrová. V této oblasti dialogového okna je znázorněno, která tabulka je ve spojení a která pole slouží 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í.

Lze použít pole z obou tabulek a z nich se zobrazí data týkající se daného úkolu. Do vnitřního spojení nejsou zahrnutá žádná jiná data. Ve vnějším spojení jsou ve výsledcích dotazu zahrnuté taky nesouvisející záznamy z jedné tabulky.

Začátek stránky

Typy spojení

Existují čtyři základní typy spojení: vnitřní, vnější, křížová a nerovná spojení. Křížová spojení a nerovná spojení jsou pokročilé typy spojení a používají se zřídka, měli byste o nich ale vědět, abyste věděli, jak spojení fungují.

Vnitřní spojení: v kombinaci jenom související data z obou tabulek

Vnitřní spojení je spojení, ve kterém Access obsahuje data z tabulky jenom v případě, že v související tabulce jsou odpovídající data a naopak. Ve většině doby budete používat vnitřní spojení. Když vytvoříte spojení a nezadáte jeho druh, Access předpokládá, že chcete vnitřní spojení. Vnitřní spojení jsou užitečná, protože umožňují zkombinovat data ze dvou zdrojů na základě sdílených hodnot – takže data uvidíte jenom v případě, že je kompletní obrázek.

Vnější spojení: všechna související data se zkombinují správně a všechny zbývající záznamy z jedné tabulky.

Vnější spojení je jako vnitřní spojení, ale sečte zbývající řádky z jedné tabulky. Vnější spojení jsou směrová: levé vnější spojení obsahuje všechny záznamy z levé tabulky – první tabulku ve spojení – a pravé vnější spojení obsahuje všechny záznamy z pravé tabulky – druhou tabulku ve spojení.

Úplná vnější spojení: všechna data, v kombinaci tam, kde je to možné

V některých systémech může vnější spojení zahrnovat všechny řádky z obou tabulek, v případě, že odpovídají, v kombinaci s řádky. Toto se nazývá úplné vnější spojení a Access je výslovně nepodporuje. Pokud však chcete dosáhnout stejného efektu, můžete použít křížové spojení a kritéria.

Křížová spojení: všechna data v kombinaci se všemi možnými možnostmi

Ve většině doby má křížové spojení vedlejší účinek přidání dvou tabulek do dotazu a potom je zapomenete spojit. Access to interpretuje tak, že chcete zobrazit každý záznam z jedné tabulky v kombinaci se každý záznamem z druhé tabulky – se každou možnou kombinací záznamů. Vzhledem k tomu, že žádná data nelze zkombinovat, tento typ spojení zřídka vede k užitečným výsledkům. Existuje ale několik případů, kdy potřebujete křížové spojení.

Nerovná spojení: jako běžné spojení, ale při kombinování řádků používá jiné porovnání

Nerovná spojení používají jiný operátor než rovnítek (=) k porovnání hodnot a určení, jestli a jak se data kombinují. Nerovná spojení nejsou explicitně podporovaná, ale k dosažení stejného efektu můžete použít křížové spojení a kritéria.

Zobrazení řádků, ve kterých existuje společná hodnota v obou spojených tabulkách

Pokud chcete zobrazit jenom řádky, které ve spojeném poli mají odpovídající hodnoty, použijte vnitřní spojení. Access vytvoří vnitřní spojení automaticky.

Jedná se o nejběžnější typ spojení. U dotazu se říká, že řádky z jedné ze spojených tabulek odpovídají řádkům ve druhé tabulce na základě dat ve spojených polích. Když spustíte dotaz s vnitřním spojením, zahrnou se do operací dotazu jenom ty řádky, ve kterých v obou spojených tabulkách existuje společná hodnota.

Jak se používá vnitřní spojení?

Když chcete použít vnitřní spojení, většinou nemusíte dělat nic. Pokud už tabulky, které přidáte do dotazu, mají relace, Access po přidání tabulek automaticky vytvoří vnitřní spojení mezi každou dvojicí 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 v případě, že jste nevytvářely relace, vytvoří Access vnitřní spojení automaticky, pokud do dotazu přidáte dvě tabulky a každá z nich má pole se stejným nebo kompatibilním datovým typem a jedno z polí spojení je Primární klíč. Symboly "1" a "mnoho" se v tomto případě nezobrazí, protože není vynucena referenční integrita.

Pokud přidáte dotazy do dotazu a nevytváříte relace mezi těmito dotazy, Access mezi těmito dotazy nebo mezi dotazy a tabulkami automaticky nevytváří vnitřní spojení. Obecně byste je měli vytvořit sami. Vnitřní spojení vytvoříte přetažením pole z jednoho zdroje dat do pole na 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í

Inner joins are specified in SQL in the FROM clause, as shown below:

FROM tabulka1 INNER JOIN tabulka2 ON tabulka1.pole1 porovnání tabulka2.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.

porovnání

Libovolný relační porovnávací operátor: "=," "<," ">," "<=," ">=," nebo "<>."

Další informace o syntaxi vnitřního spojení najdete v tématu Operace INNER JOIN.

Začátek stránky

Zobrazení všech řádků z jedné tabulky a odpovídajících řádků z druhé tabulky

Vnější spojení sdělují dotazu, že i když 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é řádky z druhé tabulky, které sdílejí společnou hodnotu na obou stranách spojení.

Outer joins can be left outer joins or can be right outer joins. V levém vnějším spojení obsahuje dotaz všechny řádky z první tabulky v klauzuli FROM příkazu SQL a jenom ty řádky z druhé tabulky, ve kterých spojovací pole obsahuje hodnoty společné pro obě tabulky. V pravém vnějším spojení obsahuje dotaz všechny řádky z druhé tabulky v klauzuli FROM příkazu SQL a jenom ty řádky z druhé tabulky, ve kterých spojovací pole obsahuje hodnoty společné pro obě tabulky.

Poznámka: To, která tabulka je levá nebo pravá v daném spojení, můžete snadno zjistit poklikáním na spojení a zobrazením dialogového okna Vlastnosti spojení. Můžete taky přepnout do zobrazení SQL a potom zkontrolovat klauzuli FROM.

Některé řádky na jedné straně vnějšího spojení nebudou mít odpovídající řádky z druhé tabulky, a proto některá pole vrácená ve výsledcích dotazu z této druhé tabulky budou prázdná, pokud řádky neodpovídají.

Jak se používá vnější spojení?

Vnější spojení vytvoříte tak, že upravíte existující vnitřní spojení. Pokud neexistuje žádné vnitřní spojení, vytvořte ho a změňte ho na vnější.

Změna vnitřního spojení na vnější spojení

  1. V návrhovém zobrazení dotazu poklikejte na spojení, které chcete změnit.

    Zobrazí se dialogové okno Vlastnosti spojení.

  2. V dialogovém okně Vlastnosti spojení si všimněte, že volby jsou uvedené vedle možností 2 a 3.

  3. Klikněte na požadovanou možnost a potom klikněte na OK.

  4. Access zobrazí spojení a zobrazí šipku, která odkazuje ze zdroje dat, do které budou zahrnuty všechny řádky do zdroje dat, do kterých budou zahrnuty jenom řádky, které vyhovují podmětu 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, která operace spojení se má provést jako první. Protože se výsledky liší podle toho, jestli se nejdříve provede levé nebo vnitřní spojení, Access zobrazí chybovou zprávu:

Pokud chcete tuto chybu opravit, musíte dotaz upravit tak, aby bylo jasné, které spojení se má provést jako první.

Syntaxe jazyka SQL pro vnější spojení

Vnější spojení jsou v klauzuli FROM zadána do jazyka SQL, jak je znázorněno níže:

FROM table1 [ LEFT | RIGHT ] Tabulka JOIN2
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.

porovnání

Libovolný relační porovnávací operátor: "=," "<," ">," "<=," ">=," nebo "<>."

Další informace o syntaxi vnějšího spojení naleznete v tématu Operace LEFT JOIN a RIGHT JOIN.

Začátek stránky

Zobrazení všech řádků z obou tabulek a jejich spojení tam, kde existuje společná hodnota

Chcete-li zobrazit všechny řádky ze dvou tabulek a spojit je na základě společných hodnot, použijte úplné vnější spojení. Access výslovně nepodporuje úplná vnější spojení, ale stejný efekt můžete dosáhnout pomocí sjednotovacího dotazu. Následující postup vysvětluje, jak to udělat, ale pokud chcete další informace o sjednocecích dotazech, podívejte se do části Viz také.

Pokud chcete použít sjednocený dotaz k provedení plného vnějšího spojení:

  1. Vytvořte dotaz s levým vnějším spojením v poli, které chcete použít pro úplné vnější spojení.

  2. Na kartě Domů klikněte ve skupině Zobrazení na tlačítko Zobrazení a potom na položku Zobrazení SQL.

  3. Stisknutím kombinace kláves CTRL+C zkopírujte kód SQL.

  4. Odstraňte na konci klauzule FROM středník a stiskněte klávesu ENTER.

  5. Zadejte klauzuli UNION a stiskněte Enter.

    Poznámka: Pokud použijete sjednocený dotaz k provedení plného vnějšího spojení, nepoužívejte klíčové slovo ALL.

  6. Stisknutím kombinace kláves CTRL+V vložte kód SQL, který jste zkopírovali v kroku 3.

  7. V kódu, který jste vedli, změňte left join na RIGHT JOIN.

  8. Odstraňte středník na konci druhé klauzule FROM a stiskněte klávesu ENTER.

  9. 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řidejte následující klauzuli WHERE:

    WHERE Products.ID IS NULL

  10. Zadejte středník (;) na konci klauzule WHERE, která označuje konec sjednotovacího dotazu.

  11. 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í v tom, že nejsou výslovně znázorněna v Access. U křížového spojení je každý řádek z jedné tabulky sloučen s každým řádkem z jiné tabulky, takže se nazývá křížový nebo kartézský sou užívání. Při každém spuštění dotazu, který obsahuje tabulky, které nejsou explicitně spojené, je výsledkem křížový produkt. Křížová spojení jsou obvykle neúmyslná, ale v určitých případech může být užitečná.

Proč mám používat křížové spojení?

Pokud chcete prozkoumat každou možnou kombinaci řádků mezi dvěma tabulkami nebo dotazy, použijte křížové spojení. Předpokládejme například, že vaše firma měla úžasný rok a uvažujete o poskytnutí rabatů zákazníkům. 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 sloučit tyto dva objekty do jiného dotazu, který provede křížové spojení. Nakonec se zobrazí dotaz, který zobrazí sadu hypotetických rabatů pro každého zákazníka.

Jak můžu použít křížové spojení?

Křížové spojení se vytvoří pokaždé, když do dotazu zahrníte tabulky nebo dotazy, a nevytváří se v nich alespoň jedno explicitní spojení. Access kombinuje každý řádek z každé tabulky nebo dotazu, který není výslovně spojený s žádnou jinou tabulkou nebo dotazem, do každého druhého řádku výsledků. Zvažte 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 slev. Křížové spojení vytvoří 455 řádků (sou produkt 91 a 5).

Jak si asi asi představte, neúmyslná křížová spojení můžou ve výsledcích dotazu vytvořit velký počet řádků. Tyto výsledky navíc obvykle nemají smysl, protože pokud nechcete ve skutečnosti kombinovat každý řádek s každým jiným řádkem, nebude mít většina sloučených řádků, které se zobrazí ve výsledcích, smysl. A konečně dotazy, které používají neúmyslná křížová spojení, může trvat velmi dlouho.

Nezáměrné křížové spojení v návrhovém zobrazení dotazu

1. Zakroužkovaná pole by se měla vzájemně spojit.

Nezáměrný křížový součin

1. Všimněte si velmi velkého počtu záznamů.

Opravený výsledek dotazu

1. Všimněte si, že počet záznamů je mnohem menší.

Začátek stránky

Spojení tabulek na základě rovnosti hodnot polí

Spojení nemusí být založena na ekvivalenci spojených polí. Spojení může být založené na jakémkoli porovnávacím operátoru, jako je 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 se dvěma zdroji dat na základě hodnot polí, které se nerovnají, použijte nerovné spojení. Nerovná spojení jsou obvykle založená na porovnávacích operátorech větších než (>), menších než (<), větších nebo rovných (>=), nebo menších nebo rovných (< =). Nerovná spojení založená na operátoru se nerovnají (<>) mohou vrátit skoro tolik řádků jako křížová spojení a výsledky mohou být obtížné interpretovat.

Jak se používá nerovné spojení?

Nerovná spojení nejsou v návrhovém zobrazení podporována. Pokud je chcete používat, musíte to udělat v 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. Po této akci můžete dotaz znovu otevřít jenom v návrhovém zobrazení, pouze pokud nejprve v zobrazení SQL změníte relační operátor zpět na rovná se (=).

Odstranění spojení

Pokud Access automaticky vytvoří spojení, které nechcete, nebo pokud spojení vytvoříte omylem – například spojení mezi dvěma poli, které mají různé datové typy – můžete toto spojení odstranit.

  1. V návrhové mřížce dotazu klikněte na spojení, které chcete odebrat.

  2. 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 odstranit.

Začátek stránky

Viz taky

Přidání záznamů do

Zkombinování

tabulkách Vytvoření,

Potřebujete další pomoc?

Rozšiřte své dovednosti s Office
Projít školení
Získejte nové funkce jako první
Připojte se k účastníkům programu Office Insiders

Byly tyto informace užitečné?

×