Úvod do SQL Hodina č. 9 Knihy Objednávky id_kniha 1:m Každá objednávka by mohla obsahovat pouze jednu knihu... Knihy Objednávky id_objednavka 1:m Každá kniha by mohla být jen na jedné objednávce Knihy Objednávky m:n Knihy Objednávky Položka objednávky Knihy Objednávky Položka objednávky id_kniha Knihy Objednávky Položka objednávky id_kniha id_objednavka Knihy Objednávky Položka objednávky id_kniha id_objednavka ? eshop-db-is.jdem.cz model-eshop-is.jdem.cz Které nakladatelství vydalo nejvíc knížek v holandštině? SELECT COUNT(*) as pocet, nakladatelstvi.nazev as nakladatelstvi FROM knihy INNER JOIN jazyky_vydani ON jazyky_vydani.id = knihy.jazyk INNER JOIN nakladatelstvi ON nakladatelstvi.id = knihy.nakladatelstvi WHERE jazyky_vydani.nazev LIKE "holandština" GROUP BY nakladatelstvi.id ORDER BY pocet DESC Vypište knihy spolu s výpisem jejich žánrů. SELECT k.id, k.nazev, GROUP_CONCAT(zanr) FROM knihy k INNER JOIN knihy_zanry ON k.id = knihy_id INNER JOIN zanry z ON z.id = zanry_id GROUP BY k.id irozhlas.jdem.cz (osekaná) databáze článků a jejich štítků. Pozor, tabulka "clanky" obsahuje 250 000 záznamů a tabulka "clanky_klicova_slova" dokonce 845 000, čili se může stát, že budete na výsledky svých dotazů chvilku čekat. Doporučuji k dotazům přídávat (např) LIMIT 50, abyste si nezahltili sqlite manager Články Klíčová slova Klíčové slovo u článku clanky klicova_slova clanky_klicova_slova Vypište nejpoužívanější klíčová slova. SELECT name, count(*) FROM klicova_slova INNER JOIN clanky_klicova_slova ON tid = klicove_slovo_id GROUP BY tid ORDER BY count(*) DESC LIMIT 10 Úkol: Najděte nepoužívaná klíčová slova Než přejdete na další slajdy, zkuste sami vymyslet nějaké řešení. Alespoň popsat, co by tak mohlo být "nepoužívané" slovo. Co znamená "nepoužívané" musíme určit my... ...tak třeba takové, které bylo použíto maximálně 3x, přičemž poslední použítí je alespoň rok a půl staré. Pokud bychom nepřidali druhou podmínku, mohli bychom jako "nepoužívané" označit i klíčové slovo, které se vynořilo dnes, ale bylo použíto teprve na dva články. A takové slovo určitě "nepoužívané" není. pozor: jak hodnota "3", tak "rok a půl" jsou zvoleny "pocitově" a klidně můžete dát nějaké jiné. V praxi je vždy dobré vyzkoušet různé možnosti a koukat se, jak to ovlivňuje výsledky. SELECT name, count(*), MAX(vytvoreno) FROM klicova_slova INNER JOIN clanky_klicova_slova ON tid = klicove_slovo_id INNER JOIN clanky ON nid = clanek_id GROUP BY tid HAVING count(*) < 4 AND MAX(vytvoreno) < "2016-04-01 00:00:00"