Lista druga Bazy danych
AND pensje.dolna_granica <= pracownicy.pensja AND pracownicy.pensja <= pensje.gorna_granica ORDER BY wydziały.lokalizacja DESC;
(d) wyznacz nazwiska pracowników, którzy pracują w tych samych wydziałach, co ich przełożeni. Obok nazwiska pracownika umieść nazwisko przełożonego i nr wydziału, w którym obaj pracują,
SELECT pracownicy.imię AS imię, pracownicy.nazwisko AS nazwisko, przełożeni.nazwisko AS przełożony, pracownicy.nr_wydzialu AS numer.wydziału FROM pracownicy, pracownicy AS przełożeni WHERE pracownicy.przelozony=przelozeni.nr.pracownika AND pracownicy.nr_wydzialu=przelozeni.nr.wydziału;
(e) wyznacz stanowiska (bez powtórzeń), na których nie ma prowizji. Uporządkuj wynik wg liczby liter w stanowisku (wskazówka: długość napisu jest zwracana przez funkcję length, a końcowe spacje można usunąć funkcją rtrim),
SELECT stanowisko FROM pracownicy
WHERE prowizja > 0 OR prowizja IS NULL
GROUP BY stanowisko
ORDER BY length(rtrim(stanowisko));
(f) ustaw w pary pracowników, którzy pracują w tym samym wydziale. Nazwiska w parach powinny być różne i pary nie powinny się powtarzać,
SELECT pracownicy1.nazwisko AS nazwisko, pracownicy2.nazwisko AS nazwisko, pracownicy1.nr.wydzialu AS nr.wydzialu FROM pracownicy AS pracownicyl, pracownicy AS pracownicy2 WHERE pracownicyl.nr_wydzialu=pracownicy2.nr.wydziału
AND pracownicyl.nr.pracownika < pracownicy2.nr.pracownika;
3. Używając pliku poset.sąl utwórz tabelę p opisującą pewną relację dwuargumentową. Przy pomocy komend SQLa:
(a) wypisz wszystkie liczby występujące w p; oznaczmy zbiór tych liczb przez d;
\i Dokumenty/semestr.3/Bazy.Danych/lista2/poset.sql
INSERT INTO d (SELECT x FROM p UNION
SELECT y FROM p);
(b) traktując p jako relację na d sprawdź, czy jest ona zwrotna;
SELECT z
FROM d EXCEPT SELECT x FROM p
WHERE p.x=p.y;
(c) nie oszukujmy się - nie jest zwrotna; popraw p tak, by była zwrotna na d;
CREATE TABLE p2 (x INTEGER, y INTEGER);
INSERT INTO p2
(SELECT * FROM p
UNION SELECT z,z FROM d);
2