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 |
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.
Omezí počet vypisovaných řádků.
SELECT * FROM student LIMIT 20;
SELECT * FROM student LIMIT 20 OFFSET 20;
Každá hodnota je ve výsledné tabulce zobrazena pouze jenou.
SELECT DISTINCT vek FROM student;
Agregační funkce slouží k získávání agregovaných údajů z tabulky.
http://www.postgresql.org/docs/9.1/static/functions-aggregate.htmlID | Jmeno | Prijmeni | Vek |
---|---|---|---|
1 | Tomáš | Novák | 20 |
2 | Jan | Tomek | 20 |
3 | Jiří | Sobota | 20 |
4 | Petr | Zajíc | 35 |
5 | Josef | Starý | 35 |
6 | Ondráš | Lodák | 66 |
SELECT AVG(vek) FROM student;
SELECT AVG(DISTINCT vek) FROM student;
SELECT MAX(vek) FROM student;
SELECT MAX(DISTINCT vek) FROM student;
SELECT vek FROM student ORDER BY vek DESC LIMIT 1;
SELECT MIN(vek) FROM student;
SELECT MIN(DISTINCT vek) FROM student;
SELECT vek FROM student ORDER BY vek ASC LIMIT 1;
SELECT SUM(vek) FROM student;
SELECT SUM(DISTINCT vek) FROM student;
SELECT COUNT(vek) FROM student;
SELECT COUNT(DISTINCT vek) FROM student;
SELECT COUNT(vek), AVG(vek), MIN(vek), MAX(vek), SUM(vek)
FROM student;
SELECT vek, COUNT(vek) FROM student;
ERROR: column "student.vek" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT vek, COUNT(vek) FROM student;
SELECT vek, COUNT(vek) FROM student GROUP BY vek;
SELECT DISTINCT id_autora, COUNT(id_autora)
FROM kniha GROUP BY id_autora;
SELECT autor.id, autor.jmeno, autor.prijmeni,
COUNT(kniha.id_autora) FROM kniha
FULL JOIN autor ON (kniha.id_autora = autor.id)
GROUP BY autor.id, autor.jmeno, autor.prijmeni;
Vyberte všechny autory, kteří nemají jméno (pouze příjmení).
Vypište 10 knih od Terryho Pratchetta a seřaďte je podle hodnocení vzestupně (od nejmenšího po největší).
Vypište všechny autory, jejichž knihy mají český i anglický název začínající na písmeno "h" a seřaďte je podle příjmení a jména. Autoři se v záznamu budou vyskytovat maximálně jednou (DISTINCT).
Kolik autorů obsahuje databáze?
Kolik knih obsahuje databáze?
Jaké je nejvyšší hodnocení jedné z knih od George R.R. Martina
Jaké je průměrné hodnocení knih o Harrym Potterovi?
Vypište kolik knih napsali jednotliví autoři.
Seskupte počet knih podle jejich hodnocení. (Kolik knih má hodnocení 93%, kolik 94% atd...)
Kolik autorů (počet) napsalo knihy, které jsou hodnoceny na 94%?