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 JOIN na LEFT JOIN prohození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 JOIN ponechá pouze odpovídající řádky.
  • LEFT JOIN ponechá všechny řádky z levé tabulky.
  • RIGHT JOIN ponechá všechny řádky z pravé tabulky.
  • CROSS JOIN vrací všechny kombinace.
  • Čárkový join je totéž co CROSS JOIN (a s filtrem WHERE se z něj stane INNER JOIN).