-- vytvorime sekvenci se jmenem 'seq_zamest_id' s pocatecni hoidnotou 10 a -- inkrementacnim krokem 2. -- aktualni hodnota sekvence ziskame 'jmeno_sekvence.CURRVAL' -- zvyseni hodnoty sekvence o stanoveny krok a vraceni nove hodnoty -- provedeme pomoci 'jmeno_sekvence.NEXTVAL' SQL> CREATE SEQUENCE seq_zamest_id INCREMENT BY 2 START WITH 10; Sequence created. -- vytvorime sekvenci 'seq_limited' se zadanym omezenim pro minimalni a -- maximalni hodnotu SQL> CREATE SEQUENCE seq_limited INCREMENT BY 1 START WITH 3 MAXVALUE 10 MINVALUE 3; Sequence created. -- zobrazime vytvorene sekvence SQL> SELECT sequence_name, increment_by, last_number FROM user_sequences; SEQUENCE_NAME INCREMENT_BY LAST_NUMBER ------------------------------ ------------ ----------- SEQ_ZAMEST_ID 2 10 SEQ_LIMITED 1 3 -- tabulka zamestnancu SQL> CREATE TABLE zamestnanci( jmeno VARCHAR2(15), prijmeni VARCHAR2(15), id NUMBER CONSTRAINT pk_id PRIMARY KEY, lokace VARCHAR2(10), plat NUMBER); Table created. -- naplneni tabulky zamestnanci SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Michal','Merta', seq_zamest_id.NEXTVAL,'Brno', 13000); SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Jan','Orel', seq_zamest_id.NEXTVAL,'Brno', 18000); SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Petr','Salava', seq_zamest_id.NEXTVAL,'Praha', 11000); SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Petr','Salava', seq_zamest_id.NEXTVAL,'Ostrava', 9000); SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Simon','Blazek', seq_zamest_id.NEXTVAL,'Praha', 21000); SQL> INSERT INTO zamestnanci (jmeno, prijmeni, id, lokace, plat) VALUES ('Petr','Miska', seq_zamest_id.NEXTVAL,'Brno', 8000); ... 6 rows created ... SQL> SELECT * FROM zamestnanci; JMENO PRIJMENI ID LOKACE PLAT --------------- --------------- ---------- ---------- ---------- Michal Merta 10 Brno 13000 Jan Orel 12 Brno 18000 Petr Salava 14 Praha 11000 Petr Salava 16 Ostrava 9000 Simon Blazek 18 Praha 21000 Petr Miska 20 Brno 8000 6 rows selected. -- zobrazime zamestnance bez opakovani SQL> SELECT DISTINCT jmeno, prijmeni FROM zamestnanci; JMENO PRIJMENI --------------- --------------- Jan Orel Michal Merta Petr Miska Petr Salava Simon Blazek -- zobrazime celkovy pocet zaznamu z tabulky zamestananci SQL> SELECT COUNT(*) AS "zaznamu v tab." FROM zamestnanci; zaznamu v tab. ----------------- 6 -- seradime zamestanace dle jejich prijmeni vzestupne -- zobrazeni vcetne duplicit SQL> SELECT * FROM zamestnanci ORDER BY prijmeni ASC; JMENO PRIJMENI ID LOKACE PLAT --------------- --------------- ---------- ---------- ---------- Simon Blazek 18 Praha 21000 Michal Merta 10 Brno 13000 Petr Miska 20 Brno 8000 Jan Orel 12 Brno 18000 Petr Salava 14 Praha 11000 Petr Salava 16 Ostrava 9000 6 rows selected. -- zobrazime vydelky jednotlivych zamestnancu SQL> SELECT jmeno, prijmeni, SUM(plat) FROM zamestnanci GROUP BY jmeno, prijmeni; JMENO PRIJMENI SUM(PLAT) --------------- --------------- ---------- Jan Orel 18000 Petr Miska 8000 Petr Salava 20000 Simon Blazek 21000 Michal Merta 13000 -- seskupeni zamestnancu dle jmena a prijmeni a zobrazeni pouze tech skupin, -- ktera maji jmeno rovno 'Petr' SQL> SELECT jmeno, prijmeni, COUNT(*) FROM zamestnanci GROUP BY jmeno, prijmeni HAVING jmeno = 'Petr'; JMENO PRIJMENI COUNT(*) --------------- --------------- ---------- Petr Miska 1 Petr Salava 2 -- zobrazeni informaci o castkach, ktera jsou vyplacena zamestnancum v ruznych mestech SQL> SELECT lokace, COUNT(*), SUM(plat), AVG(plat), MIN(plat), MAX(plat) FROM zamestnanci GROUP BY lokace; LOKACE COUNT(*) SUM(PLAT) AVG(PLAT) MIN(PLAT) MAX(PLAT) ---------- ---------- ---------- ---------- ---------- ---------- Brno 3 39000 13000 8000 18000 Ostrava 1 9000 9000 9000 9000 Praha 2 32000 16000 11000 21000 -- predchozi dotaz, avsak omezen na mesta, ktera maji vetsi prumerny plat -- nez 12000, setrizeno vzestupne dle poctu zamestnancu SQL> SELECT lokace, COUNT(*), SUM(plat), AVG(plat), MIN(plat), MAX(plat) FROM zamestnanci GROUP BY lokace HAVING AVG(plat) > 12000 ORDER BY COUNT(*) ASC; LOKACE COUNT(*) SUM(PLAT) AVG(PLAT) MIN(PLAT) MAX(PLAT) ---------- ---------- ---------- ---------- ---------- ---------- Praha 2 32000 16000 11000 21000 Brno 3 39000 13000 8000 18000 -- zobrazeni zamestnance s maximalnim platem SQL> SELECT prijmeni, celk_plat FROM (SELECT jmeno, prijmeni, SUM(plat) AS celk_plat FROM zamestnanci GROUP BY jmeno, prijmeni) WHERE celk_plat = (SELECT MAX(celk_plat) FROM (SELECT jmeno, prijmeni, SUM(plat) AS celk_plat FROM zamestnanci GROUP BY jmeno, prijmeni)); PRIJMENI CELK_PLAT --------------- ---------- Blazek 21000