SELECT rok_produkce, hodnoceni_csfd, nazev_filmu FROM filmy
ORDER BY rok_produkce ASC, hodnoceni_csfd DESC;
SELECT hodnoceni_csfd, nazev_filmu FROM filmy
WHERE reziser_prij = 'Hrebejk';
SELECT hodnoceni_csfd, nazev_filmu FROM filmy
WHERE hodnoceni_csfd >= 90;
SELECT rok_produkce, hodnoceni_csfd, nazev_filmu FROM filmy
WHERE rok_produkce = '2012' AND hodnoceni_csfd > 90;
SELECT naklady, reziser_prij, nazev_filmu FROM filmy
WHERE
(reziser_prij = 'Sverak' OR reziser_prij = 'Menzel')
AND naklady < 1 000 000
ORDER BY naklady;
SELECT nazev_filmu FROM filmy
WHERE naklady IS NULL;
SELECT premiera, nazev_filmu FROM filmy
WHERE rok_produkce = '2013' AND premiera IS NOT NULL;
expression = NULL × expression IS NULL
SELECT naklady, nazev_filmu FROM filmy
WHERE naklady BETWEEN 1000000 AND 2000000;
SELECT nazev_filmu FROM filmy
WHERE nazev_filmu LIKE 'Tři%';
SELECT nazev_filmu, reziser_prij
FROM filmy
WHERE reziser_prij IN ('Sverak', 'Menzel');
Autoři (authors) | ||
---|---|---|
id | Jmeno | Prijmeni |
234 | Terry | Pratchett |
543 | Stephen | Baxter |
Knihy (books) | |
---|---|
id | Název |
1 | Dlouhá země |
2 | Barva Kouzel |
3 | Otec Prasátek |
CREATE TABLE book_author (
book_id INT NOT NULL,
author_id INT NOT NULL,
FOREIGN KEY (book_id) REFERENCES books(id),
FOREIGN KEY (author_id) REFERENCES authors(id)
);
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
Studenti | ||
---|---|---|
UČO | Jmeno | Prijmeni |
234 | Jan | Novák |
543 | Tomáš | Holý |
Barvy | |
---|---|
Barva | Cena |
červená | 400 |
zelená | 200 |
modrá | 500 |
SELECT * FROM studenti, barvy;
SELECT * FROM studenti CROSS JOIN barvy;
UČO | Jmeno | Prijmeni | Barva | Cena |
---|---|---|---|---|
234 | Jan | Novák | červená | 400 |
543 | Tomáš | Holý | červená | 400 |
234 | Jan | Novák | zelená | 200 |
543 | Tomáš | Holý | zelená | 200 |
234 | Jan | Novák | modrá | 500 |
543 | Tomáš | Holý | modrá | 500 |
Následně je možné z tabulky klasicky vybírat pomocí WHERE.
SELECT * FROM studenti, barvy WHERE barvy.barva ='modrá';
UČO | Jmeno | Prijmeni | Barva | Cena |
---|---|---|---|---|
234 | Jan | Novák | modrá | 500 |
543 | Tomáš | Holý | modrá | 500 |
Autor | ||
---|---|---|
ID | Jmeno | Prijmeni |
888 | Karel | Čapek |
555 | Terry | Pratchett |
444 | Josef | Lada |
Kniha | ||
---|---|---|
ID | Nazev | Id_autora |
1 | RUR | 888 |
2 | Věc makropulos | 888 |
3 | Barva kouzel | 555 |
4 | Lehké fantastično | 555 |
5 | Dobrý voják švejk | 111 |
SELECT * FROM autor
INNER JOIN kniha ON (autor.id = kniha.id_autora);
SELECT * FROM autor
CROSS JOIN kniha WHERE autor.id = kniha.id_autora;
ID(autor) | Jmeno | Prijmeni | ID(kniha) | Název |
---|---|---|---|---|
888 | Karel | Čapek | 1 | RUR |
888 | Karel | Čapek | 2 | Věc makropulos |
555 | Terry | Pratchett | 3 | Barva kouzel |
555 | Terry | Pratchett | 4 | Lehké fantastično |
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);
ID(autor) | Jmeno | Prijmeni | ID(kniha) | Název |
---|---|---|---|---|
888 | Karel | Čapek | 1 | RUR |
888 | Karel | Čapek | 2 | Věc makropulos |
555 | Terry | Pratchett | 3 | Barva kouzel |
555 | Terry | Pratchett | 4 | Lehké fantastično |
444 | Josef | Lada | NULL | NULL |
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);
ID(autor) | Jmeno | Prijmeni | ID(kniha) | Název |
---|---|---|---|---|
888 | Karel | Čapek | 1 | RUR |
888 | Karel | Čapek | 2 | Věc makropulos |
555 | Terry | Pratchett | 3 | Barva kouzel |
555 | Terry | Pratchett | 4 | Lehké fantastično |
NULL | NULL | NULL | 5 | Dobrý voják Švejk |
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);
ID(autor) | Jmeno | Prijmeni | ID(kniha) | Název |
---|---|---|---|---|
888 | Karel | Čapek | 1 | RUR |
888 | Karel | Čapek | 2 | Věc makropulos |
555 | Terry | Pratchett | 3 | Barva kouzel |
555 | Terry | Pratchett | 4 | Lehké fantastično |
444 | Josef | Lada | NULL | NULL |
NULL | NULL | NULL | 5 | Dobrý voják Švejk |
Vložit cizí klíč (neboli referenci na jinou tabulku) je možné dvěma způsoby
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.
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.
Navrhněte databázi oblíbených filmů obsahující popisné informace o daných filmech (český název, anglický název, rok vydání, žánr, hodnocení CSFD a další) + jejich herecké obsazení (jméno, příjmení, datum narození a další).
Kdo se nerad dívá na filmy, nebo má raději jiné téma
(např. hry či knihy) můžete navrhnout databázi o těchto tématech.
Podmínkou je, že databáze obsahuje alespoň 4 rozdílné tabulky, jednu relaci 1:M a jednu relaci M:N
Dbejte na správnou volbu datových typů, omezení sloupců a definování odpovídající referenční integrity!
Vypište z tabulek všechny komedie i s hereckým obsazením a proveďte jejich seřazení sestupně podle hodnocení ČSFD?
V jakých filmech (dle žánru) hraje Váš oblíbený herec (herečka)? Uveďte český i anglický název filmu a proveďte jejich seřazení vzestupně podle roku produkce.
Ti kteří si zvolili jiné téma, provedou výběry analogicky dle tématu.