Cviceni 4
SQL>  DROP TABLE zamestnanci;
SQL>  CREATE TABLE zamestnanci(
	id NUMBER PRIMARY KEY,
	jmeno VARCHAR2(20) NOT NULL,
	plat NUMBER DEFAULT 10000,
	pozn VARCHAR2(20));

SQL>  DROP TABLE vedouci;
SQL>  CREATE TABLE vedouci(
	id NUMBER PRIMARY KEY,
	jmeno VARCHAR2(20) NOT NULL);

-- vlozeni zamestnancu s vyplnenou poznamkou
SQL>  INSERT INTO zamestnanci (id, jmeno, plat, pozn) VALUES (1, 'Michal Merta', 15000, 'Sikovny');
SQL>  INSERT INTO zamestnanci (id, jmeno, plat, pozn) VALUES (2, 'Petr Mersyn', 10000, 'Jeste sikovnejsi');
-- bez poznamky 
SQL>  INSERT INTO zamestnanci (id, jmeno, plat) VALUES (3, 'Tomas Jedno', 9000);

SQL>  INSERT INTO vedouci (id, jmeno) VALUES (1, 'Tomas Jedno');
SQL>  INSERT INTO vedouci (id, jmeno) VALUES (2, 'Michal David');
SQL>  INSERT INTO vedouci (id, jmeno) VALUES (3, 'Michal Merta');

-- A) Hodnota NULL: hodnota NULL znamena ZADNA DATA
SQL>  INSERT INTO zamestnanci (id, jmeno, plat, pozn) VALUES (4, 'Petr Hnizdo', 12000, NULL);


-- B) operator zretezeni: '||'
-- Zretezeni typu char a char je char, je-li jeden operand typu varchar2
-- je vysledek typu varchar2.
SQL>  SELECT 'Poznamka u ' || jmeno || ' je ' || pozn AS "Retezec s poznamkou" FROM zamestnanci;

Retezec s poznamkou
-------------------------------------------------------
Poznamka u Michal Merta je Sikovny
Poznamka u Petr Mersyn je Jeste sikovnejsi
Poznamka u Tomas Jedno je
Poznamka u Petr Hnizdo je

SQL>  SELECT 'Zamestnanec ' || jmeno || ' ma plat ' || TO_CHAR(plat) AS "Retezec s platem" FROM zamestnanci; 

Retezec s platem
--------------------------------------------------------------------------------
Zamestnanec Michal Merta ma plat 15000
Zamestnanec Petr Mersyn ma plat 10000
Zamestnanec Tomas Jedno ma plat 9000
Zamestnanec Petr Hnizdo ma plat 12000

-- C) Nerovna se: muzeme pouzit !=,^= i <>. (krome hodnoty NULL)
SQL>  SELECT jmeno, plat AS "plat != 15000" FROM zamestnanci WHERE plat != 15000;

JMENO                plat != 15000
-------------------- -------------
Petr Mersyn                  10000
Tomas Jedno                   9000
Petr Hnizdo                  12000

SQL>  SELECT jmeno, plat AS "Plat mimo Petra Mersyna" FROM zamestnanci WHERE jmeno <> 'Petr Mersyn';

JMENO                Plat mimo Petra Mersyna
-------------------- -----------------------
Michal Merta                           15000
Tomas Jedno                             9000
Petr Hnizdo                            12000

-- Testovani hodoty NULL - 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

SQL>  SELECT jmeno AS "Zamestnanci s poznamkou" FROM zamestnanci WHERE pozn IS NOT NULL;

Zamestnanci s poznam
--------------------
Michal Merta
Petr Mersyn

SQL>  SELECT jmeno AS "Zamestnanci bez poznamky" FROM zamestnanci WHERE pozn IS NULL;

Zamestnanci bez pozn
--------------------
Tomas Jedno
Petr Hnizdo

-- 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, chci-li opak, muzu pouzit napr. 
-- UPPER(jmeno) LIKE 'RI%';
SQL>  SELECT jmeno AS "jmeno %Mer%" , plat FROM zamestnanci WHERE jmeno LIKE '%Mer%';

jmeno %Mer%                PLAT
-------------------- ----------
Michal Merta              15000
Petr Mersyn               10000

SQL>  SELECT jmeno AS "jmeno Pe_r Hnizdo", plat FROM zamestnanci WHERE jmeno LIKE 'Pe_r Hnizdo';

jmeno Pe_r Hnizdo          PLAT
-------------------- ----------
Petr Hnizdo               12000

-- E) Operator BETWEEN
-- Vetsi nebo rovno nez spodni mez a zaroven mensi nebo rovno nez horni mez,
SQL>  SELECT jmeno AS "Plat mezi 10 a 14", plat FROM zamestnanci WHERE plat BETWEEN 10000 AND 14000;

Plat mezi 10 a 14          PLAT
-------------------- ----------
Petr Mersyn               10000
Petr Hnizdo               12000

-- F) Mnozinove operace: UNION - sjednoceni
--                       UNION ALL - sjednoceni s opakovanim prvku
--                       INTERSECT - prunik
--                       MINUS - rozdil
SQL>  SELECT jmeno AS "vsichni bez opakovani" FROM zamestnanci UNION SELECT jmeno FROM vedouci;

vsichni bez opakovan
--------------------
Michal David
Michal Merta
Petr Hnizdo
Petr Mersyn
Tomas Jedno

SQL>  SELECT jmeno AS "zamestnanec i vedouci" FROM zamestnanci INTERSECT SELECT jmeno FROM vedouci;

zamestnanec i vedouc
--------------------
Michal Merta
Tomas Jedno

SQL>  SELECT jmeno AS "jen zamestnanec" FROM zamestnanci MINUS SELECT jmeno FROM vedouci;

jen zamestnanec
--------------------
Petr Hnizdo
Petr Mersyn

-- G) IN, NOT IN, ANY, SOME, ALL
-- vyraz se srovnava s nekterym (alespon jednim) prvkem mnoziny:
-- VYRAZ =,!=,<,>,<= nebo >= ANY (mnozina)
-- SOME - ekvivalent s ANY
SQL>  SELECT jmeno AS "zamestanec i vedouci", plat FROM zamestnanci WHERE jmeno = ANY (SELECT jmeno FROM vedouci);

zamestanec i vedouci       PLAT
-------------------- ----------
Tomas Jedno                9000
Michal Merta              15000

-- vyraz se srovnava se vsemi prvky mnoziny:
-- VYRAZ =,!=,<,>,<= nebo >= ALL (mnozina). Je-li mnozina prazdna, je 
-- vysledek FALSE
SQL>  SELECT jmeno AS "plat > nez Petrove", plat FROM zamestnanci WHERE plat > ALL(SELECT plat FROM zamestnanci WHERE jmeno LIKE 'Petr%');

plat > nez Petrove         PLAT
-------------------- ----------
Michal Merta              15000

-- IN - je prvkem mnoziny (rovnocene se "= ANY")
SQL>  SELECT jmeno AS "id IN 1,4,1025", id FROM zamestnanci WHERE id IN (1,4,1025);

id IN 1,4,1025               ID
-------------------- ----------
Michal Merta                  1
Petr Hnizdo                   4

-- NOT IN - neni prvkem mnoziny (rovnocene s "!=ALL")
SQL>  SELECT jmeno AS "id NOT IN 2,3", id FROM zamestnanci WHERE id NOT IN (2,3);

id NOT IN 2,3                ID
-------------------- ----------
Michal Merta                  1
Petr Hnizdo                   4

-- zjisteni struktury tabulky:
SQL>  DESC zamestnanci;

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
ID                                        NOT NULL NUMBER
JMENO                                     NOT NULL VARCHAR2(20)
PLAT                                               NUMBER
POZN                                               VARCHAR2(20)