Pohledy
Některé dotazy jsou potřeba pořád dokola: vedoucí chce každý týden součty objednávek a podpora pořád hledá hry, které už vyšly. Pohled (anglicky view) dá dotazu název a pak ho můžete používat, jako by to byla tabulka:
CREATE VIEW vydane_hry AS
SELECT nazev, zanr, cena
FROM hry
WHERE vydano IS NOT NULL;Za CREATE VIEW (vytvoř pohled), názvem a AS následuje obyčejný SELECT. Na pohled se pak ptáte jako na kteroukoli tabulku, s WHERE, ORDER BY, spojováním a vším ostatním:
SELECT nazev, cena
FROM vydane_hry
WHERE zanr = 'Akční'
ORDER BY cena;| nazev | cena |
|---|---|
| Shadow Ninja | 649 |
| Zombie Town | 799 |
| Star Pilots | 899 |
Pohled nemá žádné vlastní řádky. Pamatuje si jen dotaz a databáze ho provede pokaždé, když pohled použijete. Pohled proto vždycky ukazuje aktuální data: když Robot Rebellion dostane datum vydání, objeví se mezi vydanými hrami a nikdo nemusí pohled měnit:
UPDATE hry
SET vydano = '2026-02-27'
WHERE id = 18;
SELECT nazev, cena
FROM vydane_hry
WHERE zanr = 'Akční'
ORDER BY cena;| nazev | cena |
|---|---|
| Shadow Ninja | 649 |
| Zombie Town | 799 |
| Star Pilots | 899 |
| Robot Rebellion | 999 |
Pohledy se hodí pro dlouhé dotazy se spojováním a skupinami, které pak mohou používat i ostatní, aniž by věděli, jak fungují, a pro výpočty, které se mají všude dělat stejně. Pohled také může vynechat sloupce, které někteří lidé vidět nemají. Sloupce pohledu se jmenují tak jako v jeho SELECT.
Pohled jde jen číst: INSERT, UPDATE i DELETE na něm skončí chybou cannot modify vydane_hry because it is a view (nejde změnit, protože je to pohled). Data se mění v tabulkách, ze kterých pohled čte. Pohled, který už nepotřebujete, smažete příkazem DROP VIEW vydane_hry; a pohled, který chcete změnit, smažete a vytvoříte znovu. Stejně jako vámi vytvořené tabulky se pohledy na kartě Tabulky neukazují.
Typická chyba: počítaný sloupec bez aliasu. V pohledu z dotazu SELECT zanr, SUM(cena) FROM hry GROUP BY zanr se druhý sloupec jmenuje SUM(cena), a to se v dotazech na pohled špatně používá. S SUM(cena) AS celkem je to prostě celkem.
Jak psát:
Pokyny
Vytvořte pohled soucty_objednavek s jedním řádkem pro každou zaplacenou objednávku a těmito sloupci: objednavka_id (ID objednávky), zakaznik (jméno zákazníka), datum a celkem (kolik položky objednávky stály dohromady: počet krát cena každé položky z tabulky polozky). Pod ním ukažte z pohledu tři objednávky s nejvyšším součtem; při stejném součtu dejte dřív menší objednavka_id:
| objednavka_id | zakaznik | datum | celkem |
|---|---|---|---|
| 11 | Jakub Dvořák | 2024-09-30 | 2198 |
| 14 | Eva Novotná | 2024-12-20 | 1998 |
| 5 | Lukáš Procházka | 2024-04-02 | 1698 |
Pomocí pohledu ukažte, kolik který zákazník utratil, ve sloupcích zakaznik a utraceno, seřazené podle částky od největší a zákazníky se stejnou částkou podle jména. Výsledek začíná takto:
| zakaznik | utraceno |
|---|---|
| Eva Novotná | 5224 |
| Tereza Svobodová | 3924 |
| Jakub Dvořák | 3896 |
| Lukáš Procházka | 3894 |
| Tomáš Veselý | 2497 |
| Vojtěch Pokorný | 2496 |
| … | … |
Pohled vždycky ukazuje aktuální data. Na konec souboru přidejte novou zaplacenou objednávku: objednávku 31 Filipa Beneše (zákazník 12) z 2025-12-30 s jedním kusem hry Knight's Oath (hra 15), kterou koupil ve slevě za 1299 Kč. Pak ukažte všechny sloupce řádků pohledu, jejichž zákazníkem je Filip Beneš:
| objednavka_id | zakaznik | datum | celkem |
|---|---|---|---|
| 31 | Filip Beneš | 2025-12-30 | 1299 |
Začněte programovat zdarma
9/10