Tabele jakich dotyczą zadania:
Pracownicy(id, imie, nazwisko, id_dzialu, pensja, projekt)
Projekty(p_id, szef_projektu, nazwa, termin_oddania)
Działy(id_dzialu, nazwa, adres)
Nie wiem jak zrobić 2 i jak mają się odnosić zapytania skorelowane do 4 (EXISTS, NOT EXISTS?)
Poniższe zadania rozwiąż używając podzapytań skorelowanych
- Wyświetl nazwiska i imiona pracowników zarabiających więcej niż 50% maksymalnej pensji w działach, do których należą.
- Stosując podzapytanie skorelowane wyświetl informacje o dziale nie zatrudniającym żadnych pracowników z projektu "p1".
Hint: wyświetl te działy, w których 0 pracowników pracuje przy projekcie "p1".
- Wyświetl nazwiska i pensje pięciu najlepiej zarabiających pracowników. Nie można używać konstrukcji typu TOP, LIMIT itp.
Hint: przepisz zadanie na: znajdź tych ludzi, dla których ilość osób o wyższej pensji jest mniejsza od 5
- Wyświetl informacje o pracownikach, dla których termin ich projektu jest mniejszy od daty systemowej. Pamiętaj, aby pominąć pracowników bez przydziałów do zespołów!
Hint: może przydać się operacja IS NOT NULL
Rozwiązanie:
1.
SELECT imie, nazwisko
FROM Pracownicy P
WHERE pensja > ( SELECT (1/2 * MAX(pensja))
FROM Pracownicy
WHERE id_dzialu = P.id_dzialu);
3.
SELECT imie, pensja
FROM Pracownicy P
WHERE 5 > ( SELECT COUNT(*)
FROM Pracownicy
WHERE pensja > P.pensja);
4.
SELECT *
FROM Pracownicy P
WHERE projekt IS NOT NULL AND projekt = ANY ( SELECT p_id
FROM Projekty
WHERE termin_oddania < SYSDATE);