SELECT '' AS zadanie_1 from dual; SELECT * FROM ZESPOLY ORDER BY id_zesp; SELECT '' AS zadanie_2 from dual; select * from pracownicy order by id_prac ASC; SELECT '' AS zadanie_3 from dual; select NAZWISKO, (PLACA_POD * 12) AS roczna_placa FROM PRACOWNICY order by NAZWISKO ASC; SELECT '' AS zadanie_4 from dual; select nazwisko, etat, placa_pod+COALESCE(placa_dod,0) AS miesieczne_zarobki from pracownicy order by miesieczne_zarobki DESC; SELECT '' AS zadanie_5 from dual; select * from zespoly order by nazwa ASC; SELECT '' AS zadanie_6 from dual; select UNIQUE etat from pracownicy ORDER BY etat ASC; SELECT '' AS zadanie_7 from dual; select * from pracownicy where etat='ASYSTENT' order by nazwisko ASC; SELECT '' AS zadanie_8 from dual; select id_prac, nazwisko, etat, placa_pod, id_zesp from pracownicy WHERE id_zesp IN(30,40) order by placa_pod DESC; SELECT '' AS zadanie_9 from dual; select nazwisko, id_zesp, placa_pod from pracownicy where placa_pod between 300 and 800 order by nazwisko asc; SELECT '' AS zadanie_10 from dual; select nazwisko, etat, id_zesp from pracownicy where nazwisko LIKE '%SKI' order by nazwisko ASC; SELECT '' AS zadanie_11 from dual; select id_prac, id_szefa, nazwisko, placa_pod from pracownicy where placa_pod>1000 and id_szefa IS NOT NULL; SELECT '' AS zadanie_12 from dual; select nazwisko, id_zesp from pracownicy where id_zesp=20 AND (nazwisko LIKE 'M%' OR nazwisko LIKE '%SKI') order by nazwisko ASC; SELECT '' AS zadanie_13 from dual; select nazwisko, etat, placa_pod/160 AS STAWKA FROM PRACOWNICY WHERE placa_pod/160 NOT BETWEEN 400 AND 800 AND etat NOT in ('ADIUNKT', 'ASYSTENT', 'STAZYSTA', 'SEKRETARKA') order by STAWKA asc; SELECT '' AS zadanie_14 from dual; select nazwisko, etat, placa_pod, COALESCE(placa_dod,0) AS placa_dod from pracownicy where placa_pod+COALESCE(placa_dod,0)>1000 order by etat asc, nazwisko asc; SELECT '' AS zadanie_15 from dual; SELECT nazwisko || ' PRACUJE OD ' || TO_CHAR(zatrudniony, 'DD-MM-YYYY') || ' I ZARABIA ' || placa_pod AS profesorowie FROM pracownicy WHERE etat LIKE 'PROFESOR' ORDER BY placa_pod DESC; --next topic-- SELECT '' AS zadanie_1 from dual; SELECT nazwisko, (SUBSTR(etat, 1, 2) || id_prac) AS kod FROM pracownicy; SELECT '' AS zadanie_2 from dual; SELECT nazwisko, REPLACE(REPLACE(REPLACE(nazwisko, 'K', 'X'), 'L', 'X'), 'M', 'X') AS wojna_literom FROM pracownicy; SELECT '' AS zadanie_3 from dual; SELECT nazwisko FROM pracownicy WHERE INSTR(SUBSTR(nazwisko, 1, FLOOR(LENGTH(nazwisko) / 2)), 'L') > 0; SELECT '' AS zadanie_4 from dual; SELECT nazwisko, ROUND(placa_pod*1.15,0) AS podwyzka FROM pracownicy; SELECT '' AS zadanie_5 from dual; SELECT nazwisko, placa_pod, placa_pod*0.2 AS inwestycja, ROUND(placa_pod*0.2*POWER(1.1,10),2) AS kapital, ROUND(placa_pod*0.2*POWER(1.1,10)-placa_pod*0.2, 2) AS zysk from pracownicy; SELECT '' AS zadanie_6 from dual; select nazwisko, TO_CHAR(zatrudniony,'YY/MM/DD') as zatrudniony, FLOOR(MONTHS_BETWEEN(zatrudniony,TO_DATE('2000-01-01','YYYY-MM-DD'))/12*(-1)) AS staz from pracownicy; SELECT '' AS zadanie_7 from dual; select nazwisko, RPAD(TO_CHAR(zatrudniony, 'fmMONTH'), 9) || ', ' || LPAD(TO_CHAR(zatrudniony, 'DD'), 2) || ' ' || TO_CHAR(zatrudniony, 'YYYY') as data_zatrudnienia from pracownicy where id_zesp=20; SELECT '' AS zadanie_8 from dual; select UNIQUE TO_CHAR(current_date,'fmDAY') as dzis from pracownicy; SELECT '' AS zadanie_9 from dual; select nazwa, adres, CASE WHEN adres LIKE 'PIOTROWO%' THEN 'NOWE MIASTO' WHEN adres like 'STRZELECKA%' OR adres like 'MIELZYNSKIEGO%' THEN 'STARE MIASTO' WHEN adres like 'WLODKOWICA%' THEN 'GRUNDWALD' end as dzielnica from zespoly; SELECT '' AS zadanie_10 from dual; select nazwisko, placa_pod, CASE when placa_pod>480 THEN 'POWYZEJ 480' when placa_pod=480 THEN 'DOKŁADNIE 480' when placa_pod<480 THEN 'PONIZEJ 480' end as PROG from pracownicy order by placa_pod desc; SELECT '' AS zadanie_11 from dual; select nazwisko, id_zesp, CASE WHEN id_zesp=10 AND placa_pod>=1070.10 then placa_pod WHEN id_zesp=20 AND placa_pod>=616.6 then placa_pod WHEN id_zesp=30 AND placa_pod>=502.00 then placa_pod WHEN id_zesp=40 AND placa_pod>=1350.00 then placa_pod END as placa_podst from pracownicy WHERE CASE WHEN id_zesp=10 AND placa_pod>=1070.10 then 1 WHEN id_zesp=20 AND placa_pod>=616.6 then 1 WHEN id_zesp=30 AND placa_pod>=502.00 then 1 WHEN id_zesp=40 AND placa_pod>=1350.00 then 1 END =1 order by id_zesp; SELECT '' AS Zadanie_12 FROM dual; SELECT nazwisko, etat, CASE WHEN etat IN ('PROFESOR', 'DYREKTOR') THEN FLOOR((TO_DATE('2000-01-01', 'YYYY-MM-DD')-zatrudniony)/365) ELSE NULL END AS staz_w_2000, CASE WHEN etat IN ('ADIUNKT', 'ASYSTENT') THEN FLOOR((TO_DATE('2010-01-01', 'YYYY-MM-DD')-zatrudniony)/365) ELSE NULL END AS staz_w_2010, CASE WHEN etat IN ('STAZYSTA', 'SEKRETARKA') THEN FLOOR((TO_DATE('2020-01-01', 'YYYY-MM-DD')-zatrudniony)/365) ELSE NULL END AS staz_w__2020 FROM pracownicy ORDER BY CASE WHEN etat IN ('PROFESOR', 'DYREKTOR') THEN 1 WHEN etat IN ('ADIUNKT', 'ASYSTENT') THEN 2 WHEN etat IN ('STAZYSTA', 'SEKRETARKA') THEN 3 END, CASE WHEN etat IN ('PROFESOR', 'DYREKTOR') THEN FLOOR((TO_DATE('2000-01-01', 'YYYY-MM-DD')-zatrudniony)/365) WHEN etat IN ('ADIUNKT', 'ASYSTENT') THEN FLOOR((TO_DATE('2010-01-01', 'YYYY-MM-DD')-zatrudniony)/365) WHEN etat IN ('STAZYSTA', 'SEKRETARKA') THEN FLOOR((TO_DATE('2020-01-01', 'YYYY-MM-DD')-zatrudniony)/365) END; --next topic-- SELECT '' AS zadanie_1 from dual; select MIN(placa_pod) as minimum, MAX(placa_pod) as maksimum, MAX(placa_pod)-MIN(placa_pod) as różnica from PRACOWNICY; SELECT '' AS zadanie_2 from dual; select etat, avg(placa_pod) as srednia_placa from pracownicy group by etat order by avg(placa_pod) desc; SELECT '' AS zadanie_3 from dual; select COUNT(etat) AS profesorowie from pracownicy where etat='PROFESOR'; SELECT '' AS zadanie_4 from dual; select id_zesp, SUM(placa_pod)+SUM(placa_dod) as sumaryczne_place from pracownicy group by id_zesp order by id_zesp asc; SELECT '' AS zadanie_5 from dual; select MAX(SUM(placa_pod)+SUM(placa_dod)) as maks_sum_praca from pracownicy group by id_zesp order by id_zesp asc; SELECT '' AS zadanie_6 from dual; select id_szefa, MIN(placa_pod) as minimalna from pracownicy group by id_szefa HAVING id_szefa iS NOT NULL order by MIN(placa_pod) desc, id_szefa asc; SELECT '' AS zadanie_7 from dual; select Id_zesp, COUNT(*) as ilu_pracuje from PRACOWNICY group by id_zesp order by COUNT(*) desc; SELECT '' AS zadanie_8 from dual; select Id_zesp, COUNT(*) as ilu_pracuje from PRACOWNICY group by id_zesp HAVING (COUNT(*)>3) order by COUNT(*) desc; SELECT '' AS zadanie_9 from dual; select id_prac from pracownicy group by id_prac having COUNT(*)>1; SELECT '' AS zadanie_10 from dual; select etat, AVG(placa_pod) as srednia, COUNT(*) as liczba from pracownicy where TO_CHAR(zatrudniony,'YYYY')<1991 GROUP BY etat having COUNT(*)>0 order by etat ASC; SELECT '' AS zadanie_11 from dual; select id_zesp, etat, ROUND(AVG(placa_pod+COALESCE(placa_dod,0)),0) as srednia, ROUND(MAX(placa_pod+COALESCE(placa_dod,0)),0) as maksymalna from pracownicy where etat in('PROFESOR','ASYSTENT') group by id_zesp, etat order by id_zesp, etat; SELECT '' AS zadanie_12 from dual; select TO_CHAR(zatrudniony, 'YYYY') as rok, COUNT(*) as liczba_pracownikow from pracownicy group by TO_CHAR(zatrudniony, 'YYYY') order by TO_CHAR(zatrudniony, 'YYYY') ASC; SELECT '' AS zadanie_13 from dual; select LENGTH(nazwisko) as ile_liter, count(*) as liczba_nazwisk from pracownicy group by LENGTH(nazwisko) order by LENGTH(nazwisko); SELECT '' AS zadanie_14 from dual; SELECT COUNT(*) as ile_nazwisk_z_A from pracownicy where nazwisko LIKE '%a%' OR nazwisko LIKE '%A%'; SELECT '' AS zadanie_15 from dual; SELECT COUNT(CASE WHEN NAZWISKO LIKE '%a%' OR NAZWISKO LIKE '%A%' THEN 1 END) AS nazwiska_z_A, COUNT(CASE WHEN NAZWISKO LIKE '%e%' OR NAZWISKO LIKE '%E%' THEN 1 END) AS nazwiska_z_E FROM pracownicy; SELECT '' AS zadanie_16 from dual; select id_zesp, SUM(placa_pod) as suma_plac, LISTAGG(nazwisko || ':' || placa_pod, '; ') WITHIN GROUP (ORDER BY nazwisko ASC) from pracownicy group by id_zesp order by id_zesp asc; --next topic-- SELECT '' AS zadanie_1 from dual; select p.nazwisko, p.etat, p.id_zesp, z.nazwa from pracownicy p inner join zespoly z ON p.id_zesp=z.id_zesp ORDER BY nazwisko ASC; SELECT '' AS zadanie_2 from dual; select p.nazwisko, p.etat, p.id_zesp, z.nazwa from pracownicy p inner join zespoly z ON p.id_zesp=z.id_zesp AND z.adres='PIOTROWO 3A' ORDER BY nazwisko ASC; SELECT '' AS zadanie_3 from dual; select nazwisko, p.etat, placa_pod, placa_min, placa_max FROM pracownicy p INNER JOIN etaty e on p.etat=e.nazwa ORDER BY p.etat,p.nazwisko; SELECT '' AS zadanie_4 from dual; select nazwisko, p.etat, placa_pod, placa_min, placa_max, CASE WHEN p.placa_pod>e.placa_min THEN 'OK' WHEN p.placa_pode.placa_max); SELECT '' AS zadanie_6 from dual; select nazwisko, placa_pod, p.etat, e.nazwa as KAT_PLAC, placa_min, placa_max FROM pracownicy p INNER JOIN etaty e ON placa_pod BETWEEN placa_min AND placa_max order by nazwisko, e.nazwa; SELECT '' AS zadanie_7 from dual; select nazwisko, placa_pod, p.etat, e.nazwa as KAT_PLAC, placa_min, placa_max FROM pracownicy p INNER JOIN etaty e ON placa_pod BETWEEN placa_min AND placa_max WHERE e.nazwa='SEKRETARKA' order by nazwisko; SELECT '' AS zadanie_8 from dual; select p.nazwisko AS pracownik, p.id_prac, s.nazwisko as SZEF, s.id_prac FROM pracownicy p INNER JOIN pracownicy s ON p.id_szefa=s.id_prac ORDER BY p.nazwisko; SELECT '' AS zadanie_9 from dual; select p.nazwisko, TO_CHAR(p.zatrudniony, 'YYYY.MM.DD') as prac_zatrudniony, s.nazwisko, TO_CHAR(s.zatrudniony, 'YYYY.MM.DD') as szef_zatrudniony, EXTRACT(YEAR FROM p.zatrudniony)-EXTRACT(YEAR FROM s.zatrudniony) AS LATA from pracownicy p inner JOIN pracownicy s ON p.id_szefa=s.id_prac WHERE EXTRACT(YEAR FROM p.zatrudniony)-EXTRACT(YEAR FROM s.zatrudniony)<10 order by p.zatrudniony, p.nazwisko; SELECT '' AS zadanie_10 from dual; select nazwa, count(*) as liczba, avg(placa_pod) AS srednia_placa from PRACOWNICY inner join zespoly on pracownicy.id_zesp = zespoly.id_zesp group by nazwa; SELECT '' AS zadanie_11 from dual; select nazwa, CASE when count(*) < 3 then 'mały' when count(*) >= 3 and count(*) <= 6 then 'średni' when count(*) >= 7 then 'duży' END as etykieta from PRACOWNICY inner join zespoly on zespoly.id_zesp = PRACOWNICY.ID_ZESP group by nazwa; --next topic-- SELECT '' AS zadanie_8 from dual; SELECT p.nazwisko, p.etat, p.placa_pod, z.nazwa, COALESCE(s.nazwisko, ' ') AS szef FROM pracownicy p LEFT OUTER JOIN zespoly z ON p.id_zesp = z.id_zesp LEFT OUTER JOIN pracownicy s ON p.id_szefa = s.id_prac ORDER BY p.nazwisko; SELECT '' AS zadanie_9 from dual; SELECT p.nazwisko, z.nazwa FROM pracownicy p CROSS JOIN zespoly z ORDER BY p.nazwisko, z.nazwa; SELECT '' AS zadanie_10 from dual; SELECT count(*) FROM etaty CROSS JOIN pracownicy CROSS JOIN zespoly; SELECT '' AS zadanie_11 from dual; select etat FROM pracownicy WHERE TO_CHAR(zatrudniony, 'yyyy') = 1992 INTERSECT select etat FROM pracownicy WHERE TO_CHAR(zatrudniony, 'yyyy') = 1993 ORDER BY etat; SELECT '' AS zadanie_12 from dual; select z.id_zesp from pracownicy p right join zespoly z on p.id_zesp=z.id_zesp WHERE p.id_prac IS NULL ORDER BY z.id_zesp; SELECT '' AS zadanie_13 from dual; select z.id_zesp, z.nazwa from pracownicy p right join zespoly z on p.id_zesp=z.id_zesp WHERE p.id_prac IS NULL ORDER BY z.id_zesp; SELECT nazwisko, placa_pod, 'Poniżej 480 złotych' AS prog FROM pracownicy WHERE placa_pod < 480 UNION SELECT nazwisko, placa_pod, 'Dokladnie 480 złotych' AS prog FROM pracownicy WHERE placa_pod = 480 UNION SELECT nazwisko, placa_pod, 'Powyżej 480 złotych' AS prog FROM pracownicy WHERE placa_pod > 480 ORDER BY placa_pod; --next topic-- SELECT '' AS zadanie_1 from dual; select nazwisko, etat, id_zesp from pracownicy WHERE id_zesp = (select id_zesp from pracownicy where nazwisko ='BRZEZINSKI') order by nazwisko; SELECT '' AS zadanie_2 from dual; select p.nazwisko, p.etat, z.nazwa from pracownicy p JOIN zespoly z ON p.id_zesp=z.id_zesp WHERE p.id_zesp = (select id_zesp from pracownicy where nazwisko ='BRZEZINSKI') order by nazwisko; INSERT INTO pracownicy(id_prac, nazwisko, etat, zatrudniony) VALUES ((SELECT max(id_prac) + 1 FROM pracownicy), 'WOLNY', 'ASYSTENT', DATE '1968-07-01'); SELECT '' AS zadanie_3 from dual; select nazwisko, etat, TO_CHAR(zatrudniony,'yyyy/mm/dd') AS zatrudniony from pracownicy WHERE etat='PROFESOR' ORDER BY zatrudniony ASC FETCH FIRST 1 ROW ONLY; SELECT '' AS zadanie_4 from dual; select nazwisko, TO_CHAR(zatrudniony,'yyyy/mm/dd'), id_zesp from pracownicy where (zatrudniony, id_zesp) IN (select MAX(zatrudniony), id_zesp from pracownicy group by id_zesp) order by zatrudniony ASC; SELECT '' AS zadanie_5 from dual; select id_zesp, nazwa, adres from zespoly z where not exists (select 1 from pracownicy p where p.id_zesp= z.id_zesp); DELETE FROM pracownicy WHERE nazwisko = 'WOLNY'; SELECT '' AS zadanie_6 from dual; select nazwisko from pracownicy where --next topic-- SELECT '' AS zadanie_1 FROM dual; SELECT id_zesp, nazwa, adres FROM zespoly z WHERE NOT EXISTS ( SELECT 1 FROM pracownicy p WHERE p.id_zesp = z.id_zesp); SELECT '' AS zadanie_2 FROM dual; SELECT nazwisko, placa_pod, etat FROM pracownicy p WHERE placa_pod > ( SELECT AVG(placa_pod) FROM pracownicy WHERE etat = p.etat ) ORDER BY placa_pod DESC; SELECT '' AS zadanie_3 FROM dual; SELECT p.nazwisko, p.placa_pod FROM pracownicy p WHERE p.placa_pod >= 0.75*( SELECT s.placa_pod FROM pracownicy s WHERE s.id_prac = p.id_szefa )ORDER BY nazwisko; SELECT '' AS zadanie_4 FROM dual; SELECT p.nazwisko FROM pracownicy p WHERE etat = 'PROFESOR' AND NOT EXISTS ( SELECT 1 FROM pracownicy s WHERE s.id_szefa = p.id_prac AND s.etat = 'STAZYSTA'); SELECT '' AS Zadanie_5 FROM dual; SELECT Z.NAZWA, t.MAX_SUMA_PLAC FROM Zespoly z JOIN ( SELECT ID_ZESP, SUM(PLACA_POD) AS SUMA_PLAC FROM Pracownicy GROUP BY ID_ZESP ) s ON z.ID_ZESP = s.ID_ZESP JOIN ( SELECT MAX(SUMA_PLAC) AS MAX_SUMA_PLAC FROM ( SELECT SUM(PLACA_POD) AS SUMA_PLAC FROM Pracownicy GROUP BY ID_ZESP ) ) t ON t.MAX_SUMA_PLAC = s.SUMA_PLAC; SELECT '' AS ZADANIE_6 FROM dual; select p.nazwisko, p.placa_pod from pracownicy p WHERE 3>(select COUNT(*) from pracownicy s where s.placa_pod>p.placa_pod) ORDER BY p.placa_pod DESC; SELECT '' AS ZADANIE_7_1 FROM dual; select nazwisko, placa_pod, placa_pod - ( SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp) as ROZNICA from pracownicy p ORDER BY nazwisko ASC; SELECT '' AS Zadanie_7_2 FROM dual; SELECT p.NAZWISKO, p.PLACA_POD, p.PLACA_POD - a.SREDNIA_PLACA AS ROZNICA FROM PRACOWNICY p, ( SELECT ID_ZESP, AVG(PLACA_POD) AS SREDNIA_PLACA FROM PRACOWNICY GROUP BY ID_ZESP ) a WHERE p.ID_ZESP = a.ID_ZESP ORDER BY p.NAZWISKO; SELECT '' AS ZADANIE_8_1 FROM dual; select nazwisko, placa_pod, placa_pod - ( SELECT AVG(placa_pod) FROM pracownicy WHERE id_zesp = p.id_zesp) as ROZNICA from pracownicy p WHERE placa_pod> (select avg(placa_pod) from pracownicy where id_zesp=p.id_zesp )ORDER BY nazwisko ASC; SELECT '' AS Zadanie_8_2 FROM dual; SELECT p.NAZWISKO, p.PLACA_POD, p.PLACA_POD - a.SREDNIA_PLACA AS ROZNICA FROM PRACOWNICY p, ( SELECT ID_ZESP, AVG(PLACA_POD) AS SREDNIA_PLACA FROM PRACOWNICY GROUP BY ID_ZESP ) a WHERE p.ID_ZESP = a.ID_ZESP AND p.PLACA_POD > a.SREDNIA_PLACA ORDER BY p.NAZWISKO; SELECT '' AS Zadanie_9 FROM dual; SELECT P.NAZWISKO, ( SELECT COUNT(*) FROM Pracownicy P2 WHERE P2.id_szefa = P.ID_PRAC ) AS PODWLADNI FROM Pracownicy P JOIN Zespoly Z ON P.ID_ZESP = Z.ID_ZESP WHERE P.ETAT = 'PROFESOR' AND Z.ADRES LIKE '%PIOTROW%' ORDER BY PODWLADNI DESC; SELECT '' AS Zadanie_10 FROM dual; SELECT Z.NAZWA, T.SREDNIA_W_ZESPOLE, O.SREDNIA_OGOLNA, CASE WHEN T.SREDNIA_W_ZESPOLE IS NULL THEN '???' WHEN T.SREDNIA_W_ZESPOLE >= O.SREDNIA_OGOLNA THEN ':)' ELSE ':(' END AS NASTROJE FROM Zespoly Z LEFT JOIN ( SELECT ID_ZESP, ROUND(AVG(PLACA_POD), 2) AS SREDNIA_W_ZESPOLE FROM Pracownicy GROUP BY ID_ZESP ) T ON Z.ID_ZESP = T.ID_ZESP CROSS JOIN ( SELECT ROUND(AVG(PLACA_POD), 2) AS SREDNIA_OGOLNA FROM Pracownicy ) O ORDER BY Z.NAZWA; SELECT '' AS Zadanie_11 FROM dual; SELECT E.NAZWA, E.PLACA_MIN, E.PLACA_MAX FROM Etaty E ORDER BY ( SELECT COUNT(*) FROM Pracownicy P WHERE P.ETAT = E.NAZWA ) DESC, E.NAZWA; --next topic-- SELECT ' ' AS zadanie_1 FROM dual; SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC FETCH FIRST 3 ROWS ONLY; SELECT ' ' AS zadanie_2 FROM dual; SELECT nazwisko, placa_pod FROM pracownicy ORDER BY placa_pod DESC OFFSET 5 ROWS FETCH FIRST 5 ROWS ONLY; SELECT ' ' AS zadanie_3 FROM dual; WITH SredniePlace AS ( SELECT id_zesp, AVG(placa_pod) AS avg_placa FROM pracownicy GROUP BY id_zesp ) SELECT p.nazwisko, p.placa_pod, p.placa_pod - s.avg_placa AS roznica FROM pracownicy p JOIN SredniePlace s ON p.id_zesp = s.id_zesp WHERE p.placa_pod > s.avg_placa order by nazwisko; SELECT ' ' AS zadanie_4 FROM dual; WITH Lata AS ( SELECT EXTRACT(YEAR FROM zatrudniony) AS rok, COUNT(*) AS liczba FROM pracownicy GROUP BY EXTRACT(YEAR FROM zatrudniony) ) SELECT * FROM Lata ORDER BY liczba DESC; SELECT ' ' AS zadanie_5 FROM dual; WITH Lata AS ( SELECT EXTRACT(YEAR FROM zatrudniony) AS rok, COUNT(*) AS liczba FROM pracownicy GROUP BY EXTRACT(YEAR FROM zatrudniony) ) SELECT * FROM Lata WHERE liczba = (SELECT MAX(liczba) FROM Lata); SELECT ' ' AS zadanie_6 FROM dual; WITH Asystenci AS ( SELECT nazwisko, etat, id_zesp FROM pracownicy WHERE etat = 'ASYSTENT' ), Piotrowo AS ( SELECT id_zesp, nazwa, adres FROM zespoly WHERE adres LIKE '%PIOTROWO%' ) SELECT a.nazwisko, a.etat, z.nazwa, z.adres FROM Asystenci a JOIN Piotrowo z ON a.id_zesp = z.id_zesp; SELECT ' ' AS zadanie_7 FROM dual; WITH SumaPlac AS ( SELECT id_zesp, SUM(placa_pod) AS maks_suma_plac FROM pracownicy GROUP BY id_zesp ) SELECT z.nazwa, sp.maks_suma_plac FROM zespoly z JOIN SumaPlac sp ON z.id_zesp = sp.id_zesp WHERE sp.maks_suma_plac = (SELECT MAX(maks_suma_plac) FROM SumaPlac); --next topic-- SELECT '' AS ZADANIE_1 FROM dual; INSERT INTO pracownicy (id_prac, nazwisko, etat, id_szefa, zatrudniony, placa_pod, placa_dod, id_zesp) SELECT 250, 'KOWALSKI', 'ASYSTENT', NULL, TO_DATE('13/01/2015', 'DD/MM/YYYY'), 1500, NULL, 10 FROM dual UNION ALL SELECT 260, 'ADAMSKI', 'ASYSTENT', NULL, TO_DATE('10/09/2014', 'DD/MM/YYYY'), 1500, NULL, 10 FROM dual UNION ALL SELECT 270, 'NOWAK', 'ADIUNKT', NULL, TO_DATE('01/05/1990', 'DD/MM/YYYY'), 2050, 540, 20 FROM dual; SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy WHERE id_prac BETWEEN 250 AND 270; SELECT '' AS ZADANIE_2 FROM dual; UPDATE pracownicy SET placa_pod = placa_pod*1.1, placa_dod=CASE WHEN placa_dod IS NULL THEN 100 ELSE placa_dod*1.2 END WHERE id_prac BETWEEN 250 AND 270; SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy WHERE id_prac BETWEEN 250 AND 270; SELECT '' AS ZADANIE_3 FROM dual; INSERT INTO ZESPOLY (id_zesp, nazwa, adres) VALUES (60, 'BAZY DANYCH', 'PIOTROWO 2'); SELECT * FROM zespoly WHERE id_zesp = 60; SELECT '' AS ZADANIE_4 FROM dual; UPDATE pracownicy SET ID_ZESP = (SELECT id_zesp FROM zespoly WHERE nazwa = 'BAZY DANYCH') WHERE id_prac BETWEEN 250 AND 270; SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy WHERE id_prac BETWEEN 250 AND 270; SELECT '' AS ZADANIE_5 FROM dual; UPDATE pracownicy SET ID_SZEFA = (SELECT id_prac FROM pracownicy WHERE nazwisko = 'MORZY') WHERE id_prac BETWEEN 250 AND 270; SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy WHERE id_szefa = (SELECT id_prac FROM pracownicy WHERE nazwisko = 'MORZY') ORDER BY id_prac; SELECT '' AS ZADANIE_6 FROM dual; DELETE FROM zespoly WHERE nazwa IN ('BAZY DANYCH'); SELECT * from zespoly; SELECT '' AS ZADANIE_7 FROM dual; DELETE FROM pracownicy WHERE nazwisko IN ('KOWALSKI', 'ADAMSKI', 'NOWAK'); DELETE FROM zespoly WHERE nazwa IN ('BAZY DANYCH'); SELECT * from zespoly WHERE nazwa = 'BAZY DANYCH'; SELECT * from pracownicy WHERE id_zesp = 60; SELECT '' AS ZADANIE_8 FROM dual; SELECT p.nazwisko, p.placa_pod,(SELECT AVG(p1.placa_pod) FROM pracownicy p1 WHERE p1.ID_ZESP = p.id_Zesp) *0.1 AS podwyzka FROM pracownicy p ORDER BY p.nazwisko; SELECT '' AS ZADANIE_9 FROM dual; UPDATE pracownicy p SET placa_pod = PLACA_POD + (SELECT AVG(p1.placa_pod) FROM pracownicy p1 WHERE p1.ID_ZESP = p.id_Zesp) *0.1; SELECT nazwisko, placa_pod FROM pracownicy ORDER BY NAZWISKO; SELECT '' AS ZADANIE_10 FROM dual; SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy ORDER BY placa_pod FETCH FIRST 1 ROWS ONLY; SELECT '' AS ZADANIE_11 FROM dual; UPDATE pracownicy SET placa_pod = (SELECT ROUND(AVG(placa_pod),2) FROM pracownicy) WHERE id_prac = (SELECT id_prac FROM pracownicy ORDER BY placa_pod FETCH FIRST 1 ROWS ONLY); SELECT id_prac, nazwisko, etat, id_szefa, TO_CHAR(zatrudniony, 'YYYY-MM-DD') AS zatrudniony, placa_pod, placa_dod, id_zesp FROM pracownicy WHERE id_prac = 200; SELECT '' AS ZADANIE_12 FROM dual; UPDATE PRACOWNICY SET placa_dod = (SELECT AVG(placa_pod) FROM pracownicy where ID_SZEFA = (select ID_PRAC from PRACOWNICY where NAZWISKO = 'MORZY')) where ID_ZESP = 20; SELECT nazwisko, placa_dod FROM pracownicy WHERE id_zesp = 20; SELECT '' AS ZADANIE_13 FROM dual; UPDATE pracownicy p SET p.placa_pod = p.placa_pod * 1.25 WHERE p.id_zesp IN ( SELECT z.id_zesp FROM zespoly z WHERE z.nazwa = 'SYSTEMY ROZPROSZONE' ); SELECT p.nazwisko, p.placa_pod FROM pracownicy p JOIN zespoly z ON p.id_zesp = z.id_Zesp WHERE z.nazwa = 'SYSTEMY ROZPROSZONE' ORDER BY p.nazwisko; SELECT '' AS ZADANIE_14 FROM dual; SELECT p.nazwisko AS pracownik, p1.nazwisko AS SZEF FROM pracownicy p JOIN pracownicy p1 ON p1.id_prac = p.id_szefa WHERE p1.nazwisko = 'MORZY'; DELETE FROM (SELECT p.nazwisko AS pracownik, p1.nazwisko AS SZEF FROM pracownicy p JOIN pracownicy p1 ON p1.id_prac = p.id_szefa WHERE p1.nazwisko = 'MORZY'); SELECT '' AS ZADANIE_15 FROM dual; SELECT * FROM pracownicy ORDER BY nazwisko; SELECT '' AS ZADANIE_16 FROM dual; CREATE SEQUENCE PRAC_SEQ START WITH 300 INCREMENT BY 10; SELECT '' AS ZADANIE_17 FROM dual; INSERT INTO PRACOWNICY (ID_PRAC, NAZWISKO, ETAT, PLACA_POD) VALUES (PRAC_SEQ.NEXTVAL, 'TRĄBCZYŃSKI', 'STAZYSTA', 1000); SELECT * FROM PRACOWNICY WHERE NAZWISKO = 'TRĄBCZYŃSKI'; SELECT '' AS ZADANIE_18 FROM dual; UPDATE PRACOWNICY SET PLACA_DOD = PRAC_SEQ.CURRVAL WHERE NAZWISKO = 'TRĄBCZYŃSKI'; SELECT * FROM PRACOWNICY WHERE NAZWISKO = 'TRĄBCZYŃSKI'; SELECT '' AS ZADANIE_19 FROM dual; DELETE FROM PRACOWNICY WHERE NAZWISKO = 'TRĄBCZYŃSKI'; SELECT '' AS ZADANIE_20 FROM dual; CREATE SEQUENCE MALA_SEQ MAXVALUE 10; SELECT MALA_SEQ.NEXTVAL FROM dual; SELECT '' AS ZADANIE_21 FROM dual; DROP SEQUENCE mala_seq; DROP SEQUENCE prac_seq; --next topic-- drop table PROJEKTY; drop table PROJEKTY_KOPIA; SELECT '' as "Zadanie 1" from dual; CREATE TABLE PROJEKTY ( ID_PROJEKTU NUMBER(4) GENERATED ALWAYS AS IDENTITY, OPIS_PROJEKTU VARCHAR(20), DATA_ROZPOCZECIA DATE DEFAULT CURRENT_DATE, DATA_ZAKONCZENIA DATE, FUNDUSZ NUMBER(7,2) ); SELECT '' as "Zadanie 2" from dual; INSERT INTO PROJEKTY (OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES ('Indeksy bitmapowe', TO_DATE('02-04-1999', 'DD-MM-YYYY'), TO_DATE('31-08-2001', 'DD-MM-YYYY'), 25000); INSERT INTO PROJEKTY (OPIS_PROJEKTU, FUNDUSZ) VALUES ('Sieci kręgosłupowe', 19000); SELECT '' as "Zadanie 3" from dual; SELECT ID_PROJEKTU, OPIS_PROJEKTU FROM PROJEKTY; SELECT '' as "Zadanie 4" from dual; -- Próba wstawienia z ręcznym ID_PROJEKTU INSERT INTO PROJEKTY (ID_PROJEKTU, OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES (10, 'Indeksy drzewiaste', '2013-12-24', '2014-01-01', 1200); --Błąd: Pole ID_PROJEKTU jest automatycznie generowane. Nie można podać wartości ręcznie. INSERT INTO PROJEKTY (OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES ('Indeksy drzewiaste', TO_DATE('24-12-2013', 'DD-MM-YYYY'), TO_DATE('01-01-2014', 'DD-MM-YYYY'), 1200); SELECT id_projektu ,OPIS_PROJEKTU FROM PROJEKTY; SELECT '' as "Zadanie 5" from dual; UPDATE PROJEKTY SET ID_PROJEKTU = 10 WHERE OPIS_PROJEKTU = 'Indeksy drzewiaste'; -- TAK SAMO ID JEST PRZYDZIELANE AUTOMATYCZNIE WIEC NIE MOZNA GO NADPISAC UPDATE SELECT '' as "Zadanie 6" from dual; CREATE TABLE PROJEKTY_KOPIA AS SELECT * FROM PROJEKTY; SELECT * FROM PROJEKTY_KOPIA; SELECT '' as "Zadanie 7" from dual; INSERT INTO PROJEKTY_KOPIA (ID_PROJEKTU, OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES ( 10, 'Sieci lokalne', SYSDATE, ADD_MONTHS(SYSDATE, 12), 24500); --W tabeli PROJEKTY_KOPIA kolumna ID_PROJEKTU nie ma ograniczenia GENERATED ALWAYS AS IDENTITY. SELECT '' as "Zadanie 8" from dual; DELETE FROM PROJEKTY WHERE OPIS_PROJEKTU = 'Indeksy drzewiaste'; SELECT * FROM PROJEKTY; SELECT * FROM PROJEKTY_KOPIA; SELECT '' as "Zadanie 9" from dual; SELECT TABLE_NAME FROM USER_TABLES; --DDL2-- SELECT '' as "Zadanie 1" from dual; ALTER TABLE PROJEKTY ADD CONSTRAINT PK_PROJEKTY PRIMARY KEY (ID_PROJEKTU); ALTER TABLE PROJEKTY ADD CONSTRAINT UK_PROJEKTY UNIQUE (OPIS_PROJEKTU); ALTER TABLE PROJEKTY MODIFY OPIS_PROJEKTU NOT NULL; ALTER TABLE PROJEKTY ADD CONSTRAINT CHK_DATA CHECK (DATA_ZAKONCZENIA > DATA_ROZPOCZECIA); ALTER TABLE PROJEKTY ADD CONSTRAINT CHK_FUNDUSZ CHECK (FUNDUSZ > 0); SELECT A.CONSTRAINT_NAME AS CONSTRAINT_NAME, A.CONSTRAINT_TYPE AS C_TYPE, A.SEARCH_CONDITION AS SEARCH_CONDITION, B.COLUMN_NAME AS COLUMN_NAME FROM USER_CONSTRAINTS A LEFT JOIN USER_CONS_COLUMNS B ON A.CONSTRAINT_NAME = B.CONSTRAINT_NAME WHERE A.TABLE_NAME = 'PROJEKTY'; SELECT '' as "Zadanie 2" from dual; -- To polecenie wywola blad, poniewaz OPIS_PROJEKTU musi byc unikalny INSERT INTO PROJEKTY (OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES ('Indeksy bitmapowe', TO_DATE('12-04-2015', 'DD-MM-YYYY'), TO_DATE('30-09-2016', 'DD-MM-YYYY'), 40000); SELECT '' as "Zadanie 3" from dual; CREATE TABLE PRZYDZIALY ( ID_PROJEKTU INTEGER NOT NULL, NR_PRACOWNIKA INTEGER NOT NULL, PRZYDZIAL_OD DATE DEFAULT CURRENT_DATE, PRZYDZIAL_DO DATE, STAWKA NUMBER(7,2) CHECK (STAWKA > 0), ROLA VARCHAR2(20) CHECK (ROLA IN ('KIERUJĄCY', 'ANALITYK', 'PROGRAMISTA')), CONSTRAINT PK_PRZYDZIALY PRIMARY KEY (ID_PROJEKTU, NR_PRACOWNIKA), CONSTRAINT FK_PRZYDZIALY_01 FOREIGN KEY (ID_PROJEKTU) REFERENCES PROJEKTY(ID_PROJEKTU), CONSTRAINT FK_PRZYDZIALY_02 FOREIGN KEY (NR_PRACOWNIKA) REFERENCES PRACOWNICY(ID_PRAC), CONSTRAINT CHK_PRZYDZIALY_DATY CHECK (PRZYDZIAL_DO > PRZYDZIAL_OD) ); SELECT '' as "Zadanie 4" from dual; INSERT INTO PRZYDZIALY (ID_PROJEKTU, NR_PRACOWNIKA, PRZYDZIAL_OD, PRZYDZIAL_DO, STAWKA, ROLA) VALUES ((SELECT ID_PROJEKTU FROM PROJEKTY WHERE OPIS_PROJEKTU = 'Indeksy bitmapowe'), 170, DATE '1999-04-10', DATE '1999-05-10', 1000, 'KIERUJĄCY'); INSERT INTO PRZYDZIALY (ID_PROJEKTU, NR_PRACOWNIKA, PRZYDZIAL_OD, STAWKA, ROLA) VALUES ((SELECT ID_PROJEKTU FROM PROJEKTY WHERE OPIS_PROJEKTU = 'Indeksy bitmapowe'), 140, DATE '2000-12-01', 1500, 'ANALITYK'); INSERT INTO PRZYDZIALY (ID_PROJEKTU, NR_PRACOWNIKA, PRZYDZIAL_OD, STAWKA, ROLA) VALUES ((SELECT ID_PROJEKTU FROM PROJEKTY WHERE OPIS_PROJEKTU = 'Sieci kręgosłupowe'), 140, DATE '2015-09-14', 2500, 'KIERUJĄCY'); select * from przydzialy; SELECT '' as "Zadanie 5" from dual; ALTER TABLE PRZYDZIALY ADD (GODZINY INTEGER CHECK (GODZINY <= 9999)); --ALTER TABLE PRZYDZIALY --ADD GODZINY NUMBER(4) NOT NULL CHECK (GODZINY <= 9999); SELECT '' as "Zadanie 6" from dual; UPDATE PRZYDZIALY SET GODZINY = 40 WHERE ROLA = 'KIERUJĄCY'; UPDATE PRZYDZIALY SET GODZINY = 30 WHERE ROLA = 'ANALITYK'; ALTER TABLE PRZYDZIALY MODIFY GODZINY NOT NULL; SELECT '' as "Zadanie 7" from dual; ALTER TABLE PROJEKTY DISABLE CONSTRAINT UK_PROJEKTY; SELECT '' as "Zadanie 8" from dual; INSERT INTO PROJEKTY (OPIS_PROJEKTU, DATA_ROZPOCZECIA, DATA_ZAKONCZENIA, FUNDUSZ) VALUES ('Indeksy bitmapowe', TO_DATE('12-04-2015', 'DD-MM-YYYY'), TO_DATE('30-09-2016', 'DD-MM-YYYY'), 40000); select * from projekty; SELECT '' as "Zadanie 9" from dual; ALTER TABLE PROJEKTY ENABLE CONSTRAINT UK_PROJEKTY; --NIE UDAŁO SIĘ SELECT '' as "Zadanie 10" from dual; UPDATE PROJEKTY SET OPIS_PROJEKTU = 'Inne indeksy' WHERE DATA_ROZPOCZECIA = DATE '2015-04-12'; ALTER TABLE PROJEKTY ENABLE CONSTRAINT UK_PROJEKTY; --TAK UDAŁO SIĘ SELECT '' as "Zadanie 11" from dual; ALTER TABLE PROJEKTY MODIFY OPIS_PROJEKTU VARCHAR2(10); --NIE UDAŁO SIĘ PONIEWAŻ WARTOŚĆ JEST ZA DUŻA SELECT '' as "Zadanie 12" from dual; DELETE FROM PROJEKTY WHERE OPIS_PROJEKTU = 'Sieci kręgosłupowe'; SELECT '' as "Zadanie 13" from dual; ALTER TABLE PRZYDZIALY DROP CONSTRAINT FK_PRZYDZIALY_01; ALTER TABLE PRZYDZIALY ADD CONSTRAINT FK_PRZYDZIALY_01 FOREIGN KEY (ID_PROJEKTU) REFERENCES PROJEKTY(ID_PROJEKTU) ON DELETE CASCADE; SELECT * FROM PROJEKTY; SELECT * FROM PRZYDZIALY; SELECT '' as "Zadanie 14" from dual; SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'PRZYDZIALY'; SELECT '' as "Zadanie 15" from dual; DROP TABLE PROJEKTY CASCADE CONSTRAINTS; SELECT '' as "Zadanie 16" from dual; DROP TABLE PRZYDZIALY; DROP TABLE PROJEKTY_KOPIA; SELECT TABLE_NAME FROM USER_TABLES;