Advertisement
eramic

ISPIT DBMS 13.06.15

Sep 13th, 2015
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 9.18 KB | None | 0 0
  1. /*Iz baze podataka AdventureWorks2014 prikazati ukupnu ostvarenu zaradu
  2. po zaposleniku na području Evrope u januaru mjesecu 2014. godine.
  3. Lista treba da sadrži ime i prezime zaposlenika (spojeno),
  4. datum zaposlenja u formatu dd.mm.yyyy, mail adresu,
  5. te ukupnu ostvarenu zaradu zaokruženu na dvije decimale.
  6. Podatke sortirati po zaradi opadajućim redoslijedom. */
  7.  
  8. USE AdventureWorks2014
  9.  
  10. SELECT [FirstName] + ' ' + [LastName], CONVERT(nvarchar,DAY(HireDate)) + '.' + CONVERT(VARCHAR,MONTH(HireDate)) + '.'
  11.             + CONVERT(VARCHAR,YEAR(HireDate)) AS datum ,[EmailAddress], round(SUM([OrderQty]*[UnitPrice]),2) AS zarada
  12. FROM HumanResources.Employee AS E JOIN Person.Person AS P ON E.BusinessEntityID = P.BusinessEntityID
  13.         JOIN Person.EmailAddress AS EA ON E.BusinessEntityID = EA.BusinessEntityID
  14.         JOIN Sales.SalesOrderHeader AS SOH ON E.BusinessEntityID = SOH.SalesPersonID
  15.         JOIN Sales.SalesOrderDetail AS SOD ON SOH.SalesOrderID = SOD.SalesOrderID
  16.         JOIN Sales.SalesTerritory AS ST ON SOH.TerritoryID = ST.TerritoryID
  17. WHERE MONTH([OrderDate]) = 01 AND YEAR([OrderDate]) = 2014 AND ST.[GROUP] = 'Europe'
  18. GROUP BY [FirstName],[LastName],[HireDate], [EmailAddress]
  19. ORDER BY zarada DESC
  20.  
  21. /*Iz baze podataka AdventureWorks2014 prikazati kreditne kartice kojima je plaćeno više od 20 narudžbi.
  22.  U listu uključiti ime i prezime vlasnika kartice, tip kartice, broj kartice, ukupan iznos plaćen karticom.*/
  23.  
  24.  SELECT [FirstName],[LastName],[CardType],[CardNumber], SUM([OrderQty]*[UnitPrice]) AS ukupno
  25.  FROM Person.Person AS P JOIN Sales.PersonCreditCard AS PCC ON P.BusinessEntityID = PCC.BusinessEntityID
  26.     JOIN Sales.CreditCard AS CC ON PCC.CreditCardID = CC.CreditCardID
  27.     JOIN Sales.SalesOrderHeader AS SOH ON CC.CreditCardID = SOH.CreditCardID
  28.     JOIN Sales.SalesOrderDetail AS SOD ON SOH.SalesOrderID = SOD.SalesOrderID
  29. GROUP BY [FirstName],[LastName],[CardType],[CardNumber]
  30. HAVING COUNT(SOH.CreditCardID)>20
  31.  
  32. /*Kreirati bazu podataka koju ćete imenovati Vašim brojem dosijea. Fajlove baze smjestiti na sljedeće lokacije:
  33.  Data fajl -> D:\DBMS\Data
  34.  Log fajl -> D:\DBMS\Log */
  35.  
  36. CREATE DATABASE [2514] ON PRIMARY
  37. (
  38. NAME = '2514',
  39. FILENAME = 'C:\DBMS\2514.mdf',
  40. SIZE = 5 MB,
  41. MAXSIZE = UNLIMITED,
  42. FILEGROWTH = 10%
  43. )
  44. LOG ON
  45. (
  46. NAME = '2514log',
  47. FILENAME = 'C:\DBMS\2514log.ldf',
  48. SIZE = 5 MB,
  49. MAXSIZE = UNLIMITED,
  50. FILEGROWTH = 10%
  51. )
  52.  
  53. USE [2514]
  54.  
  55. /*Kandidati
  56.  Ime, polje za unos 30 karaktera (obavezan unos),
  57.  Prezime, polje za unos 30 karaktera (obavezan unos),
  58.  JMBG, polje za unos 13 karaktera (obavezan unos i jedinstvena vrijednost),
  59.  DatumRodjenja, polje za unos datuma (obavezan unos),
  60.  MjestoRodjenja, polje za unos 30 karaktera,
  61.  Telefon, polje za unos 20 karaktera,
  62.  Email, polje za unos 50 karaktera (jedinstvena vrijednost).*/
  63.  
  64. CREATE TABLE Kandidati(
  65.     KandidatID INT IDENTITY(1,1) PRIMARY KEY,
  66.     Ime nvarchar(30) NOT NULL,
  67.     Prezime nvarchar(30) NOT NULL,
  68.     JMBG nvarchar(30) NOT NULL UNIQUE nonclustered,
  69.     DatumRodjenja DATE NOT NULL,
  70.     MjestoRodjenja nvarchar(30),
  71.     Telefon nvarchar(20) NULL,
  72.     Email nvarchar(50) NOT NULL UNIQUE nonclustered
  73. )
  74.  
  75. /*Testovi
  76.  Datum, polje za unos datuma i vremena (obavezan unos),
  77.  Naziv, polje za unos 50 karaktera (obavezan unos),
  78.  Oznaka, polje za unos 10 karaktera (obavezan unos i jedinstvena vrijednost),
  79.  Oblast, polje za unos 50 karaktera (obavezan unos),
  80.  MaxBrojBodova, polje za unos cijelog broja (obavezan unos),
  81.  Opis, polje za unos 250 karaktera.*/
  82.  
  83. CREATE TABLE Testovi(
  84.     TestID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
  85.     Datum DATE NOT NULL,
  86.     Oznaka nvarchar(10) NOT NULL UNIQUE nonclustered,
  87.     Oblast nvarchar(50) NOT NULL,
  88.     MaxBrojBodova INT NOT NULL,
  89.     Opis nvarchar(250)
  90. )
  91.  
  92. /*RezultatiTesta
  93.  Polozio, polje za unos ishoda testiranja – DA/NE (obavezan unos)
  94.  OsvojeniBodovi, polje za unos decimalnog broja (obavezan unos),
  95.  Napomena, polje za unos dužeg niza karaktera.*/
  96.  
  97. CREATE TABLE RezultatiTesta(
  98.     KandidatID INT FOREIGN KEY(KandidatID) REFERENCES Kandidati(KandidatID),
  99.     TestID INT FOREIGN KEY(TestID) REFERENCES Testovi(TestID),
  100.     Polozio BIT NOT NULL,
  101.     OsvojeniBodovi DECIMAL(18,2) NOT NULL,
  102.     Napomena nvarchar(300)
  103. )
  104.  
  105. /*Koristeći AdventureWorks2014 bazu podataka, importovati 10 kupaca u tabelu Kandidati i to sljedeće kolone:
  106. a. FirstName (Person) -> Ime,
  107. b. LastName (Person) -> Prezime,
  108. c. Zadnjih 13 karaktera kolone rowguid iz tabele Customer (Crticu zamijeniti brojem 0) -> JMBG,
  109. d. ModifiedDate (Customer) -> DatumRodjenja,
  110. e. City (Address) -> MjestoRodjenja,
  111. f. PhoneNumber (PersonPhone) -> Telefon,
  112. g. EmailAddress (EmailAddress) -> Email.
  113. Također, u tabelu Testovi unijeti minimalno tri testa sa proizvoljnim podacima.*/
  114.  
  115. INSERT INTO Kandidati(Ime,Prezime,JMBG,DatumRodjenja,MjestoRodjenja,Telefon,Email)
  116. SELECT top 10 P.FirstName, P.LastName, REPLACE(RIGHT(P.[rowguid],13),'-','0'), P.ModifiedDate,[City], [PhoneNumber],[EmailAddress]
  117. FROM AdventureWorks2014.Person.Person AS P JOIN AdventureWorks2014.Person.BusinessEntityAddress AS BSE
  118.         ON P.BusinessEntityID = BSE.BusinessEntityID JOIN AdventureWorks2014.Person.Address AS A ON
  119.         BSE.AddressID = A.AddressID
  120.         JOIN AdventureWorks2014.Person.PersonPhone AS PP ON P.BusinessEntityID = PP.BusinessEntityID
  121.         JOIN AdventureWorks2014.Person.EmailAddress AS EMAIL ON P.BusinessEntityID = EMAIL.BusinessEntityID
  122. ORDER BY newid()
  123.  
  124. SELECT * FROM Kandidati
  125.  
  126. INSERT INTO Testovi(Datum,Oznaka,Oblast,MaxBrojBodova,Opis)
  127. VALUES ('2015-03-06','DBMS','Baze',100,'Integralni ispit')
  128.  
  129. INSERT INTO Testovi(Datum,Oznaka,Oblast,MaxBrojBodova,Opis)
  130. VALUES ('2015-03-07','PR2','Programiranje',100,'Integralni ispit')
  131.  
  132. INSERT INTO Testovi(Datum,Oznaka,Oblast,MaxBrojBodova,Opis)
  133. VALUES ('2015-03-08','SIV','Statistika',100,'Integralni ispit')
  134.  
  135. SELECT * FROM Testovi
  136.  
  137. /*Kreirati stored proceduru koja će na osnovu proslijeđenih parametara služiti za unos podataka u tabelu RezultatiTesta.
  138. Proceduru pohraniti pod nazivom usp_RezultatiTesta_Insert.
  139. Obavezno testirati ispravnost kreirane procedure (unijeti proizvoljno minimalno 10 rezultata za različite testove).*/
  140.  
  141. CREATE PROCEDURE usp_RezultatiTesta_Insert(
  142.     @KandidatID INT,
  143.     @TestID INT,
  144.     @Polozio BIT,
  145.     @OsvojeniBodovi DECIMAL(18,2),
  146.     @Napomena nvarchar(300)
  147. )AS
  148. BEGIN
  149. INSERT INTO RezultatiTesta
  150. VALUES (@KandidatID,@TestID,@Polozio,@OsvojeniBodovi,@Napomena)
  151. END
  152.  
  153. SELECT * FROM Kandidati
  154.  
  155. SELECT * FROM Testovi
  156.  
  157. SELECT * FROM RezultatiTesta
  158.  
  159. EXEC usp_RezultatiTesta_Insert 18806,3,1,90,NULL
  160.  
  161. /*Kreirati view (pogled) nad podacima koji će sadržavati sljedeća polja:
  162. ime i prezime, jmbg, telefon i email kandidata, zatim datum, naziv, oznaku, oblast i max.
  163. broj bodova na testu, te polje položio, osvojene bodove i procentualni rezultat testa.
  164. View pohranite pod nazivom view_Rezultati_Testiranja.*/
  165.  
  166. CREATE VIEW view_Rezultati_Testiranja AS
  167. SELECT [Ime], [Prezime], [Telefon],[Email],T.[Datum],Oznaka,[Oblast],[MaxBrojBodova],[Polozio],[OsvojeniBodovi]
  168. FROM Kandidati AS K JOIN RezultatiTesta AS RT ON K.KandidatID = RT.KandidatID
  169.         JOIN Testovi AS T ON RT.TestID = T.TestID
  170.  
  171. /*Kreirati stored proceduru koja će na osnovu proslijeđenih parametara
  172.  @OznakaTesta i @Polozio prikazivati rezultate testiranja.
  173.  Kao izvor podataka koristiti prethodno kreirani view.
  174.  Proceduru pohraniti pod nazivom usp_RezultatiTesta_SelectByOznaka.
  175.  Obavezno testirati ispravnost kreirane procedure.*/
  176.  
  177.  CREATE PROCEDURE usp_RezultatiTesta_SelectByOznaka (
  178.   @OznakaTesta nvarchar(10) = NULL,
  179.   @Polozio bit = NULL
  180.  )AS
  181.  BEGIN
  182.  SELECT [Ime], [Prezime],[Datum],Oznaka,[Oblast],[MaxBrojBodova],[Polozio],[OsvojeniBodovi]
  183.  FROM view_Rezultati_Testiranja AS VRT
  184.  WHERE ([Oznaka] = @OznakaTesta OR @OznakaTesta IS NULL) AND ([Polozio] = @Polozio OR @Polozio IS NULL)
  185.  END
  186.  
  187.  EXEC usp_RezultatiTesta_SelectByOznaka @OznakaTesta=DBMS
  188.  
  189. /* Kreirati proceduru koja će služiti za izmjenu rezultata testiranja.
  190. Proceduru pohraniti pod nazivom usp_RezultatiTesta_Update.
  191. Obavezno testirati ispravnost kreirane procedure. */
  192.  
  193. CREATE PROCEDURE usp_RezultatiTesta_Update(
  194.     @KandidatID INT,
  195.     @TestID INT,
  196.     @Polozio bit,
  197.     @OsvojeniBodovi DECIMAL(18,2),
  198.     @Napomena nvarchar(300) = NULL
  199. )AS
  200. BEGIN
  201. UPDATE RezultatiTesta
  202. SET Polozio = @Polozio, OsvojeniBodovi = @OsvojeniBodovi, Napomena = @Napomena
  203. WHERE KandidatID=@KandidatID AND TestID = @TestID
  204. END
  205.  
  206.  
  207. SELECT * FROM RezultatiTesta
  208.  
  209. EXEC usp_RezultatiTesta_Update @KandidatID = 18799,@TestID = 1,@Polozio = 1, @OsvojeniBodovi = 100,@Napomena = NULL
  210.  
  211. /*Kreirati stored proceduru koja će služiti za brisanje testova zajedno sa svim rezultatima testiranja.
  212. Proceduru pohranite pod nazivom usp_Testovi_Delete. Obavezno testirati ispravnost kreirane procedure. */
  213.  
  214. CREATE PROCEDURE usp_Testovi_Delete (
  215.     @TestID INT
  216. )AS
  217. BEGIN
  218. DELETE FROM RezultatiTesta WHERE TestID = @TestID
  219.  
  220. DELETE FROM Testovi WHERE TestID = @TestID
  221.  
  222. END
  223.  
  224. SELECT * FROM Testovi
  225.  
  226. EXEC usp_Testovi_Delete 2
  227.  
  228. /* Kreirati trigger koji će spriječiti brisanje rezultata testiranja.
  229.  Obavezno testirati ispravnost kreiranog triggera. */
  230.  
  231.  
  232.  CREATE TRIGGER preventiva ON [dbo].[RezultatiTesta] FOR DELETE
  233.   AS
  234.   Print 'Brisanje nije dozvoljeno'
  235.   ROLLBACK;
  236.  
  237.   DELETE FROM RezultatiTesta
  238.  
  239.   backup DATABASE [2514] TO disk = 'c:\DBMS\2514back.bck'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement