Úvod do jazyka SQL Hodina č. 8 JOIN PříspěvkyDonoři ID Jméno Kontakt Telefon Poznámka 1 Honza jsem@posp.cz 111 Nevolat před 10 dopo 2 Tomáš fil.hrabal@gmail.com 222 3 Eliška eliska@frankbold.org 333 Pracuje ve FrankBold Donor Příspěvek Kdy Kampaň 1 300 30. 10. 2014 hithit 1 1000 1. 11. 2014 konktatní 2 500 1. 11. 2014 hithit 3 300 30. 10. 2014 kontaktní ID Jméno Kontakt Telefon Poznámka 1 Honza jsem@posp.cz 111 Nevolat před 10 dopo 2 Tomáš fil.hrabal@gmail.co m 222 3 Eliška eliska@frankbold.or g 333 Pracuje ve FrankBold Donor Příspěvek Kdy Kampaň 1 300 30. 10. 2014 hithit 1 1000 1. 11. 2014 konktatní 2 500 1. 11. 2014 hithit 3 300 30. 10. 2014 kontaktní http://fund3.jdem.cz/ PříspěvkyDonoři PříspěvkyDonoři Jeden donor může dát více příspěvků, každý příspěvek má jednoho donora 1:M PříspěvkyDonoři KatedraFakulta Jeden fakulta může může mít více kateder, každá katedra spadá pod jednu fakultu 1:M PříspěvkyDonoři PSČObec V rámci obce může být více PSČ, každé PSČ patří do jedné obce 1:M Příspě vky Donoři PSČObecOkres V každém okrese může být více obcí, každá obec je v jednom okrese 1:M Příspě vky Donoři PSČObecOkres Kraj V každém kraji může být více okresů, každý okres patří do jednoho kraje PříspěvkyBook Country Publisher ID Jméno Kontakt Poznámka 1 Honza jsem@posp.cz Nevolat před 10 dopo 2 Tomáš fil.hrabal@gmai l.com 3 Eliška eliska@eps.cz Pracuje v EPS Donor Příspěvek Kdy Kampaň 1 300 30. 10. 2014 hithit 1 1000 1. 11. 2014 konktatní 2 500 1. 11. 2014 hithit 3 300 30. 10. 2014 kontaktní V databázi jsou dvě (a více) tabulek. JOIN ID Jméno Kontakt Poznám ka 1 Honza jsem@pos p.cz Nevolat před 10 dopo 2 Tomáš fil.hrabal@ gmail.com 3 Eliška eliska@eps .cz Pracuje v EPS SELECT * FROM prispevky JOIN donori ON donori.ID = prispevky.donor Donor Příspěvek Kdy Kampaň 1 300 30. 10. 2014 hithit 1 1000 1. 11. 2014 konktatní 2 500 1. 11. 2014 hithit 3 300 30. 10. 2014 kontaktní za "JOIN" se specifikuje tabulka, kterou chcete připojit. za "ON" pak podmínka, kterou musí splnit řádky z obou tabulek, aby byly ve výsledku propojeny. JOIN SELECT * FROM prispevky JOIN donori ON donori.ID = prispevky.donor Výsledek Jméno Kontakt Poznámka Příspěvek Kampaň Honza jsem@posp.cz Nevolat před 10 dopo 300 hithit Honza jsem@posp.cz Nevolat před 10 dopo 1000 kontaktní Tomáš fil.hrabal@gma il.com 500 hithit Eliška eliska@eps.cz Pracuje v EPS 300 kontaktní Se “spojenou” tabulkou se dá pracovat úplně stejně jako s “klasickou” tabulkou Vypište všechny příspěvky vyšší než 200 korun, od dárců jejiž jméno končí na A, seřazené dle data příspěvku SELECT * FROM prispevky JOIN donori ON donori.ID = prispevky.donor WHERE jmeno LIKE "%a" AND castka > 200 ORDER BY datum Neví nic o sémantice vašich dat SELECT * FROM donori JOIN prispevky ON donori.rocnik = prispevky.castka POZOR: Databáze je hloupá! Dotaz se provede, ale výsledek nedává smysl (INNER ) JOIN vs. LEFT JOIN Donoři Příspěvky Donoři Příspěvky NIC (INNER ) JOIN vs. LEFT JOIN Donoři Příspěvky (INNER) JOIN Donoři Příspěvky SELECT * FROM prispevky INNER JOIN donori ON donori.ID = prispevky.donor Ve výsledku zůstanou pouze "propojené" řádky. Nezáleží tedy na pořadí tabulek v dotazu "JOIN" a "INNER JOIN" jsou ekvivalentní Donoři Příspěvky NIC (INNER ) JOIN vs. LEFT JOIN Donoři Příspěvky LEFT JOIN Donoři Příspěvky NULL SELECT * FROM prispevky LEFT JOIN donori ON donori.ID = prispevky.donor Ve výsledku budou všechny řádky z první tabulky (zde "prispevky"), pokud k některému řádku není "co připojit", tak jsou všechny sloupečky druhé tabulky vyplněny NULL 1:M Příspě vky Donoř i KnihaJazyk Nakladatel http://books.jdem.cz/ Vypište knihy spolu s jménem nakladatele a jazykem vydání. SELECT books.title, year, publishers.publisher, languages.language FROM books LEFT JOIN publishers ON publishers.id = books.publisher_id LEFT JOIN languages ON languages.id = books.language_id