Obsah obrázku voda, exteriér, budova, vsedě Popis byl vytvořen automaticky Z3104 GEODATABÁZE – LEKCE 5 Mgr. Martina Klocová OBSAH HODINY •Připojení – kontrola připojení •Trocha opakování ☺ •Trocha teorie – JOINs •Kahoot! •Praxe OPÁČKO •BETWEEN •IS NOT NULL •Jaký je rozdíl mezi _ a % v textovém dotazování? KOMENTÁŘE KARDINALITA Obsah obrázku hodiny, kreslení, visící Popis byl vytvořen automaticky KARDINALITA Obsah obrázku text, dvoupatrový Popis byl vytvořen automaticky KARDINALITA – KONTROLA CIZÍHO KLÍČE CREATE TABLE book_author ( book_id INT NOT NULL UNIQUE, author_id INT NOT NULL UNIQUE, FOREIGN KEY (book_id) REFERENCES books(id), FOREIGN KEY (author_id) REFERENCES authors(id) ); VKLÁDÁNÍ CIZÍCH KLÍČŮ •Vložit cizí klíč (neboli referenci na jinou tabulku) je možné dvěma způsoby VKLÁDÁNÍ CIZÍCH KLÍČŮ - POSTUPNĚ SELECT id FROM autor WHERE prijmeni = 'Pratchett'; INSERT INTO kniha (id, nazev, id_autora) VALUES (7, 'Čaroprávnost', ###), (8, 'Soudné sestry', ###); -- místo ### je nalezené ID z předchozího dotazu Tímto způsobem je možné zkontrolovat, že nám záznam skutečně vrací ID (resp. záznam), který opravdu chceme. VKLÁDÁNÍ CIZÍCH KLÍČŮ - NAJEDNOU INSERT INTO kniha (id, nazev, id_autora) VALUES (7, 'Čaroprávnost', (SELECT id FROM autor WHERE prijmeni = 'Pratchett') ), (8, 'Soudné sestry', (SELECT id FROM autor WHERE prijmeni = 'Pratchett') ); Pokud jsme si jisti, že nám záznam vybere správného autora, můžeme použít vnořený SELECT. KOMBINOVÁNÍ DAT Z VÍCE TABULEK •CROSS JOIN •INNER JOIN •OUTER JOIN CROSS JOIN ‚Každý s každým‘ Př: V tabulce studenti je 25 záznamů, v tabulce předměty je 40 záznamů. Kolik záznamů bude ve sloučené tabulce a proč? CROSS JOIN ‚Každý s každým‘ Př: V tabulce studenti je 25 záznamů, v tabulce předměty je 40 záznamů. Kolik záznamů bude ve sloučené tabulce a proč? 1000 – 25x40 SELECT * FROM studenti, barvy; SELECT * FROM studenti CROSS JOIN barvy; Obsah obrázku stůl Popis byl vytvořen automaticky CROSS JOIN Obsah obrázku stůl Popis byl vytvořen automaticky CROSS JOIN SELECT * FROM student CROSS JOIN barvy WHERE barvy.barva ='modrá'; Obsah obrázku text Popis byl vytvořen automaticky CROSS JOIN - POUŽITÍ •NEPOUŽÍVAT – ne bezdůvodně •Velmi náročný pro výpočet při větším množství záznamů •Velká výstupní sada informací (tabulka) •Pomalý •Omezit podmínkou! INNER JOIN •Nejpoužívanější •INNER JOIN ON (TRUE) je shodný s CROSS JOIN •INNER JOIN navíc určuje podmínku výběru (které řádky zůstanou) •Vybere a spojí pouze ty řádky, které je schopen spárovat (viz příklad dále) INNER JOIN Obsah obrázku stůl Popis byl vytvořen automaticky Obsah obrázku text, snímek obrazovky Popis byl vytvořen automaticky INNER JOIN SELECT * FROM autor INNER JOIN kniha ON (autor.id = kniha.id_autora); SELECT * FROM autor INNER JOIN kniha WHERE autor.id = kniha.id_autora; OUTER JOIN •LEFT [OUTER] JOIN •RIGHT [OUTER] JOIN •FULL [OUTER] JOIN LEFT OUTER JOIN •Vybere všechny záznamy z "LEVÉ" tabulky a přiřadí záznamy, které může. Ke zbylým záznamům přiřadí NULL. SELECT * FROM autor LEFT OUTER JOIN kniha ON (autor.id = kniha.id_autora); RIGHT OUTER JOIN •Vybere všechny záznamy z "PRAVÉ" tabulky a přiřadí záznamy, které může. Ke zbylým záznamům přiřadí NULL. SELECT * FROM autor RIGHT OUTER JOIN kniha ON (autor.id = kniha.id_autora); FULL OUTER JOIN •Vybere všechny záznamy z "PRAVÉ" i "LEVÉ" tabulky a přiřadí záznamy, které může. Ke zbylým záznamům přiřadí NULL. SELECT * FROM autor FULL OUTER JOIN kniha ON (autor.id = kniha.id_autora); Obsah obrázku ukazatel skóre, text, autobus, město Popis byl vytvořen automaticky KAHOOT! A TEĎ VY! ÚKOL 1 Vhodně propojte tabulky DĚKUJI ZA POZORNOST