Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 8.46 KB | None | 0 0
  1. -- Zadanie 3 --
  2. -- Dane zaczerpnięte z pliku biblioteka.sql z przykładów podstaw T-SQL:
  3. DROP TABLE IF EXISTS Wypozyczenie;
  4. GO
  5.  
  6. DROP TABLE IF EXISTS Egzemplarz;
  7. GO
  8.  
  9. DROP TABLE IF EXISTS Czytelnik;
  10. GO
  11.  
  12. DROP TABLE IF EXISTS Ksiazka;
  13. GO
  14.  
  15. CREATE TABLE Ksiazka(
  16.     Ksiazka_ID INT IDENTITY,
  17.     ISBN VARCHAR(20),
  18.     Tytul VARCHAR(300),
  19.     Autor VARCHAR(200),
  20.     Rok_Wydania INT,
  21.     Cena DECIMAL(10,2),
  22.     Wypozyczona_Ostatni_Miesiac BIT,
  23.     CONSTRAINT Ksiazka_PK PRIMARY KEY (Ksiazka_ID),
  24.     CONSTRAINT Ksiazka_UK_ISBN UNIQUE (ISBN))
  25. GO
  26.  
  27. CREATE TABLE Egzemplarz(
  28.     Egzemplarz_ID INT IDENTITY,
  29.     Sygnatura CHAR(8),
  30.     Ksiazka_ID INT,
  31.     CONSTRAINT Egzemplarz_PK PRIMARY KEY (Egzemplarz_ID),
  32.     CONSTRAINT Egzemplarz_UK_Sygnatura UNIQUE (Sygnatura),
  33.     CONSTRAINT Egzemplarz_FK FOREIGN KEY (Ksiazka_ID) REFERENCES Ksiazka (Ksiazka_ID) ON DELETE CASCADE);
  34. GO
  35.  
  36. CREATE TABLE Czytelnik(  
  37.     Czytelnik_ID INT IDENTITY,
  38.     PESEL CHAR(11),
  39.     Nazwisko VARCHAR(30),
  40.     Miasto VARCHAR(30),
  41.     Data_Urodzenia DATE,
  42.     Ostatnie_Wypozyczenie DATE,
  43.     CONSTRAINT Czytelnik_PK PRIMARY KEY (Czytelnik_ID),
  44.     CONSTRAINT Czytelnik_UK_PESEL UNIQUE (PESEL))
  45. GO
  46.  
  47. CREATE TABLE Wypozyczenie(  
  48.     Wypozyczenie_ID INT IDENTITY,
  49.     Czytelnik_ID INT,
  50.     Egzemplarz_ID INT,
  51.     Data DATE,
  52.     Liczba_Dni INT,
  53.     CONSTRAINT Wypozyczenie_PK PRIMARY KEY (Wypozyczenie_ID),
  54.     CONSTRAINT Wypozyczenie_FK_Czytelnik FOREIGN KEY (Czytelnik_ID) REFERENCES Czytelnik (Czytelnik_ID) ON DELETE CASCADE,
  55.     CONSTRAINT Wypozyczenie_FK_Egzemplarz FOREIGN KEY (Egzemplarz_ID) REFERENCES Egzemplarz (Egzemplarz_ID) ON DELETE CASCADE)
  56. GO
  57.  
  58. SET IDENTITY_INSERT Ksiazka ON
  59. INSERT INTO Ksiazka (Ksiazka_ID,ISBN,Tytul,Autor,Rok_Wydania,Cena) VALUES
  60. (1, '83-246-0279-8',     'Microsoft Access. Podrecznik administratora',                     'Helen Feddema',         2006, 69),
  61. (2, '83-246-0653-X',     'SQL Server 2005. Programowanie. Od podstaw',                      'Robert Vieira',         2007, 97),
  62. (3, '978-83-246-0549-1', 'SQL Server 2005. Wycisnij wszystko',                              'Eric L. Brown',         2007, 57),
  63. (4, '978-83-246-1258-1', 'PHP, MySQL i MVC. Tworzenie witryn WWW opartych na bazie danych', 'Wlodzimierz Gajda',     2010, 79),
  64. (5, '978-83-246-2060-9', 'Access 2007 PL. Seria praktyk',                                   'Andrew Unsworth',       2009, 39),
  65. (6, '978-83-246-2188-0', 'Czysty kod. Podrecznik dobrego programisty',                      'Robert C. Martin',      2010, 67);
  66. SET IDENTITY_INSERT Ksiazka OFF
  67. GO
  68.  
  69. SET IDENTITY_INSERT Egzemplarz ON
  70. INSERT INTO Egzemplarz (Egzemplarz_ID,Ksiazka_ID,Sygnatura) VALUES
  71. (1,  5, 'S0001'),
  72. (2,  5, 'S0002'),
  73. (3,  1, 'S0003'),
  74. (4,  1, 'S0004'),
  75. (5,  1, 'S0005'),
  76. (6,  2, 'S0006'),
  77. (7,  3, 'S0007'),
  78. (8,  3, 'S0008'),
  79. (9,  3, 'S0009'),
  80. (10, 1, 'S0010'),
  81. (11, 2, 'S0011'),
  82. (12, 3, 'S0012'),
  83. (13, 1, 'S0013'),
  84. (14, 2, 'S0014'),
  85. (15, 5, 'S0015'),
  86. (16, 6, 'S0016'),
  87. (17, 1, 'S0017'),
  88. (18, 1, 'S0018'),
  89. (19, 2, 'S0019'),
  90. (20, 3, 'S0020'),
  91. (21, 4, 'S0021'),
  92. (22, 5, 'S0022'),
  93. (23, 5, 'S0023'),
  94. (24, 4, 'S0024'),
  95. (25, 5, 'S0025'),
  96. (26, 6, 'S0026'),
  97. (27, 5, 'S0027'),
  98. (28, 5, 'S0028'),
  99. (29, 5, 'S0029'),
  100. (30, 5, 'S0030'),
  101. (31, 5, 'S0031'),
  102. (32, 1, 'S0032'),
  103. (33, 2, 'S0033'),
  104. (34, 2, 'S0034'),
  105. (35, 2, 'S0035'),
  106. (36, 2, 'S0036'),
  107. (37, 2, 'S0037'),
  108. (38, 2, 'S0038'),
  109. (39, 3, 'S0039'),
  110. (40, 1, 'S0040'),
  111. (41, 2, 'S0041'),
  112. (42, 3, 'S0042'),
  113. (43, 4, 'S0043'),
  114. (44, 5, 'S0044'),
  115. (45, 6, 'S0045'),
  116. (46, 1, 'S0046'),
  117. (47, 1, 'S0047'),
  118. (48, 2, 'S0048'),
  119. (49, 3, 'S0049'),
  120. (50, 3, 'S0050')
  121. SET IDENTITY_INSERT Egzemplarz OFF
  122. GO
  123.  
  124. SET IDENTITY_INSERT Czytelnik ON
  125. INSERT INTO Czytelnik (CZYTELNIK_ID,PESEL,NAZWISKO,MIASTO,DATA_URODZENIA) VALUES
  126. (1, '55101011111', 'Kowalski', 'Wroclaw',  '1955-10-10'),
  127. (2, '60101033333', 'Maliniak', 'Wroclaw',  '1960-10-10'),
  128. (3, '65120122222', 'Nowak',    'Warszawa', '1965-12-01'),
  129. (4, '55010111111', 'Kozak',    'Swidnica', '1955-01-01'),
  130. (5, '99020222222', 'Tester',   'Nigdzie',  '1999-02-02'),
  131. (6, '98030333333', 'Nowacki',  'Halo',     '1998-03-03')
  132. SET IDENTITY_INSERT Czytelnik OFF
  133. GO
  134.  
  135. SET IDENTITY_INSERT Wypozyczenie ON
  136. INSERT INTO Wypozyczenie (Wypozyczenie_ID,Czytelnik_ID,Egzemplarz_ID,Data,Liczba_Dni) VALUES
  137. (1, 4, 26, '2019-7-11', 57),
  138. (2, 3, 21, '2019-3-17', 87),
  139. (3, 6, 6, '2019-1-20', 74),
  140. (4, 4, 1, '2019-2-13', 9),
  141. (5, 3, 17, '2019-11-24', 83),
  142. (6, 3, 8, '2019-4-18', 84),
  143. (7, 6, 1, '2019-6-16', 46),
  144. (8, 1, 4, '2019-9-7', 10),
  145. (9, 5, 46, '2019-1-3', 29),
  146. (10, 6, 33, '2019-6-20', 73),
  147. (11, 1, 2, '2019-7-13', 75),
  148. (12, 1, 37, '2019-11-14', 19),
  149. (13, 5, 16, '2019-3-23', 45),
  150. (14, 6, 15, '2019-7-19', 64),
  151. (15, 2, 9, '2019-7-8', 86),
  152. (16, 2, 20, '2019-8-2', 84),
  153. (17, 3, 20, '2019-3-1', 84),
  154. (18, 4, 8, '2019-7-24', 66),
  155. (19, 3, 9, '2019-10-24', 55),
  156. (20, 4, 35, '2019-8-19', 3),
  157. (21, 5, 19, '2019-2-21', 74),
  158. (22, 5, 40, '2019-12-18', 40),
  159. (23, 5, 29, '2019-3-28', 46),
  160. (24, 2, 17, '2019-7-7', 70),
  161. (25, 1, 41, '2019-12-11', 50),
  162. (26, 3, 5, '2019-4-16', 55),
  163. (27, 1, 13, '2019-3-28', 79),
  164. (28, 4, 23, '2019-12-1', 39),
  165. (29, 3, 23, '2019-6-22', 67),
  166. (30, 2, 14, '2019-3-5', 18),
  167. (31, 1, 6, '2019-5-19', 94),
  168. (32, 5, 25, '2019-12-6', 23),
  169. (33, 6, 48, '2019-3-11', 2),
  170. (34, 5, 37, '2019-9-27', 19),
  171. (35, 4, 34, '2019-1-11', 6),
  172. (36, 1, 43, '2019-4-8', 2),
  173. (37, 4, 7, '2019-10-17', 88),
  174. (38, 4, 22, '2019-5-17', 96),
  175. (39, 5, 3, '2019-9-6', 68),
  176. (40, 1, 28, '2019-5-20', 21),
  177. (41, 1, 20, '2019-8-23', 81),
  178. (42, 3, 30, '2019-2-8', 54),
  179. (43, 1, 39, '2019-1-20', 15),
  180. (44, 6, 6, '2019-10-1', 80),
  181. (45, 5, 14, '2019-10-22', 86),
  182. (46, 4, 13, '2019-1-4', 79),
  183. (47, 1, 36, '2019-11-7', 83),
  184. (48, 5, 31, '2019-2-20', 95),
  185. (49, 6, 1, '2019-1-16', 19),
  186. (50, 6, 48, '2019-12-27', 85),
  187. (51, 1, 40, '2019-3-15', 87),
  188. (52, 2, 8, '2019-3-22', 92),
  189. (53, 5, 39, '2019-8-28', 25),
  190. (54, 5, 27, '2019-11-1', 63),
  191. (55, 1, 50, '2019-8-16', 99),
  192. (56, 2, 18, '2019-11-15', 70),
  193. (57, 6, 41, '2019-1-23', 14),
  194. (58, 3, 43, '2019-5-9', 71),
  195. (59, 5, 2, '2019-3-28', 21),
  196. (60, 1, 37, '2019-2-9', 28),
  197. (61, 6, 11, '2019-12-24', 98),
  198. (62, 5, 20, '2019-12-28', 37),
  199. (63, 6, 23, '2019-11-28', 27),
  200. (64, 3, 34, '2019-7-13', 43),
  201. (65, 4, 27, '2019-1-23', 65),
  202. (66, 2, 5, '2019-11-20', 82),
  203. (67, 2, 30, '2019-6-28', 29),
  204. (68, 2, 24, '2019-7-5', 5),
  205. (69, 4, 21, '2019-9-28', 45),
  206. (70, 2, 10, '2019-3-27', 84),
  207. (71, 2, 2, '2019-6-11', 91),
  208. (72, 5, 10, '2019-6-2', 87),
  209. (73, 4, 29, '2019-2-21', 27),
  210. (74, 5, 38, '2019-1-16', 96),
  211. (75, 4, 21, '2019-10-24', 58),
  212. (76, 4, 23, '2019-4-27', 85),
  213. (77, 2, 35, '2019-5-20', 64),
  214. (78, 4, 1, '2019-3-2', 88),
  215. (79, 6, 23, '2019-10-17', 22),
  216. (80, 2, 4, '2019-12-18', 27),
  217. (81, 1, 34, '2019-8-11', 57),
  218. (82, 1, 46, '2019-10-24', 99),
  219. (83, 3, 50, '2019-9-3', 35),
  220. (84, 2, 42, '2019-7-10', 58),
  221. (85, 6, 29, '2019-9-9', 15),
  222. (86, 2, 44, '2019-7-8', 18),
  223. (87, 2, 43, '2019-6-11', 77),
  224. (88, 6, 45, '2019-8-9', 29),
  225. (89, 4, 37, '2019-6-10', 32),
  226. (90, 5, 45, '2019-7-15', 5),
  227. (91, 1, 49, '2019-10-20', 17),
  228. (92, 3, 32, '2019-10-12', 30),
  229. (93, 1, 33, '2019-6-9', 59),
  230. (94, 5, 27, '2019-12-8', 30),
  231. (95, 1, 7, '2019-9-26', 31),
  232. (96, 2, 22, '2019-2-8', 64),
  233. (97, 1, 43, '2019-4-4', 88),
  234. (98, 2, 16, '2019-2-23', 21),
  235. (99, 1, 36, '2019-2-18', 32),
  236. (100, 5, 11, '2019-4-3', 34)
  237. SET IDENTITY_INSERT Wypozyczenie OFF
  238. GO
  239.  
  240. -- Testy --
  241. -- Mozna sprawdzic czasy przez Query -> Include Client Statistics (shift + alt + s)
  242. SET STATISTICS TIME ON
  243.  
  244. SELECT DISTINCT c.PESEL, c.Nazwisko FROM Egzemplarz e
  245. JOIN Ksiazka k      ON e.Ksiazka_ID = k.Ksiazka_ID
  246. JOIN Wypozyczenie w ON e.Egzemplarz_ID = w.Egzemplarz_ID
  247. JOIN Czytelnik c    ON c.Czytelnik_ID = w.Czytelnik_ID
  248. -- Tworzymy tabelkę z niepowtarzalnych peseli i nazwisk, dołączamy do tego inne tabelki na podstawie powtarzających się kluczy.
  249. -- Client processing time:      1.2
  250. -- Total execution time:        1.6
  251. -- Wait time on server replies: 0.4
  252.  
  253. SELECT c.PESEL, c.Nazwisko
  254. FROM Czytelnik c WHERE c.Czytelnik_ID IN
  255. (SELECT w.Czytelnik_ID FROM Wypozyczenie w
  256. JOIN Egzemplarz e ON e.Egzemplarz_ID = w.Egzemplarz_ID
  257. JOIN Ksiazka k    ON e.Ksiazka_ID = k.Ksiazka_ID)
  258. -- Tworzymy tabelkę z peseli i nazwisk, gdzie ID czytelnika pokrywa się z uzyskanymi w podzapytaniu ID czytelników wypożyczających książki.
  259. -- Client processing time:      0.3
  260. -- Total execution time:        1.0
  261. -- Wait time on server replies: 0.7
  262.  
  263. --inne zapytanie to by sie przydalo jeszcze zrobic
  264.  
  265.  
  266. -- Client processing time:     
  267. -- Total execution time:       
  268. -- Wait time on server replies:
  269.  
  270. SET STATISTICS TIME OFF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement