Databáze: https://is.muni.cz/el/1421/podzim2017A/IKBB68/um/66031870/books_2.sqlite Dotazy: 1. Počet knih VS primární klíč. Souhlasí ? 2. Vypiš všechny knihy s vydavetelem. 3. Vypiš všechny knihy s jazykem i vydavatelem- 4. Vypiš vydatele a počet jím vydaných knih. Seřaď od nejčastějšího vydavatele. 5. Vypiš jazyk a počet knih v něm napsaných. Seřaď od nejčastějšího jazyka. 6. Vypiš počet všech knih. 7. Vypiš všechny knihy. Vypiš název knihy a jejich vydavatele. 8. Vypiš všechny knihy. Vypiš jejich vydavatele a jazyk v němž jsou napsány, (název knihy, jméno jazyka, jméno vydavatele) 9. Vypiš jazyk knihy a počet knih napsaných v tomto jazyce. 10. Vypiš vydavatele knihy obsahující a a počet knih vydaných tímto vydavatelstvím. Vydaných knih od tohoto vydavatelství musí být mezi 100 - 300. Řešení: 1. Počet knih v tabulce je <= nejvyššímu primárnímu klíči. 2. SELECT b.title, b.year, p.publisher FROM books b INNER JOIN publishers p ON (b.publisherjd = p.id); 3. SELECT b.title, b.year, p.publisher, I.language FROM books b INNER JOIN publishers p ON (b.publisherjd = p.id) INNER JOIN languages I ON (b.languagej'd = I.id); 4. SELECT p.publisher, COUNT(b.id) AS pocet_knih FROM publishers p INNER JOIN books b ON (p.id = b.publisherjd) GROUP BY p.publisher ORDER BY pocet_knih DESC; Velice podobná otázka na které si můžeme ukázat, že nezáleží na pořadí tabulek v INNER JOIN ani na pořadí porovnávání klíčů v ON (...) 5. SELECT I.language, COUNT(b.id) AS pocet_knih FROM books b INNER JOIN languages I ON (I.id = b.languagej'd) GROUP BY I.language ORDER BY pocet_knih DESC a druhá možnost je GROUP BY I.id SELECT I.language, COUNT(b.id) AS pocet_knih FROM books b INNER JOIN languages I ON (I.id = b.languagejd) GROUP BY b.languagejd ORDER BY pocet_knih DESC 6. SELECT COUNTO FROM books; 7. SELECT b.title, p.publisher FROM books b INNER JOIN publishers p ON b.publisherjd = p.id; Tímto dotazem S INNER JOIN se připravíme o knihy bez vydavatele! Správně: SELECT b.title, p.publisher FROM books b LEFT JOIN publishers p ON b.publisherjd = p.id; 8. SELECT b.title, p.publisher FROM books b LEFT JOIN publishers p ON b.publisherjd = p.id LEFT JOIN languages I ON (b.languagejd = I.id) 9. Všechny knihy a potencionální jazyky. SELECT I.language, COUNT(b.id) AS pocet_knih FROM books b LEFT JOIN languages I ON (b.languagejd = I.id) GROUP BY I.id Všechny knihy a povinně i jazyk. SELECT I.language, COUNT(b.id) AS pocet_knih FROM books b INNER JOIN languages I ON (b.languagejd = I.id) GROUP BY I.id Protože máme na LEVÉ STRANĚ languages, chceme všechny jazyky a k nim potencionální knihu. SELECT I.language, COUNT(b.id) AS pocet_knih FROM languages I LEFT JOIN books b ON (b.languagejd = I.id) GROUP BY I.id 10. SELECT p.publisher, COUNT(b.id) AS pocet_knih FROM books b INNER JOIN publishers p ON (b.publisherjd = p.id) WHERE publisher LIKE "%a%" GROUP BY p.id HAVING pocet_knih BETWEEN 100 AND 300;