JOIN

Z Wikipedie, otevřené encyklopedie

JOIN je syntaktická konstrukce jazyka SQL. Slouží ke spojování výsledku dotazu SELECT ze dvou vstupních množin (typicky tabulek relační databáze). Spojování tabulek může být křížové (CROSS JOIN), vnitřní (INNER JOIN), přirozené (NATURAL JOIN) nebo vnější (OUTER JOIN).

Obsah

[editovat] JOIN dle standardu SQL89

Podle standard SQL89 se spojované množiny zapisují v příkazu SELECT jako čárkami oddělený seznam klauzule FROM. Podmínky určující spojení množin se zapisují mezi filtrační podmínky v části WHERE. Takto lze specifikovat pouze spojování křížové a vnitřní.

[editovat] JOIN dle standardu SQL92

Podle standardu SQL92 je spojovací podmínka nedílnou součástí klauzule FROM příkazu SELECT. Tento způsob zápisu zavádí kromě křížového a vnitřního spojování i přirozené a vnější.

[editovat] Křížové spojování

Výsledkem křížového spojování (CROSS JOIN) je kartézský součin vstupních množin. Výsledná množina je většinou velmi rozsáhlá. Ekvivalentem křížového spojování je vnitřní spojování s podmínkou, která je platná pro všechny řádky vstupních množin.

Příklad

Výstupní množina pro uvedené zápisy je shodná.

SELECT a.col1, a.colb, b.col1, b.col2
FROM tab1 a, tab2 b;

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a CROSS JOIN tab2 b;

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a INNER JOIN tab2 b on 1 = 1

[editovat] Vnitřní spojování

Vnitřní spojování (INNER JOIN) je v praxi nejčastěji používaným způsobem spojování vstupních množin. Je to křížové spojování omezené na výstupu o řádky nevyhovující spojovací podmínce. Typicky je podmínka definovaná jako rovnost primárního klíče a cizího klíče.

Příklad

Výstupní množina pro uvedené zápisy je shodná.

SELECT a.col1, a.colb, b.col1, b.col2
FROM tab1 a, tab2 b
where a.col1 = b.col1;

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a INNER JOIN tab2 b on a.col1 = b.col1

[editovat] Přirozené spojování

Přirozené spojování (NATURAL JOIN) je zvláštním případem vnitřního spojování, kde je spojovací podmínka realizována automaticky dle shodnosti názvů a datových typů ve spojovaných tabulkách. Pro nemožnost konkrétněji definovat ve spojovacích tabulkách, ale pouze strukturou, není tento typ tolik používán.

Příklad

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a NATURAL JOIN tab2 b

[editovat] Vnější spojování

Vnější spojování (OUTER JOIN) generuje výstupní množinu omezenou o spojovací podmínky podobně jako vnitřní spojování, pokud však není nalezen vhodný řádek v druhé množině, je nenalezený řádek nahrazen hodnotami NULL. Dle typu vnějšího spojení mohou být doplňovány řádky z jedné nebo obou vstupních množin. Výsledkem vnějšího spojování jsou řádky naplněné hodnotami ze vstupních množin i částečně.

[editovat] Úplné vnější spojování

Úplné vnější spojování (FULL OUTER JOIN) doplňuje NULL hodnoty do obou vstupních množin.

Příklad

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a FULL OUTER JOIN tab2 b on a.col1 = b.col1

[editovat] Částečné vnější spojování

Pro částečné vnější spojování jsou definována klíčová slova LEFT a RIGHT, která definují, která vstupní množina má zahrnuté všechny řádky v množině výstupní, tj. která vstupní množina není doplňována o NULL hodnoty.

Příklad

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a LEFT OUTER JOIN tab2 b on a.col1 = b.col1

SELECT a.col1, a.col2, b.col1, b.col2
FROM tab1 a RIGHT OUTER JOIN tab2 b on a.col1 = b.col1

[editovat] Podívejte se také

V jiných jazycích