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

