Sdílet prostřednictvím


Vytvoření vnějších spojení (Visual Database Tools)

platí pro:SQL Server

Ve výchozím nastavení nástroje Návrháře dotazů a zobrazení (Visual Database Tools) vytvoří vnitřní spojení mezi tabulkami. Vnitřní spojení eliminují řádky, které se neshodují s řádkem z druhé tabulky. Vnější spojení však vrátí všechny řádky z alespoň jedné z tabulek nebo zobrazení uvedených v FROM klauzuli, pokud tyto řádky splňují jakékoli WHERE podmínky nebo HAVING podmínky hledání. Pokud chcete do sady výsledků zahrnout datové řádky, které nemají shodu ve spojené tabulce, můžete vytvořit vnější spojení.

Při vytváření vnějšího spojení je důležité pořadí, ve kterém se tabulky zobrazí v příkazu SQL (jak se odráží v podokně SQL). První tabulka, kterou přidáte, se stane levou tabulkou a druhá tabulka se stane "pravou" tabulkou. (Skutečné pořadí, ve kterém se tabulky zobrazují v podokně Diagram (Visual Database Tools) nejsou významné.) Když zadáte levé nebo pravé vnější spojení, odkazujete na pořadí, ve kterém byly tabulky přidány do dotazu, a pořadí, ve kterém se zobrazí v příkazu SQL v podokně SQL (Visual Database Tools).

Vytvoření vnějšího spojení

  1. Vytvořte spojení buď automaticky, nebo ručně. Podrobnosti najdete v tématu Automatické spojení tabulek (Visual Database Tools) nebo Ruční spojení tabulek (Visual Database Tools).

  2. Vyberte čáru spojení v podokně Diagram a potom v nabídce Návrhář dotazů zvolte Vybrat všechny řádky z <názvu> tabulky a vyberte příkaz, který obsahuje tabulku, jejíž řádky navíc chcete zahrnout.

    • Vyberte první tabulku pro vytvoření levého vnějšího spojení.
    • Zvolte druhou tabulku a vytvořte pravé vnější spojení.
    • Zvolte obě tabulky a vytvořte úplné vnější spojení.

Když zadáte vnější spojení, Návrhář dotazu a zobrazení upraví spojnici tak, aby označí vnější spojení.

Návrhář dotazu a zobrazení navíc upraví příkaz SQL v podokně SQL tak, aby odrážel změnu typu spojení, jak je znázorněno v následujícím příkazu:

SELECT employee.job_id,
       employee.emp_id,
       employee.fname,
       employee.minit,
       jobs.job_desc
FROM employee
     LEFT OUTER JOIN jobs
         ON employee.job_id = jobs.job_id;

Vzhledem k tomu, že vnější spojení obsahuje chybějící řádky, můžete ho použít k vyhledání řádků, které porušují omezení cizího klíče. K tomu vytvoříte vnější spojení a pak přidáte podmínku hledání k vyhledání řádků, ve kterých je sloupec primárního klíče nejpravější tabulky null. Například následující vnější spojení najde řádky v employee tabulce, které nemají odpovídající řádky v jobs tabulce:

SELECT employee.emp_id,
       employee.job_id
FROM employee
     LEFT OUTER JOIN jobs
         ON employee.job_id = jobs.job_id
WHERE (jobs.job_id IS NULL);