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;
nazevcena
Shadow Ninja649
Zombie Town799
Star Pilots899

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;
nazevcena
Shadow Ninja649
Zombie Town799
Star Pilots899
Robot Rebellion999

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.

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_idzakaznikdatumcelkem
11Jakub Dvořák2024-09-302198
14Eva Novotná2024-12-201998
5Lukáš Procházka2024-04-021698

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:

zakaznikutraceno
Eva Novotná5224
Tereza Svobodová3924
Jakub Dvořák3896
Lukáš Procházka3894
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_idzakaznikdatumcelkem
31Filip Beneš2025-12-301299

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

9/10