Advertisement
limun11

klijenti tran. vježbanje

Jun 19th, 2017
683
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 8.81 KB | None | 0 0
  1. /*1. Kroz SQL kod, napraviti bazu podataka koja nosi ime vašeg broja dosijea. U postupku kreiranja u obzir uzeti samo DEFAULT postavke.
  2. Unutar svoje baze podataka kreirati tabele sa sljedećom strukturom:
  3. a) Klijenti
  4. i. KlijentID, automatski generator vrijednosti i primarni ključ
  5. ii. Ime, polje za unos 30 UNICODE karaktera (obavezan unos)
  6. iii. Prezime, polje za unos 30 UNICODE karaktera (obavezan unos)
  7. iv. Telefon, polje za unos 20 UNICODE karaktera (obavezan unos)
  8. v. Mail, polje za unos 50 UNICODE karaktera (obavezan unos), jedinstvena vrijednost
  9. vi. BrojRacuna, polje za unos 15 UNICODE karaktera (obavezan unos)
  10. vii. KorisnickoIme, polje za unos 20 UNICODE karaktera (obavezan unos)
  11. viii. Lozinka, polje za unos 20 UNICODE karaktera (obavezan unos)*/
  12. CREATE DATABASE imeNeko
  13.  
  14. USE imeNeko
  15. GO
  16. CREATE TABLE Klijenti
  17. (
  18. KlijentID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  19. Ime nvarchar (30) NOT NULL,
  20. Prezime nvarchar (30) NOT NULL,
  21. Telefon nvarchar(20) NOT NULL,
  22. Mail nvarchar(50) UNIQUE NOT NULL,
  23. BrojRacuna nvarchar(15) NOT NULL,
  24. KorisnickoIme nvarchar(20) NOT NULL,
  25. Lozinka nvarchar(20) NOT NULL
  26. )
  27. /*b) Transakcije
  28. i. TransakcijaID, automatski generator vrijednosti i primarni ključ
  29. ii. Datum, polje za unos datuma i vremena (obavezan unos)
  30. iii. TipTransakcije, polje za unos 30 UNICODE karaktera (obavezan unos)
  31. iv. PosiljalacID, referenca na tabelu Klijenti (obavezan unos)
  32. v. PrimalacID, referenca na tabelu Klijenti (obavezan unos)
  33. vi. Svrha, polje za unos 50 UNICODE karaktera (obavezan unos)
  34. vii. Iznos, polje za unos decimalnog broja (obavezan unos)*/
  35. CREATE TABLE Transakcije
  36. (
  37. TransakcijaID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  38. Datum datetime NOT NULL,
  39. TipTransakcije nvarchar(30) NOT NULL,
  40. PosiljalacID int FOREIGN KEY REFERENCES Klijenti(KlijentID) NOT NULL,
  41. PrimalacID int FOREIGN KEY REFERENCES Klijenti(KlijentID) NOT NULL,
  42. Svrha nvarchar (50) NOT NULL,
  43. Iznos decimal NOT NULL
  44. )
  45.  
  46. /*2. Popunjavanje tabela podacima:
  47. a) Koristeći bazu podataka AdventureWorks2014, preko INSERT i SELECT komande importovati 10 kupaca u tabelu Klijenti.
  48. Ime, prezime, telefon, mail i broj računa (AccountNumber) preuzeti od kupca,
  49. korisničko ime generisati na osnovu imena i prezimena u formatu ime.prezime,
  50. a lozinku generisati na osnovu polja PasswordHash, i to uzeti samo zadnjih 8 karaktera.*/
  51. INSERT INTO Klijenti (Ime, Prezime, Mail, Telefon, BrojRacuna, KorisnickoIme, Lozinka)
  52. SELECT TOP 10
  53.             pp.FirstName AS Ime,
  54.             pp.LastName AS Prezime,
  55.             pea.EmailAddress AS Email,
  56.             pphone.PhoneNumber AS Telefon,
  57.             sc.AccountNumber AS [Broj racuna],
  58.             pp.FirstName+'.'+pp.LastName AS [Korinsicko ime],
  59.             RIGHT(ppass.PasswordHash,8) AS Lozinka
  60. FROM AdventureWorks2014.Person.Person AS pp
  61. INNER JOIN AdventureWorks2014.Person.PersonPhone AS pphone ON pp.BusinessEntityID=pphone.BusinessEntityID
  62. INNER JOIN AdventureWorks2014.Person.EmailAddress AS pea ON pp.BusinessEntityID=pea.BusinessEntityID
  63. INNER JOIN AdventureWorks2014.Sales.Customer AS sc ON pp.BusinessEntityID=sc.PersonID
  64. INNER JOIN AdventureWorks2014.Person.Password AS ppass ON pp.BusinessEntityID=ppass.BusinessEntityID
  65. SELECT * FROM Klijenti
  66. --b) Putem jedne INSERT komande u tabelu Transakcije dodati minimalno 10 transakcija.
  67. INSERT INTO Transakcije (Datum, TipTransakcije, PosiljalacID, PrimalacID, Svrha, Iznos)
  68. VALUES
  69. ('2006-01-01 11:11:11', 'Slanje novca', '2', '11', 'Uplata', '100'),
  70. ('2007-02-02 12:12:12', 'Primanje novca', '3', '10', 'Isplata', '200'),
  71. ('2008-03-06 13:13:13', 'Slanje novca', '4', '9', 'Uplata', '300'),
  72. ('2009-04-04 14:14:14', 'Primanje novca', '5','8', 'Isplata' , '400'),
  73. ('2010-05-05 15:15:15', 'Slanje novca' , '6','7', 'Uplata', '500'),
  74. ('2011-06-06 16:16:16', 'Primanje novca', '7', '6', 'Isplata', '600'),
  75. ('2012-07-07 17:17:17', 'Slanje novca', '8', '5', 'Uplata', '700'),
  76. ('2013-08-08 18:18:18', 'Primanje novca ', '9', '4', 'Isplata', '800'),
  77. ('2014-09-09 19:19:19', 'Slanje novca' ,'10','3', 'Uplata', '900'),
  78. ('2015-10-10 20:20:20', 'Primanje novca', '11', '2' , 'Isplata', '1000')
  79. SELECT * FROM Transakcije
  80.  
  81. /*3. Kreiranje indeksa u bazi podataka nada tabelama:
  82. a) Non-clustered indeks nad tabelom Klijenti. Potrebno je indeksirati Ime i Prezime. Također, potrebno je uključiti kolonu BrojRacuna.
  83. b) Napisati proizvoljni upit nad tabelom Klijenti koji u potpunosti iskorištava indeks iz prethodnog koraka.
  84. Upit obavezno mora imati filter.
  85. c) Uraditi disable indeksa iz koraka a)*/
  86. --a
  87. CREATE NONCLUSTERED INDEX index_Klijent
  88. ON Klijenti (Ime, Prezime)
  89. INCLUDE (BrojRacuna)
  90. --b
  91. SELECT Ime, Prezime, BrojRacuna
  92. FROM Klijenti
  93. --c
  94. ALTER INDEX index_Klijent
  95. ON Klijenti
  96. DISABLE;
  97.  
  98. /*4. Kreirati uskladištenu proceduru koja će vršiti upis novih klijenata. Kao parametre proslijediti sva polja.
  99. Provjeriti ispravnost kreirane procedure.*/
  100. GO
  101. CREATE PROCEDURE usp_upisKlijenata
  102. (
  103.     @ime nvarchar(30),
  104.     @prezime nvarchar (30),
  105.     @telefon nvarchar (20),
  106.     @mail nvarchar(50),
  107.     @brojRacuna nvarchar (30),
  108.     @korisnickoIme nvarchar(25),
  109.     @lozinka nvarchar(15)
  110. )
  111. AS
  112.     BEGIN
  113.         INSERT INTO Klijenti (Ime, Prezime, Telefon, Mail, BrojRacuna, KorisnickoIme, Lozinka)
  114.         VALUES (@ime, @prezime, @telefon, @mail, @brojRacuna, @korisnickoIme, @lozinka)
  115.     END;
  116. EXEC usp_upisKlijenata 'Sara', 'Saric', '123456', 'sara@gmail.com', '1234wer', 'sara12','5554ll'
  117. SELECT * FROM Klijenti
  118.  
  119. /*5. Kreirati view sa sljedećom definicijom. Objekat treba da prikazuje datum transakcije, tip transakcije,
  120. ime i prezime pošiljaoca (spojeno), broj računa pošiljaoca, ime i prezime primaoca (spojeno), broj računa primaoca,
  121. svrhu i iznos transakcije.*/
  122. GO
  123. CREATE VIEW view_prikaz
  124. AS
  125.     SELECT  kposiljalac.Ime+' '+kposiljalac.Prezime AS [Ime i prezime posiljaoca],
  126.             kposiljalac.BrojRacuna AS [Broj racuna posiljaoca],
  127.             kprimaoc.Ime+' '+kprimaoc.Prezime AS [Ime i prezime primaoca],
  128.             kprimaoc.BrojRacuna AS [Broj racuna primaoca],
  129.             t.Datum AS [Datum transakcije],
  130.             t.TipTransakcije AS [Tip transakcije],
  131.             t.Svrha AS [Svrha transakcije],
  132.             t.Iznos AS [iznos transakcije]
  133.     FROM Transakcije AS t
  134.     INNER JOIN Klijenti AS kprimaoc ON t.PrimalacID=kprimaoc.KlijentID
  135.     INNER JOIN Klijenti AS kposiljalac ON t.PosiljalacID=kposiljalac.KlijentID
  136. SELECT * FROM view_prikaz
  137.  
  138. /*Kreirati uskladištenu proceduru koja će na osnovu unesenog broja računa pošiljaoca prikazivati
  139. sve transakcije koje su provedene sa računa klijenta. U proceduri koristiti prethodno kreirani view.
  140. Provjeriti ispravnost kreirane procedure.*/
  141. GO
  142. ALTER PROCEDURE usp_prikazView
  143. (
  144.     @brojracunaPosiljaoca nvarchar(25)
  145. )
  146. AS
  147.     BEGIN
  148.         SELECT view_prikaz.[Datum transakcije], view_prikaz.[Tip transakcije], view_prikaz.[Svrha transakcije],
  149.                 view_prikaz.[Ime i prezime posiljaoca], view_prikaz.[Broj racuna primaoca], view_prikaz.[Svrha transakcije],
  150.                 view_prikaz.[iznos transakcije]
  151.         FROM view_prikaz
  152.         WHERE view_prikaz.[Broj racuna posiljaoca] LIKE @brojracunaPosiljaoca
  153.     END;
  154. SELECT * FROM Klijenti
  155. EXEC usp_prikazView 'AW00011000'
  156.  
  157. /*7. Kreirati upit koji prikazuje sumaran iznos svih transakcija po godinama, sortirano po godinama.
  158. U rezultatu upita prikazati samo dvije kolone: kalendarska godina i ukupan iznos transakcija u godini.*/
  159. SELECT SUM(t.Iznos) AS [Suma svih iznosa], YEAR(t.Datum) AS Godina
  160. FROM Transakcije AS t
  161. GROUP BY t.Datum
  162. ORDER BY 2 DESC
  163.  
  164. /*8. Kreirati uskladištenu proceduru koje će vršiti brisanje klijenta uključujući sve njegove transakcije,
  165. bilo da je za transakciju vezan kao pošiljalac ili kao primalac. Provjeriti ispravnost kreirane procedure.*/
  166. GO
  167. CREATE PROCEDURE usp_deleteKlijenta
  168. (
  169.     @posiljalacID nvarchar(30),
  170.     @primalacID nvarchar(30),
  171.     @transakcije nvarchar (30)
  172. )
  173. AS
  174.     BEGIN
  175.         DELETE FROM Transakcije
  176.         WHERE PosiljalacID=@posiljalacID
  177.  
  178.         DELETE FROM Transakcije
  179.         WHERE PrimalacID=@primalacID
  180.  
  181.         DELETE FROM Transakcije
  182.         WHERE TransakcijaID=@transakcije
  183.  
  184.     END;
  185. EXEC usp_deleteKlijenta '2', '1', '2'
  186. SELECT * FROM Transakcije
  187.  
  188. /*9. Kreirati uskladištenu proceduru koja će na osnovu unesenog broja računa ili prezimena pošiljaoca vršiti pretragu nad
  189. prethodno kreiranim view-om (zadatak 5). Testirati ispravnost procedure u sljedećim situacijama:
  190. a) Nije postavljena vrijednost niti jednom parametru (vraća sve zapise)
  191. b) Postavljena je vrijednost parametra broj računa,
  192. c) Postavljena je vrijednost parametra prezime,
  193. d) Postavljene su vrijednosti oba parametra.*/
  194. GO
  195. ALTER PROCEDURE usp_viewPretraga
  196. (
  197.     @brojRacuna nvarchar (30) ='',
  198.     @prezimePosailjaoca nvarchar (30) =''
  199. )
  200. AS
  201.     BEGIN
  202.         SELECT*
  203.         FROM view_prikaz
  204.         WHERE view_prikaz.[Broj racuna posiljaoca] LIKE @brojRacuna +'%'
  205.          OR view_prikaz.[Ime i prezime posiljaoca] LIKE @prezimePosailjaoca +'%'
  206.     END;
  207. --a
  208. SELECT * FROM view_prikaz
  209. EXECUTE usp_viewPretraga
  210. EXECUTE usp_viewPretraga 'AW00011076'
  211. EXECUTE usp_viewPretraga @prezimePosailjaoca='Blake Anderson'
  212. EXECUTE usp_viewPretraga 'AW00011076', 'Blake Anderson'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement