• 20.8.2016
  • Ing. Jan Zedníček - Data Engineer & Controlling
  • 0

Většinou si při práci s SQL databází nevystačíme pouze s 1 tabulkou. Některé hodnoty se nacházejí v jedné tabulce a další hodnoty v druhé = v rozdělení informací do mnoha tabulek , které jsou mezi sebou propojeny (přes klíče) spočívá podstata relačních databází.

Dříve nebo později se budeme muset naučit tabulky spojovat. Tak pojďme na to.

Existují 5 základních druhů joinů: INNER JOIN (aktuální článek), LEFT JOIN, RIGHT JOIN, CROSS JOIN, FULL JOIN

Tip: Příkaz INNER JOIN a JOIN je ekvivalentní

Syntaxe INNER JOIN

SELECT
  [Tabulka_A].[Sloupec 1]
  ,[Tabulka_A].[Sloupec 2]
  ,[Tabulka_B].[Sloupec 3]
FROM [Tabulka_A]
     INNER JOIN [Tabulka_B]
       ON [Tabulka_A].[Id] = [Tabulka_B].[Id]

Pro úplné zjednodušení si představme 2 tabulky a každá z těchto tabulek bude obsahovat pouze 1 sloupec [cislo]:

  • Tabulka A obsahuje sloupec [cislo]: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
  • Tabulka B obsahuje sloupec [cislo]: 1, 2, 3, 100, 150

Co bude výsledkem skriptu?

SELECT
[Tabulka_A].[Cislo], [Tabulka_B].[Cislo]
FROM [Tabulka_A]
     INNER JOIN [Tabulka_B]
       ON [Tabulka_A].[Cislo] = [Tabulka_B].[Cislo];

Výsledkem budou pouze 3 řádky:

SQL Spojovani tabulek - inner join

Tip: Podívejte se na příklady všech typů spojování tabulek ať pochopíte rozdíly mezi nimi. U všech používám stejný příklad – fotbalové týmy

Příklad na INNER JOIN – Fotbalové týmy

Princip Spojování tabulek si ukážeme na příkladu s fotbalovými týmy. Mějme 2 tabulky, prohlédněte si je:

  • [Fotbalove_tymy] ([ID], [Tym], [Id_mesto]) – tabulka se seznamem fotbalových týmů
  • [Mesta] ([ID], [Nazev_mesta]) – tabulka s městy
fotbalove-tymy-priklad
Vstupní data

Úkolem bude zobrazit si seznam fotbalových týmů a k nim domácí město. Skript bude vypadat takto:

SELECT
  [Fotbalove_tymy].[ID]
  ,[Fotbalove_tymy].[Tym]
  ,[Mesto].[Mesto]
FROM [Fotbalove_tymy]
     INNER JOIN [Mesto]
       ON [Fotbalove_tymy].[Id_Mesto] = [Mesto.Id];

Vytváříme relaci mezi tabulkami a podmínka, na základě které se nám záznamy v obou tabulkách spojí leží v ON klauzuli ([Fotbalove_tymy].[Id_Mesto] = [Mesto.Id]).

inner-join-final
Výsledek po použití inner join

Vyhodnocení: Ve výsledku chybí tým Brno, protože v tomto případě nebylo nalezeno ID=0 v tabulce s městy. Nebyla tedy splněna podmínka pro pravou (B) tabulku s městy z ON klauzule a Brno tak vypadává z výsledku.

5/5 - (1 vote)

Ing. Jan Zedníček - Data Engineer & Controlling

Jmenuji se Honza Zedníček a působím jako freelancer. Pracoval jsem dříve také jako BI developer, finanční controller a analytik. Vše pro společnosti z oblasti IT, bankovnictví, consultingu a výroby. Po práci si rád zahraju tenis, volejbal, šachy, zajdu do posilovny a občas neúspěšně odpálím pár balónků v golfu 🏌️

Již cca 10 let zapisuji na tento web různé návody určené zejména odborné veřejnosti, studentům a zájemcům o informace z oblastí Business intelligence, korporátních financí a reportingu.

🔥 Přihlašte se do naší Excel facebook skupiny (2.4k+ členů), kde si pomáháme Excel CZ/SK diskuse »

Leave a Reply

Your email address will not be published. Required fields are marked *