Vysvetlenie SQL JOIN: INNER, LEFT, RIGHT, CROSS (a čiarkový join)

Published: 2026-02-04

SQL joiny vám umožňujú kombinovať riadky z dvoch tabuliek na základe príbuzných stĺpcov. Tento krátky tutoriál ukazuje štyri základné typy joinov a vysvetľuje, prečo je čiarkový join to isté ako CROSS JOIN.

Vzorové dáta

Vo všetkých príkladoch používame dve tabuľky:

Tabuľka employees:

id name dept_id
1 Ava 10
2 Ben 20
3 Cara NULL

Tabuľka departments:

dept_id dept_name
10 Sales
20 Engineering
30 Support

Vyskúšajte joiny vo svojom prehliadači

Ukážkové dopyty môžete spúšťať priamo na stránke. Upravte dopyt a kliknite na Run.

INNER JOIN

Vráti iba riadky, ktoré sa zhodujú v oboch tabuľkách.

Výsledok: Ava/Sales, Ben/Engineering. Cara je vynechaná, pretože nemá zodpovedajúce oddelenie, a Support je vynechané, pretože v oddelení 30 nie je žiadny zamestnanec.

LEFT JOIN (LEFT OUTER JOIN)

Vráti všetky riadky z ľavej tabuľky plus zodpovedajúce riadky z pravej tabuľky. Nezodpovedajúca pravá strana sa stane NULL.

Výsledok: Ava/Sales, Ben/Engineering, Cara/NULL. Všetci zamestnanci sú zachovaní.

RIGHT JOIN (RIGHT OUTER JOIN)

Vráti všetky riadky z pravej tabuľky plus zodpovedajúce riadky z ľavej tabuľky. Nezodpovedajúca ľavá strana sa stane NULL.

Výsledok: Ava/Sales, Ben/Engineering, NULL/Support. Všetky oddelenia sú zachované.

Poznámka: Mnohí vývojári dávajú prednosť prepísaniu RIGHT JOIN na LEFT JOIN zamenením poradia tabuliek kvôli čitateľnosti a konzistentnosti.

CROSS JOIN

Vráti kartézsky súčin (všetky kombinácie) dvoch tabuliek.

Výsledok: 3 × 3 = 9 riadkov (každý zamestnanec spárovaný s každým oddelením).

Čiarkový join (zastaralá syntax)

Čiarkový join je to isté ako CROSS JOIN. Vypisuje tabuľky oddelené čiarkami v klauzule FROM:

Toto vytvorí ten istý kartézsky súčin ako CROSS JOIN. Ak pridáte filter do klauzuly WHERE, správa sa to ako INNER JOIN:

Aj keď je stále platná, čiarková syntax sa považuje za zastaranú, pretože mieša logiku joinu s filtrami a môže byť ťažšie čitateľná. Uprednostnite explicitnú syntax JOIN ... ON.

DbGate: Automatické LEFT JOIN pri rozbaľovaní stĺpcov

V prehliadači dát nástroja DbGate automatické rozbalenie stĺpca s cudzím kľúčom vygeneruje dopyt s LEFT JOIN, aby sa natiahli súvisiace dáta bez zahodenia riadkov z hlavnej tabuľky. Vaša základná množina dát tak zostane nedotknutá, pričom súvisiace polia sú okamžite k dispozícii.

Zhrnutie

  • INNER JOIN ponechá iba zodpovedajúce riadky.
  • LEFT JOIN ponechá všetky riadky z ľavej tabuľky.
  • RIGHT JOIN ponechá všetky riadky z pravej tabuľky.
  • CROSS JOIN vráti všetky kombinácie.
  • Čiarkový join je to isté ako CROSS JOIN (a s filtrom WHERE sa z neho stane INNER JOIN).