-- Vlozte dalsi testovaci data -- Vydavatel INSERT INTO vydavatele VALUES (2, 'GRADA'); INSERT INTO vydavatele VALUES (3, 'CPRESS'); INSERT INTO vydavatele VALUES (4, 'ALPRESS'); -- Knihy ALTER TABLE knihy MODIFY (nazev VARCHAR2(60)); INSERT INTO knihy VALUES (seq_knihy_id.NEXTVAL, 'Zmizele divky', 1, DATE '2009-04-15', '978-80-7381-523-3'); INSERT INTO knihy VALUES (seq_knihy_id.NEXTVAL, 'Provokater, Poldove, Neni hluchy jako hluchy', 1, DATE '2010-04-21', '978-80-7381-696-4'); INSERT INTO knihy VALUES (seq_knihy_id.NEXTVAL, 'Vrazdy pod stromecek', 1, DATE '2008-12-01', '978-80-7381-280-5'); INSERT INTO knihy VALUES (seq_knihy_id.NEXTVAL, 'Neni hluchy jako hluchy', 1, DATE '2008-11-11', '978-80-7381-436-6'); INSERT INTO knihy VALUES (seq_knihy_id.NEXTVAL, '100% alibi', 4, DATE '2011-10-15', '978-80-7362-922-9'); -- Vytisky INSERT INTO vytisky VALUES (seq_vytisky_id.NEXTVAL, (SELECT id FROM knihy WHERE nazev='Zmizele divky'), sysdate-10); INSERT INTO vytisky VALUES (seq_vytisky_id.NEXTVAL, (SELECT id FROM knihy WHERE nazev='Zmizele divky'), sysdate-5); INSERT INTO vytisky VALUES (seq_vytisky_id.NEXTVAL, (SELECT id FROM knihy WHERE nazev='Zmizele divky'), sysdate); INSERT INTO vytisky VALUES (seq_vytisky_id.NEXTVAL, (SELECT id FROM knihy WHERE nazev='Vrazdy pod stromecek'), sysdate-150); INSERT INTO vytisky VALUES (seq_vytisky_id.NEXTVAL, (SELECT id FROM knihy WHERE nazev='Vrazdy pod stromecek'), sysdate-3); -- A) Hodnota NULL: hodnota NULL znamena ZADNA DATA -- Testovani pouze podminkou: IS [NOT] NULL -- Prace s hodnotou NULL: -- If A is Condition Evaluates to -- 10 a IS NULL FALSE -- 10 a IS NOT NULL TRUE -- NULL a IS NULL TRUE -- NULL a IS NOT NULL FALSE -- 10 a = NULL UNKNOWN -- 10 a != NULL UNKNOWN -- NULL a = NULL UNKNOWN -- NULL a != NULL UNKNOWN -- NULL a = 10 UNKNOWN -- NULL a != 10 UNKNOWN -- Ukol c.1: Vyberte knihy, ktere nemaji vyplnene ISBN. -- B) Operatory porovnani: =, <, >, <=, >=, nerovnost ma vice moznosti: != <> ^= -- Lze aplikovat na cisla, datumy, retezce -- Ukol c.2: Vyberte knihy, ktere byly vydany pred 1.3.2013. -- Pouzijte: DATE 'yyyy-mm-dd' -- C) Operator BETWEEN -- Vetsi nebo rovno nez spodni mez a zaroven mensi nebo rovno nez horni mez. -- x BETWEEN 1 AND 5 -- Ukol c.3: Vyberte knihy, ktere byly vydany pred 1.3.2013, ale po 1.1.2013. -- D) Podminka [NOT] LIKE - srovnava podobne retezce -- _ zastupuje jeden znak -- % zastupuje zadny az mnoho znaku -- Pokud budu chtit srovnavat % a _ jako normalni znaky musim pouzit escape -- znaky napr: jmeno LIKE 'a\%q' ESCAPE '\' -- Srovnavani je CASE SENSITIVE!!! -- Ukol c.4: Vyberte knihy, ktere v nazvu obsahuji slovo 'Divka' nebo 'Divky' bez ohledu na velikost pismen. -- Tip: Vyuzijte funkci UPPER() nebo LOWER() -- Ukol c.5: Vyberte knihy, ktere maji v nazvu znak procento (%). -- Pro regularni vyrazy nabizi Oracle funkci REGEXP_LIKE(hodnota, reg_vyraz) -- Podporovany jsou POSIX regularni vyrazy. -- Ukol c.4b: Vyberte knihy, ktere v nazvu obsahuji slovo 'Divka' nebo 'Divky' bez ohledu na velikost pismen. -- Pouzijte regularni vyraz! SELECT * FROM knihy WHERE REGEXP_LIKE(nazev, '[Dd]ivk[ay]'); -- E) Dalsi funkce -- Dokumentace k funkcim -- Dokumentace k operatorum -- Podretezec retezce pomoci SUBSTR(str,pos,len) -- Nahrada hledaneho retezce za jiny REPLACE(str,search,replacement) -- Pro nahrazovani pomoci reg. vyrazu pouzijte REGEXP_REPLACE(str,pattern[,replace]) -- Parametr replace lze vynechat, potom jsou vyskyty pattern smazany. -- Ukol c.6: Vypiste nazev knihy s nazvem obsahujicim 'alibi' tak, ze "100%" zamenite za "Neprustrelne" SQL> SELECT REPLACE(nazev,'100%','Neprustrelne') FROM knihy WHERE nazev LIKE '%alibi%'; -- Zjisteni jmena aktualne prihlaseneho uzivatele SQL> SELECT USER FROM dual; -- F) Operator zretezeni: '||' -- Zretezeni typu char a char je char, je-li jeden operand typu varchar2 -- je vysledek typu varchar2. -- Ukol c.7: Vypiste nazvy vsech knih doplnene o text ' - vydana ' a datum vydani. -- Napr: "Osm cernych koni - vydana 21.09.2011" -- Tip: Vyuzijte funkci TO_CHAR() -- Pro nahrazeni hodnoty NULL jinou hodnotou muzete vyuzit NVL(a,b) nebo -- COALESCE(a,b,...) funkci. -- Funkce vraci prvni neNULL argument. -- Opakem k NVL() je funkce NULLIF(a,b), ktera vraci NULL, pokud a=b -- Ukol c.8: Upravte vypis knih doplneny o datum vydani tak, ze -- pro prazdne data vypise napr. "Profesional - nevydana" -- G) Spojeni tabulek -- Dokumentace spojeni tabulek -- Ve FROM se napise vice tabulek oddelenych carkou. -- Ukol c.9: Vypiste vsechny vytisky, kde misto id knihy vypisete jeji nazev. -- Vnejsi spojeni: LEFT|RIGHT|FULL OUTER JOIN -- Ukol c.10: Vypiste knihy vcetne jejich vytisku (id knihy, nazev a id vytisku). -- Pouzijte vnejsi spojeni (chceme opravdu vsechny knihy). -- Oracle umoznuje vnejsi spojeni zapsat svoji syntaxi pomoci znaku (+) za atributem v podmince spojeni, pak -- tento atribut je v tabulce, ktera se doplnuje hodnotami NULL. -- Napr. SELECT ... FROM kniha,vytisk WHERE id=kniha_id(+) -- Ukol c.11: Vypiste knihy vcetne jejich vytisku a nazvu vydavatele (vydavatel_jmeno, id knihy, nazev a id vytisku). -- Ukol c.12: Vypiste seznam vsech evidovanych vydavatelu a vsech evidovanych knih (vydavatel_jmeno, nazev knihy). -- Pouzijte uplne vnejsi spojeni.