osobní stránky / internetová prezentace ver.2.0
Panoramatická fotka v záhlaví stránky

Deváté cvičení

Zadání cvičení

Z databáze dle vašeho dne cvičení, schématu „CV9“ a tabulek “knihy, autori, napsane_knihy, nakladatelstvi a vytisk” vypište pomocí jediného příkazu níže uvedené informace (relační schémata jsou popsána níže).

  1. Vypište informace o nejdelší knize v databázi: kdo tuto knihu napsal, jak se jmenuje, kolik má stran a jaké nakladatelství ji vydalo
  2. Vypište název knih a jejich autory, které byly vydány ve stejném roce jako některá z knih Aloise Jiráska – kromě jeho samotných knih (autori_jmeno= ‘Alois Jirásek‘)
  3. Vypište informace o knihách, které jsou dražší než Staré pověsti české (knihy_nazev= ‘Staré pověsti české‘), tj. název, autor, cena a název nakladatelství. Setřiďte podle ceny sestupně.

Popis relačního schématu databáze je následující:

Entitní typy

  • knihy=(knihy_id,knihy_nazev)
  • autori=(autori_id,autori_jmeno)
  • nakladatelstvi=(nakladatelstvi_id,nakladatelstvi_nazev,nakladatelstvi_adresa, telefon)

Vztahové typy (vyjadřují vztah mezi jednotlivými entitami)

  • napsane_knihy=(knihy_id, autori_id)
  • vytisk=(vytisk_id, knihy_id, nakladatelstvi_id, cena, pocet_stran,rok_vydani)

Poznámka:

  • primární klíče jsou podtrženy
  • atributy knihy_id, autori_id a nakladatelstvi_id jsou cizími klíčy do tabulek knihy, autori, resp. nakladatelstvi

Veškeré výsledky uložte jako View příkazem CREATE VIEW „UCO“.jmeno_view AS příkaz_SQL

Označení tabulek pomocí alias názvů

  • v případě některých názvů tabulek je výhodou použít v rámci dotazu kratší názvy tzv. alias – zvýší přehlednost celého příkazu a v rámci poddotazu je zřejmé, se kterou tabulkou se pracuje.

Jednotlivé aliasy se definují v sekci FROM dotazu SELECT, kde se za jméno tabulky dá mezera a poté alias. Ten je jednoslovný (nebo musíte využít _) a musí být v rámci dotazu unikátní. V ostatních sekcích příkazu SELECT (tedy např. v sekcích SELECT, WHERE, ORDER, CONSTRAINT apod.) se pak můžete na jednotlivé tabulky dotazovat pomocí aliasů. Více už v jednotlivých příkladech.

Obecná syntaxe:

SELECT fotky_fotky.fotky_nazev, 
       fotky_akce.akce_nazev
FROM "67579".fotky_fotky, 
     "67579".fotky_autori, 
     "67579".fotky_akce
WHERE fotky_autori.autori_jmeno = 'Jan Fotograf' AND 
      fotky_fotky.fotky_autori = fotky_autori.autori_id AND 
      fotky_akce.akce_id = fotky_fotky.fotky_z_akce;

a s použitím alias názvů..

SELECT a.fotky_nazev, 
       c.akce_nazev
FROM "67579".fotky_fotky a, 
     "67579".fotky_autori b, 
     "67579".fotky_akce c
WHERE b.autori_jmeno = 'Jan Fotograf' AND 
      a.fotky_autori = b.autori_id AND 
      c.akce_id = a.fotky_z_akce;

Operátory pro vnořené dotazy

V rámci příkazů SELECT se dá pracovat s tzv. vnořenými dotazy. Jedná se o dotaz SELECT v části WHERE jiného příkazu SELECT.

Při práci s vnořenými dotazy se používají operátory IN,ANY,ALL (případně i zápor NOT IN)

IN - slouží pro jednoduché porovnání, zda-li se hodnota sloupce v jedné části podmínky vyskytuje mezi hodnotami vrácenými vnořeným dotazem.

Obecná syntaxe:

SELECT sloupec1..
FROM tabulka1,tabulka2..
WHERE sloupec2 IN (SELECT sloupec2
                   FROM tabulka1.. 
                   WHERE podminka..)

ANY|SOME - určují, že relace se vztahuje na alespoň jednu z hodnot, kterou vrátí vnořený dotaz

ALL - určuje, že relace se vztahuje na všechny hodnoty, které vrátí vnořený dotaz

Obecná syntaxe:

SELECT sloupec1..
FROM tabulka1,tabulka2..
WHERE sloupec2 >|<|<> ANY|ALL(SELECT sloupec2
                              FROM tabulka1.. 
                              WHERE podminka..)
databaze/devate.txt · Poslední úprava: 25.11.2008 09:18 autor: zbych
Tento web používá technologie Dokuwiki a OATG
© 1997 - 2012, Zbyšek Podhrázský, podhrazsky@zbych.cz