Spájanie tabuliek

Ciele
  1. Príkaz SELECT.
  2. Vnútorné spájanie (INNER JOIN).
  3. Prirodzené spájanie (NATURAL JOIN).
  4. Vonkajšie spájanie (OUTER JOIN).
  5. Rekurzívne spájanie.
Úvod
    Spájanie tabuliek nám umožňuje využívať cudzie a primárne kľúče na získanie informácií o vzťahoch medzi entitami uloženými v databáze. Napr. v databáze Chinook môžeme vidieť názvy album, do ktorých patria jednotlivé skladby spojením tabuľky Track s tabuľkou Album použitím cudzieho kľúča Track.albumId, ktorým sa každá skladba odkazuje na album, do ktorého patrí:
    
    SELECT track.name, album.title
    FROM album JOIN track ON album.albumId = track.albumId;
    Pracujeme na databáze Chinook s nasledovnou schémou.
    Obr.: : Relačný model databázy Chinook
Postup
  1. Úloha: Vypíš zoznam všetkých videosúborov (v názve typu média je 'video'). Pre overenie vedz, že je ich 214.
    Poznámka: Pre zistenie typu média skladby si musíš spojiť tabuľky Track a MediaType.
    Úloha: Vypíš zoznam všetkých zákaznikov, o ktorých sa stará Margaret Park-ová. Vo výpise zobraz zákaznikovo priezvisko, meno, a jeho telefónny kontakt, pričom zákaznikov zoraď najprv podľa priezviska a potom podľa mena. Pre overenie vedz, že je ich 20 a jeden z nich je Bjørn Hansen.
    Poznámka: Opäť pri zložitejších úlohach pracuj iteratívne. Najprv skús vypísať iba kombinácie zamestnanec - jeho zákazník. Potom pridaj klauzulu na vyfiltrovanie tých záznamov, v ktorých vystupuje Margaret Park. Potom si daj zobraziť iba meno, priezvisko a telefón zákazníka. A nakoniec výsledok usporiadaj.
  2. V rámci cvičenia si trošku precvičíme aj prirodzené spájanie, aj ked sa v praxi veľmi nevyužíva. Možno si vďaka tomuto precvičeniu uvedomíš, prečo sa nezvykne používať.

    Na minulom cvičení bola už jedna úloha aj na spájanie tabuliek. Chcel som od teba, aby si vypísal/-a názvy všetkých albumov skupiny U2. Na to, aby si to dokázal, si musel/-a spojiť tabuľky Album a Artist na podmienke 'Album.artistid=Artist.artistid'. Keďže vidíme, že stĺpce pre cudzí a primárny kľúč vyjadrujúci vzťah medzi albumom a umelcom sa volajú rovnako, vieme, že na ich spojenie môžeme použiť prirodzené spájanie (NATURAL JOIN).

    Úloha: Opäť nájdi zoznam všetkých albumov skupiny U2, ale tentokrát pri tom použi NATURAL JOIN.
    Úloha: Skús prepísať aj riešenie dnešnej prvej úlohy použitím NATURAL JOIN-u. Je to vôbec možné? Ak si nevieš rady s touto úlohou, zobraz si riešenie:
    Zobraziť riešenie
    Úloha: Prepíš teda select na získanie zoznamu všetkých video súborov použitím kombinácie JOIN USING. Táto kombinácia funguje tak ako prirodzené spájanie, avšak umožňuje explicitne uviesť názvy stĺpcov, na základe ktorých sa majú tabuľky spájať. Týmto vyriešiš problém zhody názvov stĺpcov, ktoré nevyjadrujú vzťah medzi tabuľkami (v tomto prípade stĺpec name).
    Poznámka: Práve to, že NATURAL JOIN spája tabuľky podľa všetkých stĺpcov s rovnakým menom, je dôvod, prečo sa nezvykne používať. Ak človek zmení jednu tabuľku pridaním stĺpca, ktorý bude mať náhodou rovnaký názov, ako existujúci stĺpec v druhej tabuľke, SELECT s NATURAL JOIN-om sa zrazu začne správať inak ako doposiaľ.
  3. Úloha: Vypíš zoznam všetkých umelcov, ktorí nemajú žiaden album.
    Poznámka: Použi LEFT OUTER JOIN na to, aby sa pri spájaní do výsledku dostali aj tí umelci, ktorí žiaden album nespravili. Potom už len potrebuješ odfiltrovať z výsledku všetkých ostatných. Pre overenie vedz, že ich je 71.
    Úloha: Vypíš zoznam zamestnancov, spolu s menami (meno zreťazené s priezviskom) ich priamych nadradených. Nezabudnite vypísať aj šéfa, aj keď priameho nadriadeného nemá.
    Úloha: Zisti meno, priezvisko a dátum narodenia najstaršieho zamestnanca.
    Poznámka: Pre vyriešenie použi rovnaký princíp, aký sme použili pre riešenie problému umelcov bez albumu - kombináciu LEFT JOIN-u s testom na null hodnotu.
    Poznámka: Okrem toho si však potrebuješ uvedomiť ešte jednu vec, a to že v podmienke spájania nemusí byť len test na rovnosť cudzieho a primárneho kľúča, ale môžeš napr. chcieť, aby dátum narodenia prvého človeka v dvojici bol starší ako dátum druhého človeka.
Zdroje
  1. Prednáška 10: Vnorené dopyty
Doplňujúce úlohy
    Úloha:

    Chinook

    Vypíš zoznam všetkých zákazníkov, ktorý v roku 2012 nič neobjednali. Výsledný zoznam usporiadaj podľa priezviska a mena vzostupne. Pre overenie vedz, že ich je 12.
    Úloha:

    Podnik

    Vypíš zoznam pracovníkov, nimi čerpaný počet dní dovolenky v roku 2016 a text, či čerpali resp. nečerpali dovolenku. Napr.:
    priezvisko meno dov_cerpane Cerpal?
    Bajny Ivan 23 cerpal
    Maly Jan 10 cerpal
    Vodny Marian 0 necerpal
    Poznámka: Pre vypísanie hlášky, či zamestnanec dovolenku čerpal alebo nečerpal, použi funkciu DECODE.
    Úloha:

    Podnik

    Vypíš meno, priezvisko a nečerpanú dovolenku podnikových zamestnancov, ak predpokladáme, že aktuálna nečerpaná dovolenka je ostatok z roku 2015 + ostatok z aktuálneho roku 2016. Pre overenie vedz, že napr. Ivan Bajny ma ostávajúcu dovolenku na 22 dní.
    Úloha:

    Chinook

    Ktoré playlisty nemajú žiadnu skladbu zo žánru Latin? Pre overenie vedz, že je ich 14.
comments powered by Disqus