From 0dc5e043521dd748a5906512b40a64aa60553df0 Mon Sep 17 00:00:00 2001 From: Jakub Stefko Date: Thu, 16 Nov 2017 01:27:21 +0000 Subject: [PATCH] Update page 'Uczelnia' --- Uczelnia.md | 229 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 Uczelnia.md diff --git a/Uczelnia.md b/Uczelnia.md new file mode 100644 index 0000000..e43e506 --- /dev/null +++ b/Uczelnia.md @@ -0,0 +1,229 @@ +``` +--drop DATABASE Projekty +--GO + +--CREATE DATABASE Projekty +--GO + +USE dbad_s426254 +GO + +SET LANGUAGE polski +GO + +-------- USUŃ TABELE + +IF OBJECT_ID('Realizacje', 'U') IS NOT NULL + DROP TABLE Realizacje; + +IF OBJECT_ID('Projekty', 'U') IS NOT NULL + DROP TABLE Projekty; + +IF OBJECT_ID('Pracownicy', 'U') IS NOT NULL + DROP TABLE Pracownicy; + +IF OBJECT_ID('Stanowiska', 'U') IS NOT NULL + DROP TABLE Stanowiska; + +--------- CREATE - UTWÓRZ TABELE I POWIĄZANIA + +CREATE TABLE Stanowiska( + nazwa VARCHAR(10) PRIMARY KEY, + placa_min MONEY, + placa_max MONEY, + CHECK (placa_min < placa_max) +); + +CREATE TABLE Pracownicy( + id INT NOT NULL PRIMARY KEY, + nazwisko VARCHAR(20) NOT NULL, + szef INT REFERENCES Pracownicy(id), + placa MONEY, + dod_funkc MONEY, + stanowisko VARCHAR(10) REFERENCES Stanowiska(nazwa), + zatrudniony DATETIME +); + +CREATE TABLE Projekty( + id INT IDENTITY(10,10) NOT NULL PRIMARY KEY, + nazwa VARCHAR(20) NOT NULL UNIQUE, + dataRozp DATETIME NOT NULL, + dataZakonczPlan DATETIME NOT NULL, + dataZakonczFakt DATETIME NULL, + kierownik INT REFERENCES Pracownicy(id), + stawka MONEY +); + +CREATE TABLE Realizacje( + idProj INT REFERENCES Projekty(id), + idPrac INT REFERENCES Pracownicy(id), + godzin REAL DEFAULT 8 +); + +GO + +---------- INSERT - WSTAW DANE + +INSERT INTO Stanowiska VALUES ('profesor', 3000, 5000); +INSERT INTO Stanowiska VALUES ('adiunkt', 2000, 3000); +INSERT INTO Stanowiska VALUES ('doktorant', 900, 1300); +INSERT INTO Stanowiska VALUES ('sekretarka', 1500, 2500); +INSERT INTO Stanowiska VALUES ('techniczny', 1500, 2500); +INSERT INTO Stanowiska VALUES ('dziekan', 2700, 4800); + +INSERT INTO Pracownicy VALUES (1, 'Wachowiak', NULL, 4500, 900, 'profesor', '01-09-1980'); +INSERT INTO Pracownicy VALUES (2, 'Jankowski', 1, 2500, NULL, 'adiunkt', '01-09-1990'); +INSERT INTO Pracownicy VALUES (3, 'Fiołkowska', 1, 2550, NULL, 'adiunkt', '01-01-1985'); +INSERT INTO Pracownicy VALUES (4, 'Mielcarz', 1, 4000, 400, 'profesor', '01-12-1980'); +INSERT INTO Pracownicy VALUES (5, 'Różycka', 4, 2800, 200, 'profesor', '01-09-2001'); +INSERT INTO Pracownicy VALUES (6, 'Mikołajski', 4, 1000, NULL, 'doktorant', '01-10-2002'); +INSERT INTO Pracownicy VALUES (7, 'Wójcicki', 5, 1350, NULL, 'doktorant', '01-10-2003'); +INSERT INTO Pracownicy VALUES (8, 'Listkiewicz', 1, 2200, NULL, 'sekretarka', '01-09-1980'); +INSERT INTO Pracownicy VALUES (9, 'Wróbel', 1, 1900, 300, 'techniczny', '01-01-1999'); +INSERT INTO Pracownicy VALUES (10, 'Andrzejewicz', 5, 2900, NULL, 'adiunkt', '01-01-2002'); + +INSERT INTO Projekty VALUES ('e-learning', '01-01-2015', '31-05-2016', NULL, 5, 100); +INSERT INTO Projekty VALUES ('web service', '10-11-2009', '31-12-2010', '20-04-2011', 4, 90); +INSERT INTO Projekty VALUES ('semantic web', '01-09-2017', '01-09-2019', NULL, 4, 85); +INSERT INTO Projekty VALUES ('neural network', '01-01-2008', '30-06-2010', '30-06-2010', 1, 120); + +INSERT INTO Realizacje VALUES (10, 5, 8); +INSERT INTO Realizacje VALUES (10, 10, 6); +INSERT INTO Realizacje VALUES (10, 9, 2); +INSERT INTO Realizacje VALUES (20, 4, 8); +INSERT INTO Realizacje VALUES (20, 6, 8); +INSERT INTO Realizacje VALUES (20, 9, 2); +INSERT INTO Realizacje VALUES (30, 4, 8); +INSERT INTO Realizacje VALUES (30, 6, 6); +INSERT INTO Realizacje VALUES (30, 10, 6); +INSERT INTO Realizacje VALUES (30, 9, 2); +INSERT INTO Realizacje VALUES (40, 1, 8); +INSERT INTO Realizacje VALUES (40, 2, 4); +INSERT INTO Realizacje VALUES (40, 3, 4); +INSERT INTO Realizacje VALUES (40, 9, 2); + + +------------ SELECT + +SELECT * FROM Stanowiska; +SELECT * FROM Pracownicy; +SELECT * FROM Projekty; +SELECT * FROM Realizacje; + +--1.1 Dla każdego pracownika podaj jego nazwisko i płacę roczną, tzn. (placa + dodatki) * 12 +SELECT nazwisko, (placa+ISNULL(dod_funkc,0))*12 'placa roczna' FROM Pracownicy; + +--1.2 Znajdź najnowszy projekt. +SELECT * FROM Projekty WHERE dataRozp = +(SELECT MAX(dataRozp) FROM Projekty); + +--1.3 Dla każdego projektu podaj jego nazwę i czas trwania (w miesiącach - wykorzystaj DATEDIFF; jeżeli projekt nadal trwa, to należy porównać z dzisiejszą datą) +SELECT nazwa, (DATEDIFF(month,dataRozp,ISNULL(dataZakonczFakt,GETDATE()))) 'sthing' FROM Projekty; + +--1.4 Podaj informację o pracownikach zatrudnionych na stanowisku adiunkt lub doktorant i zarabiających powyżej 1500 zł +SELECT * FROM Pracownicy WHERE stanowisko='adiunkt' AND placa > 1500; + +--1.5 Podaj nazwiska pracowników którzy nie mają szefa +SELECT nazwisko FROM Pracownicy WHERE szef IS NULL; + +--1.6 Znajdź projekty zawierające web w nazwie +SELECT * FROM Projekty WHERE nazwa Like '%web%'; + +--2.1 Dla każdego pracownika podaj jego nazwisko, płacę, nazwę stanowiska oraz widełki płacowe na jego stanowisku +SELECT A.nazwisko, A.stanowisko, A.placa, B.placa_min, B.placa_max FROM Pracownicy A +INNER JOIN Stanowiska B ON A.stanowisko=B.nazwa; + +--2.2 Znajdź doktorantów, których płaca nie mieści się w widełkach płacowych dla doktoranta +SELECT * FROM Pracownicy A +INNER JOIN Stanowiska B ON A.stanowisko=B.nazwa +WHERE (placa < placa_min OR placa > placa_max) +AND stanowisko = 'doktorant'; + +--2.3 Dla każdego pracownika podaj nazwy projektów w których pracuje; posortuj alfabetycznie po nazwisku +SELECT A.nazwisko, C.nazwa FROM Pracownicy A +INNER JOIN Realizacje B ON A.id=B.idPrac +INNER JOIN Projekty C ON C.id=B.idProj +ORDER BY nazwisko; + +--2.4 Dla każdego pracownika podaj jego nazwisko oraz nazwisko jego szefa +SELECT A.nazwisko, B.nazwisko FROM Pracownicy A +JOIN Pracownicy B ON A.szef=B.id; + +--2.5 Zmodyfikuj zad 2.4. aby na liście pracowników uwzględnić również Wachowiaka +SELECT A.nazwisko, B.nazwisko FROM Pracownicy A +LEFT OUTER JOIN Pracownicy B ON A.szef=B.id; + +--2.6 Podaj nazwiska pracowników, którzy nie kierują żadnym projektem +SELECT A.nazwisko FROM Pracownicy A +LEFT OUTER JOIN Projekty B ON A.id=B.kierownik +WHERE kierownik IS NULL; + +--2.7 Podaj nazwiska pracowników, którzy nie są zatrudnieni w projekcie nr 10 +SELECT nazwisko FROM Pracownicy A +WHERE id NOT IN (SELECT idPrac FROM Realizacje WHERE + idProj=10); + +--2.8 Sprawdź, czy w bazie znajdują się pracownicy o tym samym nazwisku +SELECT DISTINCT A.nazwisko, B.nazwisko FROM Pracownicy A +JOIN Pracownicy B ON A.nazwisko = B.nazwisko +WHERE A.id != B.id; + +--2.9 Zweryfikuj, czy każdy pracownik kierujący projektem jest również pracownikiem tego projektu (wpisanym do tabeli Realizacje). Zapytanie ma zwracać pracowników nie spełniających tego warunku +SELECT * FROM Pracownicy A +INNER JOIN Realizacje B ON A.id=B.idPrac +INNER JOIN Projekty C ON A.id=C.kierownik +WHERE id +--WHERE (SELECT D.id FROM Pracownicy D WHERE D.id=A.id) IN +(SELECT E.id FROM Pracownicy E JOIN +Realizacje F ON E.id=F.idPrac +WHERE F.idProj = B.idProj); + +SELECT * FROM Stanowiska; +SELECT * FROM Pracownicy; +SELECT * FROM Projekty; +SELECT * FROM Realizacje; + +---4.10 ??? +SELECT nazwisko FROM Pracownicy + +EXCEPT + +SELECT nazwisko FROM Pracownicy P +JOIN Projekty R ON P.id = R.kierownik; +--- + +--- 4.12 ??? +SELECT p.nazwisko, (SELECT +SUM(R.godzin * Pr.stawka * DATEDIFF(week, dataRozp, ISNULL(dataZakonczFakt, GETDATE()))) +FROM Realizacje R, Projekty Pr +WHERE R.idPrac = P.id AND R.idProj = Pr.id) as 'Zarobki' +FROM Pracownicy P +WHERE (SELECT +SUM(R.godzin * Pr.stawka * DATEDIFF(week, dataRozp, ISNULL(dataZakonczFakt, GETDATE()))) +FROM Realizacje R, Projekty Pr +WHERE R.idPrac = P.id AND R.idProj = Pr.id) IS NOT NULL +ORDER BY 'Zarobki' DESC; +--- + +CREATE VIEW AktualneProjekty2(nazwa, kierownik, licz_pracownikow) +AS +( + SELECT nazwa, + (SELECT nazwisko FROM Pracownicy P WHERE Pr.kierownik = P.id), + (SELECT COUNT (*) FROM Realizacje R WHERE Pr.id = R.idProj) + FROM Projekty Pr + WHERE dataZakonczFakt IS NULL +); + +GO + +SELECT * FROM AktualneProjekty2; + +SELECT nazwa, licz_pracownikow +FROM AktualneProjekty2 +GROUP BY nazwa, licz_pracownikow +HAVING licz_pracownikow >= ALL +(SELECT licz_pracownikow FROM AktualneProjekty2 +GROUP BY licz_pracownikow); + +``` \ No newline at end of file