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)