Kierunek: Informatyka III
Przedmiot: Bazy danych
POLTECHNIKA OPOLSKA
Wykonał:
Adam Czech
Kierunek: Informatyka III
Przedmiot: Bazy danych
1
1. Zadania do wykonania
Do relacji prac kopia wpisać tych pracowników, z relacji prac, którzy pracują na
stanowisku profesorskim i zostali zatrudnieni przed rokiem 1978.
Podnieść pensję pracownikom najgorzej zarabiającym do średniej pensji w zakładzie
pracy.
Uaktualnić pensję dodatkową pracownikom zespołu 20. Nowa pensja ma być równa
średniej pensji podstawowej pracowników, których przełożonym jest ‘*****’.
Zwiększyć płacę podstawową do 120% średniej płacy podstawowej w zespole
pracownika oraz zwiększyć płacę dodatkową do wartości równej maksymalnej płacy
dodatkowej w zespole pracownika. Operacji dokonać tylko dla pracowników
zatrudnionych po 1990 roku.
Wskazówka: użyć funkcji nvl(wyrażenie, wartość) służącej do obsługi tzw. wartości
pustych.
Wyświetlić nazwiska pracowników pracujących na etacie wprowadzonym
interakcyjnie. W zapytaniu nie rozróżniać małych i dużych liter.
Wyświetlić nazwiska pracowników zatrudnionych między dwoma interakcyjnie
podanymi datami. Wykorzystać zmienne z pojedynczym znakiem &.
Wyświetlić nazwiska, etaty, płace podstawowe pracowników nie będących
asystentami, pracujących w zespole, którego nazwa wprowadzana jest interakcyjnie.
Uporządkować zgodnie z malejącą datą.
Korzystając z polecenia accept zdefiniować zmienną id_zesp oraz etat. Na
podstawie powyższych zmiennych wydać zapytanie wyświetlające dane o
pracownikach wybranego zespołu i pracujących na wybranym etacie.
Zdefiniować perspektywę wyświetlającą wszystkich przełożonych i nazwy zespołów,
w których pracują.
Wpisać krotkę do relacji prac, wykorzystując licznik do generowania
unikalnych numerów pracowników. Licznik ma być acykliczny, ma rozpocząć zliczanie
od wartości 4000 i zwiększać się o 2 po każdym odczycie nowej wartości.
wszystkich przełożonych i nazwy zespołów, w których pracują,
listę etatów (bez duplikatów) na których zatrudnieni są pracownicy uczelni,
wszystkie dane o pracownikach zespołów 30 i 40 w kolejności malejących zarobków,
nazwiska, daty zatrudnienia i etaty asystentów zatrudnionych w 1992 lub 1993 roku,
nazwiska i płace pracowników powiększone o 15% i zaokrąglone do liczb całkowitych,
2. Zadania wykonane
Do relacji prac kopia wpisać tych pracowników, z relacji prac, którzy pracują na
stanowisku profesorskim i zostali zatrudnieni przed rokiem 1978.
POLECENIE:
insert into prac_kopia select * from prac
Kierunek: Informatyka III
Przedmiot: Bazy danych
2
where etat = 'PROFESOR' and zatrudniony < '01-JAN-1978';
WYNIK:
4 rows inserted.
Podnieść pensję pracownikom najgorzej zarabiającym do średniej pensji w zakładzie
pracy.
POLECENIE:
update prac set placa_pod = (select avg(placa_pod) from prac)
where placa_pod = (select min(placa_pod) from prac);
WYNIK:
1 rows updated.
Uaktualnić pensję dodatkową pracownikom zespołu 20. Nowa pensja ma być równa
średniej pensji podstawowej pracowników, których przełożonym jest ‘*****’.
POLECENIE:
update prac set placa_dod =
(select avg(nvl(placa_dod, 0)) from prac where szef = (select id_prac from prac where
nazwisko = '&NAZWISKO_PRZELOZONEGO'))
where id_zesp = 20;
Po uruchomieniu wpisujemy nazwisko np. „ABACKI”
WYNIK:
old:update prac set placa_dod =
(select avg(nvl(placa_dod, 0)) from prac where szef = (select id_prac from prac where
nazwisko = '&NAZWISKO_PRZELOZONEGO'))
where id_zesp = 20
new:update prac set placa_dod =
(select avg(nvl(placa_dod, 0)) from prac where szef = (select id_prac from prac where
nazwisko = 'ABACKI'))
where id_zesp = 20
7 rows updated.
Teraz można sprawdzić pracowników o “id_zesp =20”
POLECENIE:
select id_zesp, placa_dod from prac where id_zesp = 20;
Kierunek: Informatyka III
Przedmiot: Bazy danych
3
WYNIK:
ID_ZESP PLACA_DOD
----------------
20 52.5
20 52.5
20 52.5
20 52.5
20 52.5
20 52.5
20 52.5
7 rows selected
Zwiększyć płacę podstawową do 120% średniej płacy podstawowej w zespole
pracownika oraz zwiększyć płacę dodatkową do wartości równej maksymalnej płacy
dodatkowej w zespole pracownika. Operacji dokonać tylko dla pracowników
zatrudnionych po 1990 roku.
POLECENIE:
update prac p set
placa_pod = (select avg(placa_pod)*1.2 from prac where prac.id_zesp = p.id_zesp),
placa_dod = (select max(nvl(placa_dod, 0)) from prac where prac.id_zesp = p.id_zesp)
where zatrudniony > '31-DEC-1990';
WYNIK:
6 rows updated.
Wyświetlić nazwiska pracowników pracujących na etacie wprowadzonym
interakcyjnie. W zapytaniu nie rozróżniać małych i dużych liter.
POLECENIE:
select nazwisko from prac where upper(etat) = upper('&ETAT');
WYNIK, dla którego w okienku interakcyjnym wprowadzamy słowo “ProfeSor”:
old:select nazwisko from prac where upper(etat) = upper('&ETAT')
new:select nazwisko from prac where upper(etat) = upper('ProfeSor')
NAZWISKO
---------------
BABACKI
CABACKI
DABACKI
EBACKI
Wyświetlić nazwiska pracowników zatrudnionych między dwoma interakcyjnie
podanymi datami. Wykorzystać zmienne z pojedynczym znakiem &.
Kierunek: Informatyka III
Przedmiot: Bazy danych
4
POLECENIE:
select nazwisko, zatrudniony from prac
where zatrudniony between '&DATA1' and '&DATA2';
WYNIK zapytania, dla którego w pierwszym okienku interakcyjnym wprowadzamy datę w
postaci 01-JAN-75, a w drugim datę w postaci 01-JAN-80:
old:select nazwisko, zatrudniony from prac
where zatrudniony between '&DATA1' and '&DATA2'
new:select nazwisko, zatrudniony from prac
where zatrudniony between '01-JAN-75' and '01-JAN-80'
NAZWISKO ZATRUDNIONY
--------------------------
CABACKI 01-SEP-77
EBACKI 15-SEP-75
FABACKI 01-SEP-
Korzystając z polecenia accept zdefiniować zmienną id_zesp oraz etat. Na podstawie
powyższych zmiennych wydać zapytanie wyświetlające dane o pracownikach
wybranego zespołu i pracujących na wybranym etacie.
POLECENIE:
accept id_zesp number(2,0) prompt 'ID_ZESP';
accept etat varchar2(10) prompt 'ETAT';
select * from prac where id_zesp = &id_zesp and upper(etat) = upper('&etat');
WYNIK zapytania, dla którego w pierwszym okienku interakcyjnym wprowadzamy liczbę
20, a w drugim wprowadzamy słowo “Profesor”:
old:select* from prac where id_zesp = &id_zesp and upper(etat) = upper('&etat')
new:select * from prac where id_zesp = 20 and upper(etat) = upper('Profesor')
ID_PRAC NAZWISKO ETAT SZEF ZATRUDNIONY PLACA_POD PLACA_DOD ID_ZESP
------------------------------------------------------------------------
130 DABACKI PROFESOR 100 01-JUL-68 2960 52.5 20
140 EBACKI PROFESOR 130 15-SEP-75 2830 52.5 20
Zdefiniować perspektywę wyświetlającą wszystkich przełożonych i nazwy zespołów,
w których pracują.
POLECENIE:
create view view1 as
(select nazwisko "PRZEŁOŻONY", nazwa "NAZWA ZESPOŁU" from prac p, zesp z where
id_prac in(select distinct szef from prac) and p.id_zesp = z.id_zesp)
with check option
WYNIK:
view VIEW1 created.
Kierunek: Informatyka III
Przedmiot: Bazy danych
5
Wpisać krotkę do relacji prac, wykorzystując licznik do generowania unikalnych
numerów pracowników. Licznik ma być acykliczny, ma rozpocząć zliczanie od
wartości 4000i zwiększać się o 2 po każdym odczycie nowej wartości.
TWORZENIE LICZNIKA:
create sequence seq_id_prac increment by 2 start with 4000;
WYNIK:
sequence SEQ_ID_PRAC created.
POLECENIE WYKORZYSTUJĄCE STWORZONY LICZNIK:
insert into prac
values(seq_id_prac.nextval, 'BABACKI', 'ASYSTENT', 100, '20-JUN-1990', 1000, NULL, 10);
WYNIK:
1 rows inserted.
Zdefiniować perspektywę wyświetlającą wszystkich przełożonych i nazwy zespołów,
w których pracują.
POLECENIE:
create view view_a
(przelozony, nazwa_zesp)
as
select nazwisko, nazwa from prac, zesp
where
id_prac in (select szef from prac)
and
prac.id_zesp = zesp.id_zesp;
WYNIK:
view VIEW_A created.
SPRAWDZENIE:
select * from view_a;
WYNIK SPRAWDZENIA:
PRZELOZONY NAZWA_ZESP
-----------------------------------
ABACKI ADMINISTRACJA
BABACKI AUTOMATYKA
CABACKI BUDOWNICTWO
DABACKI INFORMATYKA
EBACKI INFORMATYKA
Kierunek: Informatyka III
Przedmiot: Bazy danych
6
Zdefiniować perspektywę wyświetlającą listę etatów (bez duplikatów) na których
zatrudnieni są pracownicy uczelni.
POLECENIE:
create view view_b
as
select distinct etat from prac;
--lub
create view view_b
as
select etat from prac group by etat;
WYNIK:
view VIEW_B created.
SPRAWDZENIE:
select * from view_b;
WYNIK SPRAWDZENIA:
ETAT
----------
ADIUNKT
PROFESOR
DYREKTOR
STAZYSTA
ASYSTENT
SEKRETARKA
6 rows selected
Zdefiniować perspektywę wyświetlającą nazwiska, daty zatrudnienia i etaty
asystentów zatrudnionych w 1992 lub 1993 roku.
POLECENIE:
create view view_d
as
select nazwisko, zatrudniony, etat from prac
where
etat = 'ASYSTENT'
and
zatrudniony between '01-JAN-1992' and '31-DEC-1993';
WYNIK:
view VIEW_D created.
Kierunek: Informatyka III
Przedmiot: Bazy danych
7
SPRAWDZENIE:
select * from view_d;
WYNIK SPRAWDZENIA:
NAZWISKO ZATRUDNIONY ETAT
------------------------------------
HABACKI 01-OCT-92 ASYSTENT
IBACKI 01-SEP-93 ASYSTENT
MABACKI 01-OCT-93 ASYSTENT
NABACKI 01-SEP-92 ASYSTENT
e) Zdefiniować perspektywę wyświetlającą nazwiska ipłace pracowników
powiększone o 15% i zaokrąglone do liczb całkowitych.
POLECENIE:
create view view_e
(nazwisko, placa_pod_pow_o_15_proc)
as
select nazwisko, round(placa_pod*1.15) from prac;
Funkcja round(liczba) zaokrągla:
• w górę jeśli część dziesiętnaliczby >= 0.5
• w dół jeśli część dziesiętna liczby < 0.5
WYNIK:
view VIEW_E created.
SPRAWDZENIE:
select * from view_e;
WYNIK SPRAWDZENIA:
NAZWISKO PLACA_POD_POW_O_15_PROC
--------------------------------------
ABACKI 3140
BABACKI 3853
CABACKI 3531
DABACKI 3404
EBACKI 3255
FABACKI 1892
GABACKI 1829
HABACKI 1656
IBACKI 1577
JOTBACKA 1622
KABACKI 1389
LABACKI 1438
MABACKI 1702
NABACKI 1702
BABACKI 1150
15 rows selected