Vnitřní spojení

Princip

O vnitřním spojení tabulek jsme si zatím uvedli pouze jakousi definici, která říká, že vnitřní spojení vrací pouze takové řádky obou tabulek, u nichž jsou hodnoty obou propojovaných sloupců shodné. A teď trošku lidsky! 🙂

Já o vnitřním spojování tabulek, tedy o INNER JOIN často říkávám, že jsou jen pro zamilované páry . Jak to chápat? Pojďme si předvést malou ukázku…

Mějme dvě databázové tabulky: zakaznik a objednavka. Budeme chtít vypsat všechny záznamy z obou tabulek, tedy jinými slovy, všechny zákazníky a jejich objednávky.

 

 

A nyní se podívejme, jak by mohla vypadat data jednotlivých tabulek. Třeba takto…

 

idjmenoprijmeniemail
1JanNovotnýjan.novotny@email.cz
2PetrStarýpetr.stary@email.cz
3MonikaBláhovámonika.blahova@email.cz
4EduardKameníkeduard.kamenik@email.cz
5MartinBláhamartin.blaha@email.cz
Tabulka zakaznik
idcislozakaznik_id
1975988521
2985285664
3928425651
4952685215
5966846644
Tabulka objednavka

 

Když se dobře podíváme na obě tabulky a jejich data, zjistíme, že někteří zákazníci mají více objednávek, jsou to pan Novotný a Kameník. Na druhou stranu jsou mezi zákazníky i takoví, kteří nemají vůbec žádnou objednávku, pan Starý a paní Bláhová.

Teď to pojmenujeme trošku databázověji… entita zakaznik obsahuje instance s ID 2 a 3, které nemají navázán vztah s žádnou instancí entity objednavka. Prostě nemají objednávku! 🙂

Nyní se vraťme k tomu, co jsem uvedl na začátku… INNER JOIN je jen pro zamilované páry. Jinými slovy, vnitřní spojení nám vrátí jen takové záznamy z obou spojovaných tabulek, které jsou spárovány se záznamy z druhé tabulky. Na základě dat z tabulek můžeme odvodit, že ve výpisu nebude pan Starý ani paní Bláhová, protože nemají vztah s žádným záznamem z tabulky objednavka. Výpis dat pomocí příkazu SELECT by pak vypadal následovně:

 

idjmenoprijmeniemailidcislozakaznik_id
1JanNovotnýjan.novotny@email.cz1975988521
1JanNovotnýjan.novotny@email.cz3928425651
4EduardKameníkeduard.kamenik@email.cz2985285664
4EduardKameníkeduard.kamenik@email.cz5966846644
5MartinBláhamartin.blaha@email.cz4952685215
Výsledek příkazu SELECT

 

Vidíme, že výsledný výpis obsahuje data z obou spojených tabulek. Aby bylo jasnější, která data jsou ze které tabulky, záhlaví sloupců jsou obarvena. Zelená záhlaví označují sloupce z tabulky zakaznik, zatímco modrá záhlaví sloupce z tabulky objednavka. Data z obou tabulek, která mají spolu navázán vztah, vidíme v jediné tabulce… a to je joinování typu INNER JOIN.

Spojení pomocí USING