Vysvětlení SQL JOINů: INNER, LEFT, RIGHT, CROSS (a čárkový join)
Published: 2026-02-04
SQL JOINy vám umožňují kombinovat řádky ze dvou tabulek na základě souvisejících sloupců. Tento krátký tutoriál ukazuje čtyři základní typy JOINů a vysvětluje, proč je čárkový join totéž co CROSS JOIN.
Ukázková data
Ve všech příkladech používáme dvě tabulky:
Tabulka employees:
| id | name | dept_id |
|---|---|---|
| 1 | Ava | 10 |
| 2 | Ben | 20 |
| 3 | Cara | NULL |
Tabulka departments:
| dept_id | dept_name |
|---|---|
| 10 | Sales |
| 20 | Engineering |
| 30 | Support |
Vyzkoušejte JOINy ve svém prohlížeči
Ukázkové dotazy můžete spouštět přímo na stránce. Upravte dotaz a klikněte na Run.
INNER JOIN
Vrací pouze řádky, které se shodují v obou tabulkách.
Výsledek: Ava/Sales, Ben/Engineering. Cara je vynechána, protože nemá odpovídající oddělení, a Support je vynecháno, protože v oddělení 30 není žádný zaměstnanec.
LEFT JOIN (LEFT OUTER JOIN)
Vrací všechny řádky z levé tabulky plus odpovídající řádky z pravé tabulky. Neodpovídající pravá strana se stane NULL.
Výsledek: Ava/Sales, Ben/Engineering, Cara/NULL. Všichni zaměstnanci jsou zachováni.
RIGHT JOIN (RIGHT OUTER JOIN)
Vrací všechny řádky z pravé tabulky plus odpovídající řádky z levé tabulky. Neodpovídající levá strana se stane NULL.
Výsledek: Ava/Sales, Ben/Engineering, NULL/Support. Všechna oddělení jsou zachována.
Poznámka: Mnoho vývojářů dává přednost přepsání
RIGHT JOINnaLEFT JOINprohozením pořadí tabulek kvůli čitelnosti a konzistenci.
CROSS JOIN
Vrací kartézský součin (všechny kombinace) dvou tabulek.
Výsledek: 3 × 3 = 9 řádků (každý zaměstnanec spárovaný s každým oddělením).
Čárkový join (zastaralá syntaxe)
Čárkový join je totéž co CROSS JOIN. Vypisuje tabulky oddělené čárkami v klauzuli FROM:
Toto vytváří stejný kartézský součin jako CROSS JOIN. Pokud přidáte filtr do klauzule WHERE, chová se jako INNER JOIN:
Ačkoli je tato syntaxe stále platná, je považována za zastaralou, protože míchá logiku JOINů s filtry a může být hůře čitelná. Dávejte přednost explicitní syntaxi JOIN ... ON.
DbGate: Automatické LEFT JOINy při rozbalování sloupců
V prohlížeči dat nástroje DbGate automatické rozbalení sloupce s cizím klíčem vygeneruje dotaz s LEFT JOIN, aby se načetla související data bez vyřazení řádků z hlavní tabulky. Vaše základní datová sada tak zůstane nedotčená a související pole jsou okamžitě k dispozici.
Shrnutí
INNER JOINponechá pouze odpovídající řádky.LEFT JOINponechá všechny řádky z levé tabulky.RIGHT JOINponechá všechny řádky z pravé tabulky.CROSS JOINvrací všechny kombinace.- Čárkový join je totéž co
CROSS JOIN(a s filtremWHEREse z něj staneINNER JOIN).