Advertisement
limun11

BPII-Integralni vježba

Jun 16th, 2017
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 9.32 KB | None | 0 0
  1. /*
  2. 1. Kroz SQL kod, napraviti bazu podataka koja nosi ime vašeg broja dosijea. U postupku kreiranja u obzir uzeti samo DEFAULT postavke.
  3. Napomena: Student može dobiti ocjenu iz više predmeta, dok iz istog predmeta ocjenu može dobiti više studenata.
  4. Student ne može dobiti više ocjena iz istog predmeta.
  5. */
  6.  
  7. CREATE DATABASE Integralni
  8.  
  9. USE Integralni
  10. GO
  11.  
  12. --a) Studenti
  13. --i. StudentID, automatski generator vrijednosti i primarni ključ
  14. --ii. BrojDosijea, polje za unos 10 UNICODE karaktera (obavezan unos), jedinstvena vrijednost
  15. --iii. Ime, polje za unos 35 UNICODE karaktera (obavezan unos)
  16. --iv. Prezime, polje za unos 35 UNICODE karaktera (obavezan unos)
  17. --v. Godina studija, polje za unos cijelog broja (obavezan unos)
  18. --vi. NacinStudiranja, polje za unos 10 UNICODE karaktera (obavezan unos) DEFAULT je Redovan
  19. --vii. Email, polje za unos 50 karaktera (nije obavezan)
  20. CREATE TABLE Studenti
  21. (
  22. StudentID int IDENTITY (1,1) PRIMARY KEY NOT NULL,
  23. BrojDosijea nvarchar (10) UNIQUE NOT NULL,
  24. Ime nvarchar (35) NOT NULL,
  25. Prezime nvarchar (35) NOT NULL,
  26. GodinaStudija int NOT NULL,
  27. NacinStudiranja nvarchar (10) NOT NULL default 'Redovan',
  28. Email nvarchar (50)
  29. )
  30. SELECT * FROM Studenti
  31.  
  32. --b) Predmeti
  33. --i. PredmetID, automatski generator vrijednosti i primarni ključ
  34. --ii. Naziv, polje za unos 100 UNICODE karaktera (obavezan unos)
  35. --iii. Oznaka, polje za unos 10 UNICODE karaktera (obavezan unos), jedinstvena vrijednost
  36. CREATE TABLE Predmet
  37. (
  38. PredmetID int IDENTITY (1,1) PRIMARY KEY NOT NULL,
  39. Naziv nvarchar (100) NOT NULL,
  40. Oznaka nvarchar (10) UNIQUE NOT NULL
  41. )
  42. SELECT * FROM Predmet
  43.  
  44. --c) Ocjene
  45. --i. Ocjena, polje za unos cijelih brojeva (obavezan unos)
  46. --ii. Bodovi, polje za unos decimalnih brojeva (obavezan unos)
  47. --iii. DatumPolaganja, polje za unos datuma (obavezan unos)
  48. CREATE TABLE Ocjene
  49. (
  50. StudentID int FOREIGN KEY REFERENCES Studenti (StudentID),
  51. PredmetID int FOREIGN KEY REFERENCES Predmet (PredmetID),
  52. Ocjena int NOT NULL,
  53. Bodovi decimal NOT NULL,
  54. DatumPolaganja date NOT NULL,
  55. PRIMARY KEY (StudentID, PredmetID)
  56. )
  57. SELECT * FROM Ocjene
  58.  
  59. --2. Popunjavanje tabela podacima:
  60. --a) Putem jedne komande INSERT u tabelu Predmeti dodati minimalno 3 predmeta
  61. INSERT INTO Predmet (Naziv, Oznaka)
  62. VALUES
  63. ('Bosanski jezik', 'BOS'),
  64. ('Matematika', 'MAT'),
  65. ('Sport', 'TZO')
  66. SELECT * FROM Predmet
  67. --b) Koristeći bazu podataka AdventureWorks2014, preko INSERT i SELECT komande
  68. --importovati 10 kupaca u tabelu Studenti i to sljedeće kolone:
  69. --i. AccountNumber -> BrojDosijea
  70. --ii. FirstName -> Ime
  71. --iii. LastName -> Prezime
  72. --iv. 2 -> GodinaStudija
  73. --v. DEFAULT -> NacinStudiranja
  74. --vi. EmailAddress -> Email
  75. INSERT INTO Studenti (BrojDosijea, Ime, Prezime, GodinaStudija, Email)
  76. SELECT TOP 10
  77.             sc.AccountNumber AS [Broj dosijea],
  78.             pp.FirstName AS Ime,
  79.             pp.LastName AS Prezime,
  80.             2 AS [Godina studija],
  81.             pea.EmailAddress AS Email
  82. FROM AdventureWorks2014.Person.Person AS pp
  83. INNER JOIN AdventureWorks2014.Sales.Customer AS sc ON pp.BusinessEntityID=sc.PersonID
  84. INNER JOIN AdventureWorks2014.Person.EmailAddress AS pea ON pp.BusinessEntityID=pea.BusinessEntityID
  85. SELECT * FROM Studenti
  86.  
  87. --3. Kreirati uskladištenu proceduru koja će vršiti upis podataka u tabelu Ocjene (sva polja).
  88. --Provjerom ispravnosti procedure unijeti minimalno 5 zapisa u tabelu Ocjene.
  89. CREATE PROCEDURE usp_upisPodatakauOcjene
  90. (
  91.     @StudentID int,
  92.     @PredmetID int,
  93.     @Ocjena int,
  94.     @Bodovi decimal,
  95.     @DatumPolaganja date
  96. )
  97. AS
  98.     BEGIN
  99.         INSERT INTO Ocjene(StudentID, PredmetID, Ocjena, Bodovi, DatumPolaganja)
  100.         VALUES (@StudentID, @PredmetID, @Ocjena, @Bodovi, @DatumPolaganja)
  101.     END
  102.  
  103. EXEC usp_upisPodatakauOcjene '1', '1', '5', '100', '2017-6-16'
  104. EXEC usp_upisPodatakauOcjene '2', '2', '4', '80', '2017-2-15'
  105. EXEC usp_upisPodatakauOcjene '3', '3', '3', '50', '2017-3-14'
  106. EXEC usp_upisPodatakauOcjene '4', '1', '2', '15', '2017-4-13'
  107. EXEC usp_upisPodatakauOcjene '5', '2', '5', '95', '2017-5-12'
  108. SELECT * FROM Ocjene
  109.  
  110. --4. Također, u svoju bazu podataka putem Import/Export alata prebaciti sljedeće tabele sa podacima:
  111. --CreditCard, PersonCreditCard i Person koje se nalaze u AdventureWorks2014 bazi podataka
  112. /*Postupak:
  113.     -> Right click na ime baze (Integralni),
  114.     -> Tasks
  115.     -> Import data... (ili export ako se npr kaze da se u excel nesto spremi ili u drugu bazu)
  116.     -> Odabere se iz padajuce liste zadnja opcija (SQL Server Native bla bla),
  117.     -> Unese se ime servera, .(tacka) ili (local) ili ako nam je data IP adresa unesemo nju
  118.         i tek nakon toga se u padajucoj listi DATABASE odabere baze iz koje uzimamo podatke (AW2014)
  119.     -> Odaberemo destinaciju, u ovom slucaju opet se radi o SQL Server native...
  120.        Defaultno bi nam trebao biti oznacen nas server i baza na koju smo kliknuli,
  121.        u ovom slucaju nista ne treba dirati.
  122.     -> Odaberemo prvu opciju, jer zelimo odabrati tabele koje zelimo prebaciti
  123.     -> "Nakliknamo" zeljene tabele
  124.     -> Next -> FINISH
  125. */
  126.  
  127. /*5. Kreiranje indeksa u bazi podataka nada tabelama koje ste importovali u zadatku broj 2:
  128. a) Non-clustered indeks nad tabelom Person. Potrebno je indeksirati Lastname i FirstName. Također, potrebno je uključiti kolonu Title.
  129. b) Napisati proizvoljni upit nad tabelom Person koji u potpunosti iskorištava indeks iz prethodnog koraka
  130. c) Uraditi disable indeksa iz koraka a)
  131. d) Clustered indeks nad tabelom CreditCard i kolonom CreditCardID
  132. e) Non-clustered indeks nad tabelom CreditCard i kolonom CardNumber. Također, potrebno je uključiti kolone ExpMonth i ExpYear.*/
  133. --a
  134. CREATE NONCLUSTERED INDEX index_Person
  135. ON Person.Person (LastName, FirstName)
  136. INCLUDE (Title)
  137. --b
  138. SELECT LastName, FirstName, Title
  139. FROM Person.Person
  140. --c
  141. ALTER INDEX index_Person
  142. ON Person.Person
  143. DISABLE;
  144. --d
  145. CREATE CLUSTERED INDEX index_CreditCard
  146. ON Sales.CreditCard (CreditCardID)
  147. --e
  148. CREATE NONCLUSTERED INDEX index_CreditCardInclude
  149. ON Sales.CreditCard(CreditCardID)
  150. INCLUDE (ExpMonth, ExpYear)
  151.  
  152. /*6. Kreirati view sa sljedećom definicijom. Objekat treba da prikazuje:
  153. Prezime, ime, broj kartice i tip kartice, ali samo onim osobama koje imaju karticu tipa Vista i nemaju titulu.*/
  154. GO
  155. ALTER VIEW view_prikaz
  156. AS
  157.     SELECT pp.FirstName AS Ime,
  158.             pp.LastName AS Prezime,
  159.             scc.CardNumber AS [Broj kartice],
  160.             scc.CardType AS [Tip kartice]
  161.     FROM Person.Person AS pp
  162.     INNER JOIN Sales.PersonCreditCard AS pcc ON pp.BusinessEntityID =pcc.BusinessEntityID
  163.     INNER JOIN Sales.CreditCard AS scc ON pcc.CreditCardID =scc.CreditCardID
  164. WHERE scc.CardType LIKE 'Vista' AND pp.Title IS NULL
  165.  
  166. SELECT * FROM view_prikaz
  167.  
  168. /*7. Napraviti full i diferencijalni backup baze podataka na default lokaciju servera:
  169. C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup*/
  170.  
  171. BACKUP DATABASE Integralni
  172. TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\Integralni.bak'
  173.  
  174. BACKUP DATABASE Integralni
  175. TO DISK ='C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup\Integralni.bak'
  176. WITH DIFFERENTIAL
  177.  
  178. /*8. Mapirati login sa SQL Server-a pod imenom „student“ u svoju bazu kao korisnika pod svojim imenom.*/
  179. CREATE LOGIN student
  180. WITH PASSWORD ='--*12345ab'
  181.  
  182. CREATE USER Sara FOR LOGIN student
  183.  
  184. /*9. Kreirati uskladištenu proceduru koja će za uneseno prezime, ime ili broj kartice vršiti pretragu nad prethodno
  185. kreiranim view-om (zadatak 4). Procedura obavezno treba da vraća rezultate bez obzira da li su vrijednosti
  186. parametara postavljene. Testirati ispravnost procedure u sljedećim situacijama:
  187. a) Nije postavljena vrijednost niti jednom parametru (vraća sve zapise)
  188. b) Postavljena je vrijednost parametra prezime, a ostala dva parametra nisu (pretraga po prezimenu)
  189. c) Postavljene su vrijednosti parametara prezime i ime, a broj kartice nije (pretraga po prezimenu i imenu)
  190. d) Postavljene su vrijednosti sva tri parametra (pretraga po svim parametrima)
  191. Također, procedura treba da pretragu prezimena i imena vrši parcijalno (počinje sa).*/
  192. GO
  193. ALTER PROCEDURE usp_pretragaViewa
  194. (
  195.     @prezime nvarchar (50) = NULL,
  196.     @ime nvarchar (50)=NULL,
  197.     @brojKartice nvarchar (25)=NULL
  198. )
  199. AS
  200.     BEGIN
  201.         SELECT *
  202.         FROM view_prikaz
  203.         WHERE(Prezime LIKE @prezime OR Prezime LIKE @prezime + '%' OR @prezime IS NULL) AND
  204.             (Ime LIKE @ime OR Ime LIKE @ime + '%' OR @ime IS NULL) AND
  205.             ([Broj kartice] LIKE @brojKartice OR @brojKartice IS NULL)  
  206.     END;
  207.  
  208. --a
  209. EXEC usp_pretragaViewa
  210. --b
  211. EXEC usp_pretragaViewa @prezime = 'Zeng'
  212. --c
  213. EXEC usp_pretragaViewa @prezime = 'Tang', @ime='Warren'
  214. --d
  215. EXEC usp_pretragaViewa 'Tang', 'Warren', '11111516664744'
  216. --*************************************************
  217. EXEC usp_pretragaViewa @prezime = 'Z%'
  218. EXEC usp_pretragaViewa @prezime = 'T$', @ime='W%'
  219. EXEC usp_pretragaViewa 'T%', 'W%', '11111516664744'
  220.  
  221. /*
  222. 10. Kreirati uskladištenu proceduru koje će za uneseni broj kartice
  223. vršiti brisanje kreditne kartice (CreditCard).
  224. Također, u istoj proceduri (u okviru jedne transakcije)
  225. prethodno obrisati sve zapise o vlasništvu kartice
  226. (PersonCreditCard). Obavezno testirati
  227. ispravnost kreirane procedure.
  228. */
  229. CREATE PROCEDURE usp_dltCeditCard
  230. (
  231.     @CardNumber nvarchar (25)
  232. )
  233. AS
  234.     BEGIN
  235.     DELETE FROM Sales.PersonCreditCard
  236.     FROM Sales.PersonCreditCard AS pcc
  237.         INNER JOIN Sales.CreditCard AS scc ON pcc.CreditCardID=scc.CreditCardID
  238.     DELETE FROM Sales.CreditCard
  239.     WHERE CardNumber LIKE @CardNumber
  240.     END;
  241.  
  242. EXEC usp_dltCeditCard '11111516664744'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement