Bazy danych Lista druga
1. Załóż tabelę logika o trzech atrybutach p,q,r typu BOOLEAN. Uzupełnij ją wszystkimi możliwymi waluacjami logiki SQL (oczywiście nie rób tego ręcznie). Następnie przy użyciu komend SQLa sprawdź, dla jakich waluacji formuła zdaniowa ((p A ->q) V (q IS NULL)) IS NULL A ->r przyjmuje wartość NULL. W ten sposób przekonaj się, czy jest ona tautologią w logice SQL.
CREATE TABLE logika (p BOOLEAN);
INSERT INTO logika VALUES(true);
INSERT INTO logika VALUES(false);
INSERT INTO logika VALUES(NULL);
SELECT LI.p AS p, L2.p AS r, L3.p AS q FROM logika AS LI, logika AS L2, logika AS L3 WHERE ((((Ll.p AND (NOT L3.p)) OR (L3.p IS NULL)) IS NULL)
AND (NOT L2.p)) IS NULL;
2. Baza danych opisująca strukturę pewnej firmy ma następujący schemat:
pracownicy (nr_pracownika INTEGER, imię TEXT, nazwisko TEXT,
stanowisko TEXT, opis TEXT, przełożony INTEGER, data_zatrudnienia DATĘ, pensja DECIMAL(7,2), prowizja DECIMAL(7,2), nr_wydzialu INTEGER)
wydziały (nr_wydzialu INTEGER, nazwa INTEGER, lokalizacja TEXT)
pensje (nr.przedziału INTEGER, dolna.granica DECIMAL(7,2), gorna.granica DECIMAL(7,2))
Napisz zapytania realizujące następujące zadania:
(a) wyznacz listę pracowników, których nazwisko zaczyna się literą K i zostali zatrudnieni przed 1998 r. Uporządkuj listę wg daty zatrudnienia w porządku malejącym,
\i Dokumenty/semestr.3/Bazy.Danych/lista2/firma.sql
SELECT imię, nazwisko FROM pracownicy
WHERE (nazwisko >’K’) AND (nazwisko < ’L’)
AND (data.zatrudnienia < ’1998-01-01’)
ORDER BY data.zatrudnienia DESC;
(b) wyznacz listę pracowników, którzy pracują na stanowisku dyrektor w miastach Poznań lub Toruń,
SELECT imię, nazwisko
FROM pracownicy, wydziały WHERE pracownicy.nr_wydzialu=wydzialy.nr.wydziału AND pracownicy.stanowisko=’dyrektor’
AND (wydziały.lokalizacja=’Poznam’ OR wydziały.lokalizacja=’Toruń’);
(c) wyznacz listę osób, których zarobki znajdują się w drugim przedziale pensji. Uporządkuj wg miejsca pracy,
SELECT pracownicy.imię AS imię, pracownicy.nazwisko AS nazwisko FROM pracownicy, wydziały, pensje WHERE pracowni cy. nr_wydz i alu=wydz ialy. nr_wydz ialu AND pensje.nr_przedzialu=2
1