Nacházíte se: tvorba webu :: mysql :: join

MySQL - JOIN

V minulém díle jsme si řekli, jak na základní práci s daty. Naučili jsme se vypsat jednotlivé záznamy splňující podmínky, řekli jsme si něco o regulárních výrazech a dnes se podíváme na to, jak spojit tabulky a vypsat data z výsledného spojení.

JOIN

JOIN je jedna z konstrukcí jazyka SQL, slouží ke spojování dvou a více tabulek k realizaci SELECTu.

Syntaxe

  SELECT seznam_sloupců FROM tabulka_1 
  [CROSS|INNER|NATURAL|LEFT|RIGHT|[FULL ]OUTER] JOIN tabulka_2
  ON podmínka [WHERE podmínka] [ORDER BY sloupce] [LIMIT počet_záznamů];


Varianty spojování pomocí JOIN

Existuje několik variant spojování tabulek, zde jsou vyjmenovány:

  • vnitřní INNER JOIN
  • křížové CROSS JOIN
  • přirozené NATURAL JOIN
  • vnější OUTER JOIN
  • úplné vnější FULL OUTER JOIN
  • částečné vnější
    • z leva LEFT JOIN
    • z prava RIGHT JOIN


Vnitřní spojení INNER JOIN

INNER JOIN, tedy vnitřní spojení, je jedním z nejvíce používaných spojení vstupních množin, většinou tabulek, v praxi. V podstatě jde o křížové spojení, které je oříznuté na výstupu o záznamy, které nevyhovují použité podmínce.

Příklad:

  SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
  FROM   tabulka1 a, tabulka2 b WHERE a.sloupec1 = b.sloupec1;

Řešení pomocí INNER JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a INNER JOIN tabulka2 b ON a.sloupec1 = b.sloupec2;


Křížové spojení CROSS JOIN

CROSS JOIN, tedy křížové spojení, se chová jako kartézský součin vstupních množin, obvykle tabulek. Výsledná množina je tak tedy velice obsáhlá.

Příklad

pomocí INNER JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a INNER JOIN tabulka2 b ON 1 = 1;

Příklad

pomocí CROSS JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a CROSS JOIN tabulka2 b;

Příklad

pomocí klasického SELECTu

  SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
  FROM tabulka1 a, tabulka2 b;


Přirozené spojení NATURAL JOIN

NATURAL JOIN, tedy přirozené spojení, je velmi zvláštním případem spojení vstupních množin, protože automaticky spojuje vstupní množiny podle datových typů a názvů sloupců ve spojovaných vstupních množinách. Tento typ se velmi málo použivá, už jen kvůli nemožnosti cokoli definovat.

Příklad

pomocí NATURAL JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a NATURAL JOIN tabulka2 b;


Vnější spojení OUTER JOIN

OUTER JOIN, tedy vnější spojení, funguje podobně jako vnitřní spojení, vygeneruje výstupní množinu ze vstupních množin tak, že zahodí ty záznamy, které nesplňují spojovací podmínku. OUTER JOIN se liší od vnitřního tak, že pokud není k řádku nalezen v druhé množině vhodný záznam, je řádek vyplněn hodnotami NULL.

Příklad

pomocí OUTER JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a OUTER JOIN tabulka2 b ON a.sloupec1 = b.sloupec1;


Úplné vnější spojování FULL OUTER JOIN

FULL OUTER JOIN, tedy úplné vnější spojení, funguje stejně jako OUTER JOIN (vnější spojení), jen při nenalezení vhodného záznamu z druhé množiny nahradí hodnoty v řádcích obou množin hodnotami NULL.

Příklad

pomocí OUTER JOIN

   SELECT a.sloupec1, a.sloupec2, b.sloupec1, b.sloupec2
   FROM tabulka1 a FULL OUTER JOIN tabulka2 b ON a.sloupec1 = b.sloupec1;


Částečné vnější spojování [LEFT, RIGHT] JOIN

[LEFT, RIGHT] JOIN, tedy částečné spojení, říká, která z množin bude mít zahrnuty všechny své záznamy ve výstupní množině a která z nich bude tedy vyplňena hodnotami NULL při nesplnění podmínky.

Příklad:

Máme tabulku 'autori' a 'tabulku' prispevky. V tabulce 'autori' je uloženo id a jméno. V tabulce 'příspěvky' jsou uloženy id autora a text příspěvku. V tomto příkladu chceme, aby se nám jedním příkazem místo id v tabulce příspěvky načetlo jméno autora, kterému id patří.

Řešení:

  select a.jmeno from autori a left join prispevky p on a.id=p.autor
úvod | tvorba webu | ostatní | služby | návštěvní kniha | kontakt