4. Sekwencje

advertisement
1
1. Wyświetl całość informacji z relacji ZESPOLY
select * from ZESPOLY;
2. Wyświetl całość informacji z relacji PRACOWNICY
select * from pracownicy;
3. Wyświetl nazwiska, etaty i roczne dochody pracowników.
select nazwisko, etat, 12* placa_pod from pracownicy;
4. Wyświetl nazwy i sumaryczne miesięczne dochody pracowników (z uwzględnieniem płac
dodatkowych)
select nazwisko, placa_pod+NVL(placa_dod,0) from pracownicy;
5. Wyświetl całość informacji o zespołach sortując wynik według nazw zespołów
select * from zespoly order by nazwa;
6. Wyświetl listę etatów (bez duplikatów) na których zatrudnieni są pracownicy Instytutu.
select distinct etat from pracownicy;
7. Wyświetl wszystkie informacje o asystentach pracujących w Instytucie.
select * from pracownicy where etat='ASYSTENT';
8. Wybierz poniższe dane o pracownikach zespołów 30 i 40 w kolejności malejących
zarobków.
select id_prac, nazwisko, etat, placa_pod, id_zesp from pracownicy where id_zesp in (30,40);
9. Wybierz dane o pracownikach których płace podstawowe mieszczą się w przedziale 300 do
800 zł.
select nazwisko, id_zesp, placa_pod from pracownicy where placa_pod between 300 and 800;
10. Wyświetl poniższe informacje o pracownikach, których nazwisko kończy się na SKI
select nazwisko, etat, id_zesp from pracownicy where nazwisko like '%SKI';
11. Wyświetl poniższe informacje o tych pracownikach, którzy zarabiają powyżej 1000 złotych
i posiadają szefa.
select id_prac, id_szefa, nazwisko, placa_pod from pracownicy where id_szefa is not null and
placa_pod>1000;
12. Wyświetl nazwiska i identyfikatory zespołów pracowników zatrudnionych w zespole nr 20,
których nazwisko zaczyna się na ‘M’ lub kończy na ‘SKI’.
2
select nazwisko, id_zesp from pracownicy where id_zesp=20 and (nazwisko like 'M%' or
nazwisko like '%SKI');
13. Wyświetl nazwiska, etaty i stawki godzinowe tych pracowników, którzy nie są ani
adiunktami ani asystentami ani stażystami i którzy nie zarabiają w przedziale od 400 do 800
złotych. Wyniki uszereguj według stawek godzinowych pracowników (przyjmij 20-dniowy
miesiąc pracy i 8-godzinny dzień pracy).
select nazwisko, etat, placa_pod/160 from pracownicy where etat not in('ADIUNKT',
'STAZYSTA', 'ASYSTENT') and placa_pod not between 400 and 800 order by placa_pod;
14. Wyświetl poniższe informacje o pracownikach, dla których suma płacy podstawowej i
dodatkowej jest wyższa niż 1000 złotych. Wyniki uporządkuj według nazw etatów. Jeżeli
dwóch pracowników ma ten sam etat, to posortuj ich według nazwisk.
select nazwisko, placa_pod, placa_dod, etat from pracownicy where
placa_pod+NVL(placa_dod,0)>1000 order by etat, nazwisko;
15. Wyświetl poniższe informacje o profesorach, wyniki uporządkuj według malejących płac.
select nazwisko || ' pracuje od ' || zatrudniony || ' i zarabia ' || placa_pod from pracownicy where
etat='PROFESOR';
Funkcje znakowe i liczbowe, konwersja, funkcje działające na datach i
funkcje polimorficzne- zadania
1.
Dla każdego pracownika wygeneruj kod składający się z dwóch pierwszych liter jego etatu
i jego numeru identyfikacyjnego.
select nazwisko, substr(etat,1,2)||id_zesp from pracownicy;
2.
Wydaj wojnę literom „K”, „L”, „M” zamieniając je wszystkie na literę „X” w nazwiskach
pracowników
select nazwisko, translate(nazwisko,'KLM','XXX') as wojna_literom from pracownicy;
3.
Wyświetl nazwiska pracowników którzy posiadają literę „L” w pierwszej połowie swojego
nazwiska.
select nazwisko from pracownicy where
substr(nazwisko,1,trunc(length(nazwisko)/2))like '%L%';
3
4.
Wyświetl nazwiska i płace pracowników powiększone o 15% i zaokrąglone do liczb
całkowitych
select nazwisko, round(placa_pod*1.15) from pracownicy;
5.
Każdy pracownik odłożył 20% swoich miesięcznych zarobków na 10-letnią lokatę
oprocentowaną 10% w skali roku i kapitalizowaną co roku. Wyświetl informację o tym, jaki
zysk będzie miał każdy pracownik po zamknięciu lokaty.
select nazwisko, placa_pod, 0.2*placa_pod as inwestycja, 0.2*placa_pod*power(1.1,10) as
kapital, 0.2*placa_pod*power(1.1,10)-0.2*placa_pod as zysk from pracownicy;
Policz, ile lat pracuje każdy pracownik
6.
select nazwisko, extract (year from sysdate)-extract (year from zatrudniony) as pracuje from
pracownicy;
Wyświetl poniższe informacje o datach przyjęcia pracowników zespołu 20
7.
select nazwisko, to_char(zatrudniony, 'month,DD,YYYY') as data_zatrudnienia from
pracownicy where id_zesp=20;
Sprawdź, jaki mamy dziś dzień tygodnia
8.
select to_char(sysdate, 'day') from dual;
9.
Przyjmij, że Mielżyńskiego i Strzelecka należą do dzielnicy Stare Miasto, Piotrowo należy
do dzielnicy Nowe Miasto a Włodkowica należy do dzielnicy Grunwald. Wyświetl poniższy
raport (skorzystaj z wyrażenia CASE)
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 'GRUDNWALD'
END as dzielnica
from zespoly;
10. Dla każdego pracownika wyświetl informację o tym, czy jego pensja jest mniejsza niż,
równa lub większa niż 480 złotych
select nazwisko, placa_pod,
case
4
when placa_pod<480 then 'ponizje 480'
when placa_pod=480 then 'rowno 480'
else 'powyzej 480' END as placa
from pracownicy;
11. (dla chętnych) Napisz to samo zapytanie przy pomocy funkcji DECODE
Podział na grupy, klauzula GROUP BY - zadania
12. Wyświetl najniższą i najwyższą pensję w firmie. Wyświetl informację o różnicy dzielącej
najlepiej i najgorzej zarabiających pracowników.
select max(placa_pod) as maks, min(placa_pod) as min, max(placa_pod)-min(placa_pod) as
roznica from pracownicy;
13. Wyświetl średnie pensje dla wszystkich etatów. Wyniki uporządkuj wg. malejącej średniej
pensji.
select avg(placa_pod), etat from pracownicy group by etat order by avg(placa_pod) desc; 14.
Wyświetl liczbę profesorów zatrudnionych w Instytucie
select count(nazwisko) as profesorowie from pracownicy where etat='PROFESOR';
15. Znajdź sumaryczne miesięczne płace dla każdego zespołu. Nie zapomnij o płacach
dodatkowych.
select id_zesp, sum(placa_pod+NVL(placa_dod,0)) as placa from pracownicy group by
id_zesp;
16. Dla każdego pracownika wyświetl pensję najgorzej zarabiającego podwładnego. Wyniki
uporządkuj wg. malejącej pensji.
select id_szefa, min(placa_pod) from pracownicy group by id_szefa;
17. Wyświetl numery zespołów, które zatrudniają więcej niż 3 pracowników. Wyniki
uporządkuj wg. malejącej liczby pracowników.
select id_zesp, count(nazwisko) from pracownicy group by id_zesp having
count(nazwisko)>3;
18. Wyświetl średnie pensje wypłacane w ramach poszczególnych etatów i liczbę
zatrudnionych na danym etacie. Pomiń pracowników zatrudnionych po 1990 roku.
select etat, avg(placa_pod) as srednia, count(nazwisko) as liczba from pracownicy
where zatrudniony<to_date('01-01-1990', 'mm, dd,yyyy') group by etat;
Połączenia – zadania
5
1. Wyświetl nazwiska, etaty, numery zespołów i nazwy zespołów wszystkich pracowników.
select p.nazwisko, p.etat, p.id_zesp, z.nazwa from pracownicy p, zespoly z where
p.id_zesp=z.id_zesp;
2. Wyświetl wszystkich pracowników z ul. Piotrowo 3a. Uporządkuj wyniki według nazwisk
pracowników.
select p.nazwisko, p.etat, p.id_zesp, z.adres from pracownicy p, zespoly z where
p.id_zesp=z.id_zesp and adres like 'PIOTROWO%';
3. Wyświetl nazwiska, miejsca pracy oraz nazwy zespołów tych pracowników, których
miesięczna pensja przekracza 400.
select p.nazwisko, z.nazwa, z.adres from pracownicy p, zespoly z where p.id_zesp=z.id_zesp
and placa_pod>400;
4. Dla każdego pracownika wyświetl jego kategorię płacową i widełki płacowe w jakich
mieści się pensja pracownika.
select nazwisko, placa_pod, etat, nazwa, placa_min, placa_max from pracownicy, etaty where
etat=nazwa;
5. Wyświetl nazwiska i etaty pracowników, których rzeczywiste zarobki odpowiadają
widełkom płacowym przewidzianym dla sekretarek.
select nazwisko, placa_pod, etat, nazwa, placa_min, placa_max from pracownicy, etaty
where nazwa='SEKRETARKA' and placa_pod between placa_min and placa_max;
6. Wyświetl nazwiska, etaty, wynagrodzenia, kategorie płacowe i nazwy zespołów
pracowników nie będących asystentami. Wyniki uszereguj zgodnie z malejącym
wynagrodzeniem.
select nazwisko, etat, placa_pod, e.nazwa, z.nazwa from pracownicy p, etaty e, zespoly z
where etat=e.nazwa and p.id_zesp=z.id_zesp and etat!='ASYSTENT';
7. Wyświetl poniższe informacje o tych pracownikach, którzy są asystentami lub adiunktami i
których roczne dochody przekraczają 5500. Roczne dochody to dwunastokrotność płacy
podstawowej powiększona o ewentualną płacę dodatkową. Ostatni atrybut to nazwa
kategorii płacowej pracownika.
6
select nazwisko, etat, placa_pod*12+NVL(placa_dod,0) as roczna_placa, e.nazwa, z.nazwa
from pracownicy p, etaty e, zespoly z where etat=e.nazwa and p.id_zesp=z.id_zesp and
e.nazwa in ('ASYSTENT', 'ADIUNKT') and placa_pod*12+NVL(placa_dod,0)>5500;
8. Wyświetl nazwiska i numery pracowników wraz z numerami i nazwiskami ich szefów.
select p1.nazwisko, p1.id_prac, p2.id_prac as id_szefa, p2.nazwisko as nazwisko_szefa from
pracownicy p1, pracownicy p2 where p1.id_szefa=p2.id_prac;
9. Zmodyfikuj powyższe zlecenie w ten sposób, aby było możliwe wyświetlenie pracownika
WEGLARZ (który nie ma szefa).
select p1.nazwisko, p1.id_prac, p2.id_prac as id_szefa, p2.nazwisko as nazwisko_szefa from
pracownicy p1, pracownicy p2 where p1.id_szefa=p2.id_prac(+);
10. Dla każdego zespołu wyświetl liczbę zatrudnionych w nim pracowników i ich średnią płacę.
select z.nazwa, count(nazwisko), avg(placa_pod) from zespoly z, pracownicy p where
z.id_zesp=p.id_zesp group by z.nazwa;
11. Dla każdego pracownika posiadającego podwładnych wyświetl ich liczbę. Wyniki posortuj
zgodnie z malejącą liczbą podwładnych.
select p1.nazwisko, count(p2.nazwisko) from pracownicy p1, pracownicy p2 where
p2.id_szefa=p1.id_prac group by p1.nazwisko order by count(p2.nazwisko) desc;
12. Wyświetl nazwiska i daty zatrudnienia pracowników, którzy zostali zatrudnieni nie później
niż 10 lat (3650 dni) po swoich przełożonych.
select p1.nazwisko, p1.zatrudniony, p2.nazwisko as szef, p2.zatrudniony as
szef_zatrudniony
from pracownicy p1, pracownicy p2
where p1.id_szefa=p2.id_prac and extract(year from p1.zatrudniony)-extract(year from
p2.zatrudniony)<10;
Podzapytania – zadania
1. Wyświetl nazwiska i etaty pracowników pracujących w tym samym zespole co pracownik o
nazwisku Brzeziński.
select nazwisko, etat, id_zesp from pracownicy
where id_zesp=(select id_zesp from pracownicy where nazwisko='BRZEZINSKI');
2. Wyświetl poniższe dane o najdłużej zatrudnionym profesorze.
select nazwisko, etat, zatrudniony from pracownicy
where zatrudniony=(select min(zatrudniony) from pracownicy);
3. Wyświetl najkrócej pracujących pracowników każdego zespołu. Uszereguj wyniki zgodnie z
7
kolejnością zatrudnienia.
select nazwisko, zatrudniony, id_zesp from pracownicy where (zatrudniony, id_zesp) in
(select min(zatrudniony), id_zesp from pracownicy group by id_zesp)order by zatrudniony;
4. Wyświetl zespoły, które nie zatrudniają pracowników.
select z.id_zesp, z.nazwa, z.adres from zespoly z, pracownicy p
where z.id_zesp=p.id_zesp(+) and (select count(p.nazwisko) from pracownicy)=0;
5. Wyświetl poniższe informacje o pracownikach zarabiających więcej niż średnia pensja dla
ich etatu.
select p.nazwisko, p.placa_pod, p.etat from pracownicy p
where placa_pod>(select avg(placa_pod) from pracownicy where etat=p.etat);
select z.id_zesp, z.nazwa, z.adres from zespoly z
where id_zesp not in (select distinct id_zesp from pracownicy);
6. Wyświetl nazwiska i pensje pracowników którzy zarabiają co najmniej 75% pensji swojego
szefa.
select p.nazwisko, p.placa_pod from pracownicy p
where placa_pod>0.75*(select placa_pod from pracownicy where id_prac=p.id_szefa);
7. Wyświetl nazwiska tych profesorów, którzy wśród swoich podwładnych nie mają żadnych
stażystów.
select p.nazwisko from pracownicy p
where etat='PROFESOR' AND p.id_prac <> all (select id_szefa from pracownicy where
etat='STAZYSTA');
8. Stosując podzapytanie skorelowane wyświetl informacje o zespole nie zatrudniającym
żadnych pracowników.
select z.id_zesp, z.nazwa, z.adres from zespoly z, pracownicy p
where z.id_zesp=p.id_zesp(+) and (select count(p.nazwisko) from pracownicy)=0;
select z.id_zesp, z.nazwa, z.adres from zespoly z
where not exists (select nazwisko from pracownicy where id_zesp=z.id_zesp);
9. Wyświetl numer zespołu wypłacającego miesięcznie swoim pracownikom najwięcej
pieniędzy.
select id_zesp, sum(placa_pod) from pracownicy group by id_zesp
having sum(placa_pod)=(select max(sum(placa_pod)) from pracownicy group by id_zesp);
10.
Wyświetl nazwiska i pensje trzech najlepiej zarabiających pracowników. Zastosuj
podzapytanie.
select p.nazwisko from pracownicy p where (select count(*) from pracownicy where
placa_pod>p.placa_pod)<3;
8
11.
Wyświetl dla każdego roku liczbę zatrudnionych w nim pracowników. Wynik
uporządkuj zgodnie z liczbą zatrudnionych.
select distinct extract(year from p.zatrudniony), count(nazwisko) from pracownicy p group by
extract(year from p.zatrudniony);
12.
Zmodyfikuj powyższe zapytanie w ten sposób, aby wyświetlać tylko rok, w którym
przyjęto najwięcej pracowników.
select distinct extract(year from p.zatrudniony), count(nazwisko) from pracownicy p group by
extract(year from p.zatrudniony) having (select max(count(nazwisko)) from pracownicy group by
extract(year from zatrudniony))=count(nazwisko);
13.
Wyświetl poniższe informacje o tych pracownikach, którzy zarabiają mniej niż
średnia płaca dla ich etatu.
select p.nazwisko, p.etat, p.placa_pod, z.nazwa from pracownicy p, zespoly z where
p.id_zesp=z.id_zesp and placa_pod<(select avg(placa_pod) from pracownicy where etat=p.etat);
14.
Zmodyfikuj powyższe zapytanie w ten sposób, aby zamiast nazwy zespołu
wyświetlać średnią płacę dla danego etatu.
NAZWISKO
ETAT
PLACA_POD AVG(X.PLACA_POD)
--------------- ---------- --------- ---------------KOSZLAJDA
ADIUNKT
JEZIERSKI
ASYSTENT
590
439,7
617,75
442,675
MATYSIAK
ASYSTENT
371
442,675
BRZEZINSKI
PROFESOR
960
1052,5
MORZY
PROFESOR
ZAKRZEWICZ
STAZYSTA
830
1052,5
208
229
15.
Wyświetl nazwiska profesorów i liczbę ich podwładnych. Wyświetl tylko
profesorów zatrudnionych na Piotrowie.
NAZWISKO
PODWLADNI
--------------- --------BRZEZINSKI
MORZY
5
2
16.
Dla każdego profesora wyświetl jego nazwisko, średnią płacą w jego zespole i
największą płacę w Instytucie. Zastosuj podzapytanie w klauzuli SELECT.
9
NAZWISKO
SREDNIA MAKSYMALNA
--------------- ---------- ---------BLAZEWICZ
1350
SLOWINSKI
502
BRZEZINSKI
616,6
MORZY
616,6
1730
1730
1730
1730
17.
Dla każdego pracownika wyświetl jego nazwisko oraz nazwę zespołu w którym
pracuje dany pracownik. Posłuż się podzapytaniem w klauzuli SELECT.
NAZWISKO
ZESPOL
------------------------------ -------------------WEGLARZ
ADMINISTRACJA
BLAZEWICZ
ALGORYTMY
SLOWINSKI
SYSTEMY EKSPERCKIE
BRZEZINSKI
SYSTEMY ROZPROSZONE
MORZY
SYSTEMY ROZPROSZONE
KROLIKOWSKI
SYSTEMY ROZPROSZONE
KOSZLAJDA
SYSTEMY ROZPROSZONE
JEZIERSKI
SYSTEMY ROZPROSZONE
MATYSIAK
SYSTEMY ROZPROSZONE
MAREK
ADMINISTRACJA
ZAKRZEWICZ
BIALY
SYSTEMY EKSPERCKIE
SYSTEMY EKSPERCKIE
KONOPKA
HAPKE
SYSTEMY ROZPROSZONE
SYSTEMY EKSPERCKIE
18.
Wyświetl informacje o asystentach pracujących na Piotrowie. Klauzula FROM
powinno wyglądać następująco: FROM ASYSTENCI NATURAL JOIN PIOTROWO.
Zastosuj klauzulę WITH.
NAZWISKO
ETAT
NAZWA
ADRES
--------------- ---------- -------------------- -----------JEZIERSKI
ASYSTENT SYSTEMY ROZPROSZONE PIOTROWO 3A
MATYSIAK
ASYSTENT SYSTEMY ROZPROSZONE PIOTROWO 3A
KONOPKA
ASYSTENT SYSTEMY ROZPROSZONE PIOTROWO 3A
10
19.
Wyświetl poniższe informacje o wszystkich (pośrednich i bezpośrednich)
podwładnych Brzezińskiego.
NAZWISKO
ID_PRAC ID_SZEFA
LEVEL
--------------- ---------- ---------- ---------BRZEZINSKI
130
MORZY
140
MATYSIAK
KROLIKOWSKI
1.
210
3
130
160
170
3
140
150
JEZIERSKI
2.
2
140
200
KOSZLAJDA
1
130
190
ZAKRZEWICZ
BIALY
100
2
130
2
130
130
2
2
Język definiowania danych DDL - zadania
Utwórz poniższe relacje.
Nazwa relacji: PROJEKTY
Własność
Nazwa
1.
Typ
2. Roz
miar
ID_PROJEKTU
Liczba
4
Klucz podstawowy
OPIS_PROJEKTU
Łańcuch znaków
20
Wymagany, unikalny
DATA_ROZPOCZECIA
Data
Domyślnie data systemowa
Późniejsza niż DATA_ROZPOCZECIA
DATA_ZAKONCZENIA Data
FUNDUSZ
Liczba (2 miej.dz)
7
Większy lub równy 0
create table projekty (
id_projektu number(4) constraint id_projektu_klucz primary key,
opis_projektu varchar(20) constraint opis_projektu unique not null,
11
data_rozpoczecia date default sysdate,
data_zakonczenia date,
fundusz number(7,2) constraint fundusz check (fundusz>=0),
constraint daty check (data_zakonczenia>data_rozpoczecia));
Nazwa relacji: PRZYDZIALY
Nazwa
Typ
Własność
Rozmiar
ID_PROJEKTU
Liczba
4
Niepusty klucz obcy (PROJEKTY)
NR_PRACOWNIKA
Liczba
4
Niepusty klucz obcy (PRACOWNICY)
OD
Data
Domyślnie data systemowa
DO
Data
Późniejsza niż OD
STAWKA
Liczba (2 miej.dz)
7
Większa od 0
ROLA
Łańcuch znaków
20
Jedynie wartości ‘KIERUJĄCY’
‘ANALITYK’ ‘PROGRAMISTA’
Kluczem podstawowym relacji PRZYDZIALY jest para atrybutów (ID_PROJEKTU,
NR_PRACOWNIKA)
create table przydzialy (
id_projektu number(4) constraint blad_id_projektu not null references projekty(id_projektu),
nr_pracownika number(4) constraint blad_nr_pracownika not null references pracownicy(id_prac),
od date default sysdate,
do date,
stawka number(7,2) constraint blad_stawka check(stawka>0),
rola varchar(20) constraint blad_rola check(rola in('KIERUJACY', 'ANALITYK',
'PROGRAMISTA')),
constraint blad_daty check(do>od),
constraint pk primary key (id_projektu,nr_pracownika)
);
2.
Dodaj do relacji PRZYDZIALY atrybut GODZINY typu liczbowego.
alter table przydzialy add (godziny number(4));
3.
Dodaj do utworzonych przez siebie relacji komentarze i wyświetl te komentarze.
12
TABLE_NAME TABLE_TYPE COMMENTS
---------- ---------- -----------------------------------------------PROJEKTY TABLE
PRZYDZIALY TABLE
Lista projektów prowadzonych przez pracowników
Informacje o przydziale poszczególnych
pracowników do projektóW
4.
Wyświetl informacje o ograniczeniach założonych na relacji PRZYDZIALY
CONSTRAINT_NAME C SEARCH_CONDITION
--------------- - ---------------------------------------------SYS_C006587
C "ID_PROJEKTU" IS NOT NULL
SYS_C006588
C "NR_PRACOWNIKA" IS NOT NULL
SYS_C006589
C STAWKA >= 0
ROLA_CHK
C ROLA IN ('KIERUJACY','ANALITYK','PROGRAMISTA')
SYS_C006591
C DO > OD
SYS_C006592
P
SYS_C006593
R
SYS_C006594
R
5.
Wyłącz tymczasowo sprawdzanie unikalności opisów projektów.
6.
Zwiększ maksymalny rozmiar atrybutu OPIS_PROJEKTU do 30 znaków.
7.
Utwórz relację PRACOWNICY_ZESPOŁY zawierającą następujące dane. Posłuż się
mechanizmem tworzenia relacji w oparciu o zapytanie.
NAZWISKO
POSADA
ROCZNA_PLACA ZESPOL
ADRES_PRACY
create table pracownicy_zespoly as
(select p.nazwisko, p.etat as posada, 12*p.placa_pod+nvl(p.placa_dod,0) as roczna_placa,
z.nazwa, z.adres from pracownicy p, zespoly z where p.id_zesp=z.id_zesp);
3.
1.
Język manipulowania danymi DML - zadania
Wstaw do relacji PROJEKTY następujące krotki
atrybut
wartość
wartość
13
ID_PROJEKTU
1
2
OPIS_PROJEKTU
Indeksy bitmapowe
Sieci kręgosłupowe
DATA_ROZPOCZECIA
02-04-1999
12-11-2000
DATA_ZAKONCZENIA
31-08-2001
FUNDUSZ
25000
19000
insert into projekty(id_projektu, opis_projektu, data_rozpoczecia, data_zakonczenia, fundusz)
values (1, 'Indeksy bitmapowe', to_date('02-04-1999', 'dd-mm-yyyy'), to_date('31-08-2001', 'ddmm-yyyy'), 25000);
insert into projekty(id_projektu, opis_projektu, data_rozpoczecia, fundusz)
values (2, 'Sieci kregoslupowe', to_date('12-11-2000', 'dd-mm-yyyy'), 19000);
2.
Wstaw do relacji PRZYDZIALY następujące krotki
wartość
atrybut
ID_PROJEKTU
1
wartość
1
NR_PRACOWNIKA 170
140
OD
10-04-1999
01-12-2000
DO
10-05-1999
STAWKA
1000
1500
ROLA
KIERUJĄCY
ANALITYK
GODZINY
20
40
insert into przydzialy(id_projektu, nr_pracownika, od, do, stawka, rola, godziny)
values (1, 170, to_date('10-04-1999', 'dd-mm-yyyy'), to_date('10-05-1999', 'dd-mm-yyyy'),
1000, 'KIERUJACY', 20);
insert into przydzialy(id_projektu, nr_pracownika, od, stawka, rola, godziny)
values (2, 140, to_date('01-12-2000', 'dd-mm-yyyy'), 1500, 'ANALITYK', 40);
3.
Podnieś stawkę pracownika o numerze 170 do 1200 złotych (relacja PRZYDZIALY)
update przydzialy set stawka=1200 where nr_pracownika=170;
4.
Zmień datę zakończenia projektu ‘Indeksy bitmapowe’ na 31 grudnia 2001 i zmniejsz fundusz
14
tego projektu do 19000 złotych.
update projekty set fundusz=19000, data_zakonczenia=to_date('31.12.2001', 'dd.mm.yyyy')
where opis_projektu like'Indeksy%';
5.
Wstaw dwie propozycje własnych projektów.
insert into projekty(id_projektu, opis_projektu, data_rozpoczecia, data_zakonczenia, fundusz)
values (3, 'projekt X', to_date('02-04-2005', 'dd-mm-yyyy'),
to_date('31-10-2005', 'dd-mm-yyyy'), 25000);
insert into projekty(id_projektu, opis_projektu, data_rozpoczecia, data_zakonczenia, fundusz)
values (4, 'projekt GABKA', to_date('18-04-2006', 'dd-mm-yyyy'),
to_date('16-10-2007', 'dd-mm-yyyy'), 89000);
6.
Usuń informacje o projektach do których nie przydzielono żadnych pracowników.
delete projekty p where (select count(*) from przydzialy where id_projektu=p.id_projektu)=0;
7.
Wszystkim pracownikom podnieś pensję o 10% średniej płacy w ich zespole.
8.
Podnieś do średniej pracowniczej pensję najgorzej zarabiającym pracownikom.
9.
Uaktualnij płace dodatkowe pracowników zespołu 20. Nowe płace dodatkowe mają być
równe średniej płacy pracowników, których przełożonym jest prof. Morzy.
10. Pracownikom zespołu o nazwie ‘SYSTEMY ROZPROSZONE’ daj 25% podwyżkę. Zastosuj
modyfikację połączenia.
11. Usuń podwładnych pracownika o nazwisku Morzy. Zastosuj usuwanie krotek z wyniku
połączenia relacji.
4.
Sekwencje - zadania
12. Utwórz sekwencję MYSEQ rozpoczynającą się od 300 i zwiększającą się w każdym kroku o 10.
13. Wykorzystaj utworzoną sekwencję do wstawienia nowego stażysty o nazwisku Trąbczyński do
relacji Pracownicy.
14. Zmodyfikuj pracownikowi Trąbczyńskiemu płacę dodatkową na wartość wskazywaną przez
sekwencję.
15. Stwórz nową sekwencję o niskiej wartości maksymalnej. Zaobserwuj, co się dzieje, gdy
następuje „przepełnienie” sekwencji.
15
Download