Cviceni 4

-- 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.