Zadania:
Stwórz nowy zespół o nazwie 'BAZY DANYCH' i wartości ID_ZESP większej o 10 od największej wartości ID_ZESP występującej w tabeli ZESPOLY. Całość wykonaj jednym poleceniem.
Rozwiązanie:
INSERT INTO zespoly(id_zesp, nazwa) VALUES (
(SELECT MAX(id_zesp)+10 FROM zespoly), 'BAZY DANYCH');
Stwórz nowy etat 'STUDENT'. Jako płacę minimalną i maksymalną podaj odpowiednio 0 i 330 złotych.
Rozwiązanie:
INSERT INTO etaty VALUES ('STUDENT', 0, 330);
Zatrudnij siebie na etacie 'STUDENT' w zespole 'BAZY DANYCH' podając jako datę zatrudnienia aktualną datę systemową. Płacę podstawową ustaw na 330zł, a dodatkową na 5% średniej płacy w zespole 'ADMINISTRACJA'. Jako ID_PRAC podaj największą wartość ID_PRAC występującą w tabeli PRACOWNICY zwiększoną o 10. Wszystko wykonaj jednym poleceniem.
Rozwiązanie:
INSERT INTO pracownicy(id_prac,imie,nazwisko,zatrudniony,placa_pod,etat,id_zesp,placa_dod) VALUES (
(SELECT MAX(id_prac)+10 FROM pracownicy), 'Jan','Kowalski',SYSDATE, 330, 'STUDENT',
(SELECT id_zesp FROM zespoly WHERE nazwa='SYSTEMY BAZ DANYCH'),
(SELECT 0.05*AVG(placa_pod) FROM pracownicy NATURAL JOIN zespoly WHERE nazwa='ADMINISTRACJA') );
Rozwiązanie:
ROLLBACK;
Podnieś do średniej pracowniczej pensję najgorzej zarabiającym pracownikom.
Rozwiązanie:
UPDATE pracownicy
SET placa_pod=(SELECT AVG (placa_pod) FROM pracownicy)
WHERE placa_pod=(SELECT MIN(placa_pod) FROM pracownicy);
Pracownikom zespołu 'SYSTEMY ROZPROSZONE' daj 25% podwyżkę.
Rozwiązanie:
UPDATE pracownicy
SET placa_pod=placa_pod*1.25
WHERE id_zesp=ANY (SELECT id_zesp FROM zespoly WHERE nazwa='SYSTEMY ROZPROSZONE');
Usuń zespół, na którym nie ma żadnych pracowników.
Rozwiązanie:
DELETE FROM zespoly z WHERE NOT EXISTS (SELECT * FROM pracownicy WHERE z.id_zesp=id_zesp);
Usuń asystentów, którym nie płaci się pensji dodatkowej.
Rozwiązanie:
DELETE FROM pracownicy WHERE placa_dod IS NULL AND etat='ASYSTENT';
Zadania:
Utwórz relację zawierającą nazwisko szefa i nazwisko podwładnego. Wypełnij ją danymi. Wszystko wykonaj jednym poleceniem.
Rozwiązanie:
CREATE TABLE prac_szef (szef, podwladny) AS
SELECT s.nazwisko, p.nazwisko
FROM pracownicy s JOIN pracownicy p ON (s.id_prac=p.id_szefa);
Stwórze relację PROJEKTY o następujących atrybutach i ograniczeniach:
Rozwiązanie:
CREATE TABLE projekty (
id_projektu NUMERIC (4) PRIMARY KEY,
opis_projektu CHARACTER VARYING (20),
CONSTRAINT un_opis UNIQUE NOT NULL,
data_rozpoczenia DATE DEFAULT SYSDATE,
data_zakonczenia DATE,
CHECK (data_rozpoczenia < data_zakonczenia),
fundusz NUMERIC(7,2)
);
Stwórze relację PRZYDZIALY o następujących atrybutach i ograniczeniach:
Klucz podstawowy tworzą razem dwie kolumny id_projektu oraz id_prac.
Rozwiązanie:
CREATE TABLE przydzialy (
id_projektu NUMERIC(4) REFERENCES projekty (id_projektu),
id_prac NUMERIC(4) REFERENCES pracownicy (id_prac),
od DATE DEFAULT SYSDATE,
do DATE,
CHECK (od < do),
stawka NUMERIC(7,2),
rola CHARACTER VARYING (20) CHECK (rola IN ('KIERUJACY', 'ANALITYK', 'PROGRAMISTA')),
PRIMARY KEY (id_projektu,id_prac)
);