Advertisement
Guest User

Untitled

a guest
May 29th, 2018
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.52 KB | None | 0 0
  1. --Imię i nazwisko: Marcel Dajnowicz
  2. --Numer indeksu: 253971
  3. --Temat bazy danych: Lotnisko
  4.  
  5. -- 0) Poprawione rozwiązanie zadania 1b (skrypt generujący strukturę bazy danych)
  6.  
  7. --Zmiana formatu daty (polecenie zgodne z MSSQL)
  8. SET DATEFORMAT ymd;
  9. GO
  10.  
  11. --Utworzenie wymaganych tabel
  12. CREATE TABLE oplata (
  13. id_oplata int IDENTITY(1,1) PRIMARY KEY,
  14. nazwa_terminala VARCHAR(30) NOT NULL,
  15. data DATETIME NOT NULL,
  16. kwota MONEY NOT NULL CHECK(kwota>=0),
  17. );
  18. GO
  19.  
  20. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('a','2018-09-02','200');
  21. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('b','2018-5-22','23450');
  22. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('c','2018-12-12','3560');
  23. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('c','2016-02-12','856');
  24. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('b','2017-04-22','550');
  25. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('a','2017-03-02','456');
  26. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('b','2016-12-22','3250');
  27. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('a','2016-02-12','26');
  28. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('c','2017-04-22','7250');
  29. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('a','2018-12-01','32504');
  30. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('b','2018-09-22','256');
  31. INSERT INTO oplata(nazwa_terminala,data,kwota) VALUES ('c','2018-07-02','6250');
  32.  
  33.  
  34. CREATE TABLE typ_oplaty (
  35. id_typ_oplaty int IDENTITY(1,1) PRIMARY KEY,
  36. nazwa VARCHAR(30) NOT NULL,
  37. oplata_id INTEGER NOT NULL REFERENCES oplata(id_oplata) ON UPDATE CASCADE,
  38. );
  39. GO
  40.  
  41.  
  42.  
  43. INSERT INTO typ_oplaty(nazwa,oplata_id) VALUES ('Gotówka',1);
  44. INSERT INTO typ_oplaty(nazwa,oplata_id) VALUES ('Gotówka',2);
  45. INSERT INTO typ_oplaty(nazwa,oplata_id) VALUES ('Karta Kredytowa',3);
  46. INSERT INTO typ_oplaty(nazwa,oplata_id) VALUES ('Krata Kredytowa',4);
  47. INSERT INTO typ_oplaty(nazwa,oplata_id) VALUES ('Gotówka',5);
  48.  
  49.  
  50.  
  51.  
  52.  
  53. CREATE TABLE klasa_samolotowa (
  54. id_klasa_samolotowa int IDENTITY(1,1) PRIMARY KEY,
  55. nazwa_klasy VARCHAR(20) NOT NULL,
  56. opis_klasy VARCHAR(20) NULL,
  57. );
  58. GO
  59.  
  60. INSERT INTO klasa_samolotowa(nazwa_klasy,opis_klasy) VALUES ('Economic','tanie');
  61. INSERT INTO klasa_samolotowa(nazwa_klasy,opis_klasy) VALUES ('Super-economic','super tanie');
  62. INSERT INTO klasa_samolotowa(nazwa_klasy,opis_klasy) VALUES ('luxary','dla bogaczy');
  63. INSERT INTO klasa_samolotowa(nazwa_klasy,opis_klasy) VALUES ('super-luxary','dla super bogaczy');
  64. INSERT INTO klasa_samolotowa(nazwa_klasy,opis_klasy) VALUES ('normal','dla sredniakow');
  65.  
  66.  
  67. CREATE TABLE posilek (
  68. id_posilek int IDENTITY(1,1) PRIMARY KEY,
  69. nazwa VARCHAR(30) NOT NULL,
  70. klasa_samolotowa_id INTEGER NOT NULL REFERENCES klasa_samolotowa(id_klasa_samolotowa) ON UPDATE CASCADE,
  71. );
  72. GO
  73.  
  74. INSERT INTO posilek(nazwa,klasa_samolotowa_id) VALUES ('zupa',1);
  75. INSERT INTO posilek(nazwa,klasa_samolotowa_id) VALUES ('drugie danie',2);
  76. INSERT INTO posilek(nazwa,klasa_samolotowa_id) VALUES ('hot dog',3);
  77. INSERT INTO posilek(nazwa,klasa_samolotowa_id) VALUES ('napoj',4);
  78. INSERT INTO posilek(nazwa,klasa_samolotowa_id) VALUES ('pelny posilek',5);
  79.  
  80. CREATE TABLE typ_samolotu (
  81. id_typ_samolotu int IDENTITY(1,1) PRIMARY KEY,
  82. nazwa_typu VARCHAR(10) NOT NULL,
  83. opis VARCHAR(100) NOT NULL,
  84. );
  85. GO
  86.  
  87. INSERT INTO typ_samolotu(nazwa_typu, opis) VALUES ('BOJING','potwor');
  88. INSERT INTO typ_samolotu(nazwa_typu, opis) VALUES ('Posejdon','przewozi czolgi');
  89. INSERT INTO typ_samolotu(nazwa_typu, opis) VALUES ('Mars','leci na wojne');
  90. INSERT INTO typ_samolotu(nazwa_typu, opis) VALUES ('Copter','maly');
  91. INSERT INTO typ_samolotu(nazwa_typu, opis) VALUES ('AIRFORCE 1','malo-wazny');
  92.  
  93.  
  94.  
  95.  
  96. CREATE TABLE producent_samolotu (
  97. id_producent_samolotu int IDENTITY(1,1) PRIMARY KEY,
  98. nazwa_producenta VARCHAR(10) NOT NULL,
  99. ceo VARCHAR(20) NOT NULL,
  100. rok_zalozenia DATETIME NULL,
  101. );
  102. GO
  103.  
  104. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('Ferrari','Adam Johnson', '2008-05-09');
  105. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('Bugatti', 'Adam Johnson','2010-03-29');
  106. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('Maluch', 'Adam Johnson','2007-03-19');
  107. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('Amrix', 'Adam Johnson','1997-12-01');
  108. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('Intel', 'Adam Johnson','1997-09-19');
  109. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('IBM', 'Adam Johnson','1996-09-19');
  110. INSERT INTO producent_samolotu(nazwa_producenta, ceo, rok_zalozenia) VALUES ('SpaceX', 'Adam Johnson','2018-01-19');
  111.  
  112.  
  113. CREATE TABLE samolot (
  114. id_samolot int IDENTITY(1,1) PRIMARY KEY,
  115. nazwa VARCHAR(20) NOT NULL UNIQUE,
  116. numer VARCHAR(20) NOT NULL UNIQUE,
  117. model VARCHAR(20) NOT NULL UNIQUE,
  118. pojemnosc VARCHAR(10) NOT NULL,
  119. producent_samolotu_id INTEGER NOT NULL REFERENCES producent_samolotu(id_producent_samolotu) ON UPDATE CASCADE,
  120. typ_samolotu_id INTEGER NOT NULL REFERENCES typ_samolotu(id_typ_samolotu) ON UPDATE CASCADE,
  121. );
  122. GO
  123.  
  124. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Markotny','23','1 Generacja','201',4,5);
  125. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Latajacy','223','X1X','5',5,4);
  126. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Nurek','1','Supreme','566',3,3);
  127. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('SuperSlim','235','Stealth','23',2,2);
  128. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Pitchfork','2','Short','1',1,1);
  129. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Niszczyciel','12223','SuperHej','66',1,3);
  130. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('Furiat','278','Quicki','234',1,2);
  131. INSERT INTO samolot(nazwa,numer,model, pojemnosc, producent_samolotu_id, typ_samolotu_id) VALUES ('SuperFer','2232','Space','1',1,1);
  132.  
  133.  
  134. CREATE TABLE miejsce_samolotowe (
  135. id_miejsce_samolotowe int IDENTITY(1,1) PRIMARY KEY,
  136. numer_miejsca VARCHAR(5) NOT NULL UNIQUE,
  137. klasa_samolotowa_id INTEGER NOT NULL REFERENCES klasa_samolotowa(id_klasa_samolotowa),
  138. samolot_id INTEGER NOT NULL REFERENCES samolot(id_samolot),
  139. );
  140. GO
  141.  
  142. INSERT INTO miejsce_samolotowe(numer_miejsca,klasa_samolotowa_id,samolot_id) VALUES ('56',1,1);
  143. INSERT INTO miejsce_samolotowe(numer_miejsca,klasa_samolotowa_id,samolot_id) VALUES ('78',2,2);
  144. INSERT INTO miejsce_samolotowe(numer_miejsca,klasa_samolotowa_id,samolot_id) VALUES ('101',3,3);
  145. INSERT INTO miejsce_samolotowe(numer_miejsca,klasa_samolotowa_id,samolot_id) VALUES ('523',4,4);
  146. INSERT INTO miejsce_samolotowe(numer_miejsca,klasa_samolotowa_id,samolot_id) VALUES ('23',5,5);
  147.  
  148.  
  149. CREATE TABLE status_lotu (
  150. id_status_lotu int IDENTITY(1,1) PRIMARY KEY,
  151. nazwa VARCHAR(20) NOT NULL UNIQUE,
  152. opis VARCHAR(30) NOT NULL,
  153. data DATETIME NOT NULL DEFAULT GETDATE(),
  154. opoznienia VARCHAR(20) NULL,
  155. );
  156. GO
  157.  
  158. INSERT INTO status_lotu(nazwa, opis,data,opoznienia) VALUES ('Great Line','papieros na pokaldzie','2012-02-03','');
  159. INSERT INTO status_lotu(nazwa, opis,data,opoznienia) VALUES ('MAGA','cos nie tak','2016-11-14','');
  160. INSERT INTO status_lotu(nazwa, opis,data,opoznienia) VALUES ('InterCont','atak','2017-10-25','2 godziny');
  161. INSERT INTO status_lotu(nazwa, opis,data,opoznienia) VALUES ('WOHO','wszystko w normie','2014-01-12','');
  162. INSERT INTO status_lotu(nazwa, opis,data,opoznienia) VALUES ('LETSGO','wszystko w normie','2018-12-03','dwa dni');
  163.  
  164.  
  165. CREATE TABLE lot (
  166. id_lot int IDENTITY(1,1) PRIMARY KEY,
  167. opis VARCHAR(20) NULL,
  168. status_lotu_id INTEGER NOT NULL REFERENCES status_lotu(id_status_lotu) ON UPDATE CASCADE,
  169. typ_samolotu_id INTEGER NOT NULL REFERENCES typ_samolotu(id_typ_samolotu) ON UPDATE CASCADE,
  170. );
  171. GO
  172.  
  173. INSERT INTO lot(opis, status_lotu_id,typ_samolotu_id) VALUES ('fajny',1,1);
  174. INSERT INTO lot(opis, status_lotu_id,typ_samolotu_id) VALUES ('niebezpieczny',1,1);
  175. INSERT INTO lot(opis, status_lotu_id,typ_samolotu_id) VALUES ('wszystko-ok',1,2);
  176. INSERT INTO lot(opis, status_lotu_id,typ_samolotu_id) VALUES ('',2,3);
  177. INSERT INTO lot(opis, status_lotu_id,typ_samolotu_id) VALUES ('zderzenie',3,4);
  178.  
  179.  
  180. CREATE TABLE cena_za_bilet (
  181. id_cena_za_bilet int IDENTITY(1,1) PRIMARY KEY,
  182. cena_za_bilet VARCHAR(10) NOT NULL,
  183. miejsce_samolotowe_id INTEGER NOT NULL REFERENCES miejsce_samolotowe(id_miejsce_samolotowe) ON UPDATE CASCADE,
  184. lot_id INTEGER NOT NULL REFERENCES lot(id_lot) ON UPDATE CASCADE,
  185. );
  186. GO
  187.  
  188. INSERT INTO cena_za_bilet(cena_za_bilet, miejsce_samolotowe_id,lot_id) VALUES ('123',1,1);
  189. INSERT INTO cena_za_bilet(cena_za_bilet, miejsce_samolotowe_id,lot_id) VALUES ('1232',2,2);
  190. INSERT INTO cena_za_bilet(cena_za_bilet, miejsce_samolotowe_id,lot_id) VALUES ('745',3,3);
  191. INSERT INTO cena_za_bilet(cena_za_bilet, miejsce_samolotowe_id,lot_id) VALUES ('235',4,4);
  192. INSERT INTO cena_za_bilet(cena_za_bilet, miejsce_samolotowe_id,lot_id) VALUES ('3462',5,5);
  193.  
  194.  
  195. CREATE TABLE kraj (
  196. kraj_id int IDENTITY(1,1) PRIMARY KEY,
  197. nazwa VARCHAR(20) NOT NULL,
  198. );
  199. GO
  200.  
  201. INSERT INTO kraj(nazwa) VALUES ('Polska');
  202. INSERT INTO kraj(nazwa) VALUES ('USA');
  203. INSERT INTO kraj(nazwa) VALUES ('Argentyna');
  204. INSERT INTO kraj(nazwa) VALUES ('Niemcy');
  205. INSERT INTO kraj(nazwa) VALUES ('UK');
  206.  
  207.  
  208. CREATE TABLE pasazer (
  209. id_pasazer int IDENTITY(1,1) PRIMARY KEY,
  210. imie VARCHAR(20) NOT NULL CHECK(LEN(imie)>2),
  211. drugie_imie VARCHAR(20) NOT NULL,
  212. nazwisko VARCHAR(30) NOT NULL CHECK(LEN(nazwisko)>2),
  213. numer_telefonu VARCHAR(20) NOT NULL,
  214. adres_email VARCHAR(30) NOT NULL,
  215. numer_paszportu VARCHAR(30) NOT NULL UNIQUE,
  216. data_urodzenia DATETIME,
  217. czy_wydał_w_liniach MONEY,
  218. kraj_id INTEGER NOT NULL REFERENCES kraj(kraj_id) ON UPDATE CASCADE,
  219. );
  220. GO
  221.  
  222. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Marcel','Michal','Dajnowicz','12345678','dajnowiczmarcel@wp.pl','12312','1998-12-03',2000,1);
  223. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Julia','Blanka','Zubka','71727364','powazny@.pl','41245','1997-05-09',19534,2);
  224. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Magda','Aga','Czekalska','3252345','buziaczek@.wp.pl','512512','1996-05-17',0,2);
  225. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Jakub','Paweł','Nowak','25323523','hejka@wp.pl','125125','1995-02-03',0,4);
  226. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Jakub','Mateusz','Rachwał','745457','lekarz@.pl','421245','1994-04-03',4324,5);
  227.  
  228.  
  229. CREATE TABLE rezerwacja (
  230. id_rezerwacja int IDENTITY(1,1) PRIMARY KEY,
  231. cena_za_bilet_id INTEGER NOT NULL REFERENCES cena_za_bilet(id_cena_za_bilet) ON UPDATE CASCADE,
  232. pasazer_id INTEGER NOT NULL REFERENCES pasazer(id_pasazer) ON UPDATE CASCADE,
  233. uwagi VARCHAR(30) NULL,
  234. );
  235. GO
  236.  
  237. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (1,1,'meh');
  238. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (2,1,'sad');
  239. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (3,1,'wooooow');
  240. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (3,1,'nice');
  241. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (4,2,'zly system');
  242. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (5,2,'jest oki');
  243. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (2,2,'swietna sprawa');
  244. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (3,3,'genialny system');
  245. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (4,4,'SUPER BAZA DANYCH');
  246. INSERT INTO rezerwacja(cena_za_bilet_id,pasazer_id,uwagi) VALUES (5,5,'ok');
  247.  
  248. CREATE TABLE kierunek (
  249. id_kierunek int IDENTITY(1,1) PRIMARY KEY,
  250. kierunek_swiata VARCHAR(20) NOT NULL,
  251. );
  252. GO
  253.  
  254. INSERT INTO kierunek(kierunek_swiata) VALUES ('polnoc');
  255. INSERT INTO kierunek(kierunek_swiata) VALUES ('poludnie');
  256. INSERT INTO kierunek(kierunek_swiata) VALUES ('wschod');
  257. INSERT INTO kierunek(kierunek_swiata) VALUES ('polnocny-zachod');
  258. INSERT INTO kierunek(kierunek_swiata) VALUES ('zachod');
  259.  
  260.  
  261. CREATE TABLE lotnisko (
  262. id_lotnisko int IDENTITY(1,1) PRIMARY KEY,
  263. nazwa_lotniska VARCHAR(20) NOT NULL,
  264. miasto VARCHAR(20) NOT NULL,
  265. ulica VARCHAR(30) NOT NULL,
  266. numer_ulicy VARCHAR(10) NOT NULL,
  267. kod_pocztowy VARCHAR(10) NOT NULL,
  268. kraj_id INTEGER NOT NULL REFERENCES kraj(kraj_id) ON UPDATE CASCADE,
  269. kierunek_id INTEGER NOT NULL REFERENCES kierunek(id_kierunek) ON UPDATE CASCADE,
  270. );
  271. GO
  272.  
  273. INSERT INTO lotnisko(nazwa_lotniska,miasto,ulica, numer_ulicy, kod_pocztowy, kraj_id, kierunek_id) VALUES ('Lech Walesa','Gdansk','legionow','201','12-344',1,4);
  274. INSERT INTO lotnisko(nazwa_lotniska,miasto,ulica, numer_ulicy, kod_pocztowy, kraj_id, kierunek_id) VALUES ('Marcel Airport','Marcelolandia','Marcela','1','57-784',1,4);
  275. INSERT INTO lotnisko(nazwa_lotniska,miasto,ulica, numer_ulicy, kod_pocztowy, kraj_id, kierunek_id) VALUES ('Okecie','Warszawa','legionow','201','12-344',1,1);
  276. INSERT INTO lotnisko(nazwa_lotniska,miasto,ulica, numer_ulicy, kod_pocztowy, kraj_id, kierunek_id) VALUES ('Luton','London','legionow','201','12-344',5,3);
  277. INSERT INTO lotnisko(nazwa_lotniska,miasto,ulica, numer_ulicy, kod_pocztowy, kraj_id, kierunek_id) VALUES ('Dutch','Amsterdam','legionow','201','12-344',4,2);
  278.  
  279.  
  280. CREATE TABLE plan_lotu (
  281. id_plan_lotu int IDENTITY(1,1) PRIMARY KEY,
  282. czas_wylotu DATE NOT NULL,
  283. czas_przylotu DATE NOT NULL,
  284. kierunek_id INTEGER NOT NULL REFERENCES kierunek(id_kierunek) ON UPDATE CASCADE,
  285. lot_id INTEGER NOT NULL REFERENCES lot(id_lot) ON UPDATE CASCADE,
  286. );
  287. GO
  288.  
  289. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2018-12-03','2018-12-03',3,5);
  290. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2014-01-12','2014-01-12',1,3);
  291. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2017-10-25','2017-10-25',1,3);
  292. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2016-11-13','2016-11-14',2,3);
  293. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2012-02-03','2012-02-04',2,3);
  294. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2018-05-06','2018-05-07',1,3);
  295. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2018-05-01','2018-05-02',2,3);
  296. INSERT INTO plan_lotu(czas_wylotu, czas_przylotu,kierunek_id,lot_id) VALUES ('2018-05-28','2018-05-29',2,3);
  297.  
  298.  
  299.  
  300. --1a) Tworzy widok o nazwie "pasazer_informacje", który wyświetla o każdym pasażerze takie informacje jak:
  301. --id_pracownik, imie, nazwisko, kolumna wyliczeniowa "ilosc_lat",
  302. --kolumna wyliczeniowa "ilosc_rez", czyli całkowita ilość rezerwacji samolotwych, kolumna wyliczeniowa
  303. --"czy_wydał_w_liniach" z wartościami TAK/NIE/BRAK (TAK gdy pasażer wydał coś na pokładzie, NIE gdy nigdy nic nie kupuil, BRAK w pozostałych przypadkach).
  304. --(UŻYCIE CASE)
  305. CREATE VIEW pasazer_informacje AS
  306. SELECT p.id_pasazer,p.imie,p.nazwisko, DATEDIFF(YY,p.data_urodzenia,GETDATE()) AS "ilosc_lat", COUNT(r.pasazer_id) AS "ilosc_rez",
  307. CASE WHEN p.czy_wydał_w_liniach>0 THEN 'TAK' WHEN p.czy_wydał_w_liniach=0 THEN 'NIE' else 'BRAK' END AS czy_kupowal FROM pasazer p LEFT JOIN rezerwacja r ON p.id_pasazer=r.pasazer_id
  308. GROUP BY p.id_pasazer,p.imie,p.nazwisko,p.data_urodzenia,p.czy_wydał_w_liniach;
  309. GO
  310.  
  311. --1b) Sprawdzenie, że widok działa dla osób, które kupiły więcej bieletów niż srednia kupionych oraz którzy są pełnoletni i coś kiedyś kupili na pokładzie
  312. SELECT * FROM pasazer_informacje GROUP BY id_pasazer,imie, nazwisko, ilosc_rez, ilosc_lat,czy_kupowal HAVING ilosc_rez>(SELECT AVG(ilosc_rez) FROM pasazer_informacje WHERE ilosc_lat > 18 AND czy_kupowal = 'TAK') ;
  313. Go
  314.  
  315. --2a) Tworzymy funkcję 1 o nazwie producent_ile_samolotów, która będzie zwracać ilośc samolotów które wyprodukował dany producent.
  316. --(UŻYCIE IF-ELSE)
  317. CREATE FUNCTION dbo.producent_ile_samolotów (
  318. @id_producent_samolotu INT
  319. ) RETURNS INT
  320. BEGIN
  321. IF (SELECT COUNT(*) FROM samolot WHERE producent_samolotu_id=@id_producent_samolotu) =0
  322. RETURN 0
  323. ELSE
  324. RETURN (SELECT COUNT(*) FROM samolot
  325. WHERE producent_samolotu_id=@id_producent_samolotu)
  326. RETURN 0
  327. END;
  328. GO
  329.  
  330. --2b) Sprawdzenie, że funkcja 1 działa poprzez przykład producenta "Ferrari".
  331. SELECT dbo.producent_ile_samolotów(1) AS ile_samolotów;
  332.  
  333. --3a) Tworzymy funkcję 2 o nazwie ile_samolotów posiadającą dwa parametry czas_wylot i czas_przylotu. Funkcja powinna
  334. --zwrócić ilość lotów samolotowych w zadanym przedziale czasowym.
  335. CREATE FUNCTION dbo.ile_samolotów (
  336. @czas_wylotu DATE, @czas_przylotu DATE
  337. ) RETURNS INT
  338. BEGIN RETURN (SELECT COUNT(*) FROM plan_lotu
  339. WHERE czas_przylotu<=@czas_przylotu AND czas_wylotu >=@czas_wylotu )
  340. END;
  341. GO
  342.  
  343. --3b) Sprawdzenie, że funkcja 2 działa poprzez sprawdzenie ile samalotów latało w Maju.
  344. SELECT dbo.ile_samolotów('2018-05-01', '2018-05-29') AS ile_samolotów_w_maju;
  345. GO
  346.  
  347. SELECT * FROM pasazer
  348.  
  349. --4a) Tworzymy procedurę 1, która obniża cene dla pasażera który najczęsciej podróżuje.
  350. CREATE PROC obniżka_opłat_dla_najczesciej_podrozujacych
  351. @obnizka MONEY
  352. AS BEGIN
  353. DECLARE @id_najczestszego_pasazera INT
  354. SET @id_najczestszego_pasazera=(SELECT TOP 1 p.id_pasazer FROM pasazer p JOIN rezerwacja r ON p.id_pasazer=r.pasazer_id GROUP BY p.id_pasazer
  355. ORDER BY COUNT(p.id_pasazer ) DESC)
  356. UPDATE pasazer SET czy_wydał_w_liniach=czy_wydał_w_liniach-@obnizka WHERE id_pasazer=@id_najczestszego_pasazera;
  357. END
  358.  
  359. --4b) Sprawdzenie, że procedura 1 działa
  360. EXEC obniżka_opłat_dla_najczesciej_podrozujacych 500;
  361. GO
  362.  
  363. --5a) Tworzymy procedurę 2, która tóra z bieżącej bazy danych usunie wszystkie klucze obce.
  364. --(UŻYCIE IF EXISTS)
  365. CREATE PROCEDURE usun_klucze_obce AS
  366. BEGIN
  367. WHILE(EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY'))
  368. BEGIN
  369. DECLARE @sql NVARCHAR(2000)
  370. SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME
  371. + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
  372. FROM information_schema.table_constraints
  373. WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
  374. EXEC (@sql)
  375. END
  376. END
  377.  
  378. --5b) Sprawdzenie, że procedura 2 działa
  379. EXEC usun_klucze_obce
  380.  
  381. SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
  382. GO
  383.  
  384. --6a) Tworzymy wyzwalacz 1 który po dodaniu kolejnego zakupu pasazera zmniejszy jego dług o 10% wraz z zakupionym ostatnio produktem(Milionowy Klient).
  385. --(UŻYCIE WHILE)
  386. CREATE TRIGGER obnizka ON pasazer
  387. FOR UPDATE AS
  388. BEGIN
  389. DECLARE kursor_pasazer_update CURSOR
  390. FOR SELECT czy_wydał_w_liniach, id_pasazer FROM DELETED;
  391. OPEN kursor_pasazer_update
  392. DECLARE @czy_wydał_w_liniach MONEY, @id_pasazer INT
  393. FETCH NEXT FROM kursor_pasazer_update INTO @czy_wydał_w_liniach, @id_pasazer
  394. WHILE @@FETCH_STATUS = 0
  395. BEGIN
  396. UPDATE pasazer SET czy_wydał_w_liniach=czy_wydał_w_liniach*0.90 WHERE id_pasazer=@id_pasazer
  397. FETCH NEXT FROM kursor_pasazer_update INTO @czy_wydał_w_liniach, @id_pasazer
  398. END
  399. CLOSE kursor_pasazer_update
  400. DEALLOCATE kursor_pasazer_update
  401. END
  402. GO
  403.  
  404. --6b) Sprawdzenie, że wyzwalacz 1 działa
  405. UPDATE pasazer SET czy_wydał_w_liniach=10000 WHERE id_pasazer IN(1);
  406.  
  407. --7a) Tworzymy wyzwalacz 2, który zablokuje nam dodanie nowego pasażera z długiem.
  408. CREATE TRIGGER pasazer_ins ON pasazer
  409. AFTER INSERT AS
  410. BEGIN
  411. DECLARE @czy_wydał_w_liniach MONEY
  412. SET @czy_wydał_w_liniach=-1
  413. SELECT @czy_wydał_w_liniach=czy_wydał_w_liniach FROM INSERTED WHERE czy_wydał_w_liniach>0
  414. IF @czy_wydał_w_liniach>0
  415. BEGIN
  416. RAISERROR('nowy pasazer nie moze miec dlugu', 1, 2);
  417. ROLLBACK
  418. END
  419. END
  420. GO
  421.  
  422. --7b) Sprawdzenie, że wyzwalacz 2 działa
  423. INSERT INTO pasazer(imie,drugie_imie,nazwisko, numer_telefonu, adres_email, numer_paszportu, data_urodzenia, czy_wydał_w_liniach, kraj_id) VALUES ('Dagmara','Iwona','Kowalska','129371','dagmara@wp.pl','1241244','1963-12-03',124,1);
  424.  
  425. --8a) Tworzymy wzywalacz 3, który przy usuwaniu producenta samolotu daje nam informacje o jego załozycielu i nazwie.
  426. --(UZYCIE KURSORA)
  427. CREATE TRIGGER usun_producenta_samolotu ON producent_samolotu
  428. AFTER DELETE
  429. AS
  430. BEGIN
  431. DECLARE kursor__producent_samolot_delete CURSOR
  432. FOR SELECT nazwa_producenta, ceo FROM DELETED;
  433. DECLARE @nazwa_producenta VARCHAR(10), @ceo VARCHAR(20)
  434.  
  435. OPEN kursor__producent_samolot_delete
  436. FETCH NEXT FROM kursor__producent_samolot_delete INTO @nazwa_producenta, @ceo
  437. WHILE @@FETCH_STATUS = 0
  438. BEGIN
  439. PRINT 'Usunieto ' + @nazwa_producenta+ ' zalozonego przez ' + @ceo
  440. FETCH NEXT FROM kursor__producent_samolot_delete INTO @nazwa_producenta, @ceo
  441. END
  442. CLOSE kursor__producent_samolot_delete
  443. DEALLOCATE kursor__producent_samolot_delete
  444. END
  445.  
  446. --8b) Sprawdzenie, że wyzwalacz 3 działa
  447. DELETE FROM producent_samolotu WHERE id_producent_samolotu IN(6, 7);
  448. GO
  449.  
  450. SELECT * FROM producent_samolotu;
  451.  
  452. --9a) Tworzymy wyzwalacz 4, który nie pozwala nam dodawac zmieniac i usuwac informacji o typach samolotów.
  453. CREATE TRIGGER typ_samolotu_blokada ON typ_samolotu
  454. INSTEAD OF INSERT, UPDATE, DELETE
  455. AS
  456. PRINT('NIE MOZNA ZMIENIAC TYPU SAMOLOTU')
  457. GO
  458.  
  459. --9b) Sprawdzenie, że wyzwalacz 4 działa
  460. DELETE FROM typ_samolotu WHERE id_typ_samolotu IN(1,2)
  461.  
  462. --10) Tworzę tabelę przestawną, która przedstawia sume wpłat dla trzech ostatnich lat na trzy stanowiska.
  463. SELECT nazwa_terminala, [2018] as ROK2018, [2017] AS ROK2017, [2016] AS ROK2016
  464. FROM
  465. (
  466. SELECT nazwa_terminala, YEAR(data) as wplata, kwota
  467. FROM oplata
  468. ) tabela
  469. PIVOT
  470. (
  471. SUM(kwota)
  472. FOR wplata IN ([2018],[2017],[2016])
  473. ) AS p
  474. ORDER BY nazwa_terminala
  475.  
  476. --KONIEC
  477.  
  478. --DROPS
  479.  
  480. drop view pasazer_informacje;
  481. drop function dbo.producent_ile_samolotów;
  482. drop function dbo.ile_samolotów
  483. drop proc obniżka_opłat_dla_najczesciej_podrozujacych
  484. drop proc usun_klucze_obce
  485. drop trigger obnizka
  486. drop trigger double_lotnisko
  487. drop trigger usun_producenta_samolotu
  488. drop trigger usun_producenta_samolotu
  489. drop trigger typ_samolotu_blokada
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement