Update page 'Uczelnia'
parent
4e31d7cf5d
commit
0dc5e04352
229
Uczelnia.md
Normal file
229
Uczelnia.md
Normal file
@ -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);
|
||||||
|
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user