background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 

POLTECHNIKA OPOLSKA 

 

 

 

 

 

 

 

 

 

 

 

 

 

Wykonał:  

Adam Czech 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

 

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 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

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; 

 

 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

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 &. 

 

 
 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

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. 
 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

 

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 

 
 
 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

 
 
 
 

 

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. 

background image

Kierunek: Informatyka III 
Przedmiot: Bazy danych 
 

 
 

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