Advertisement
ASDEVELOPMENT

SQL - Ispit

Aug 11th, 2016
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 10.00 KB | None | 0 0
  1.  
  2.  
  3.  
  4. /*
  5.  
  6. 1. Kroz SQL kod, napraviti bazu podataka koja nosi ime vašeg broja dosijea.
  7. U postupku kreiranja u obzir uzeti samo DEFAULT postavke.
  8.  
  9. */
  10.  
  11.  
  12.  
  13. GO
  14. CREATE DATABASE IB140294_vjezba
  15.  
  16.  
  17. ON(
  18.    
  19.     NAME = IB140294_dat, FILENAME = 'C:\BPII\DATA\IB140294.mdf', SIZE = 5MB, MAXSIZE = UNLIMITED, FILEGROWTH = 5%
  20.  
  21. )
  22.  
  23. LOG ON (
  24.  
  25.     NAME = IB140294_log, FILENAME = 'C:\BPII\LOG\IB140294.ldf', SIZE = 2MB, MAXSIZE = UNLIMITED, FILEGROWTH = 2%
  26.  
  27. );
  28.  
  29.  
  30. USE IB140294_vjezba
  31.  
  32. /*
  33.  
  34. Unutar svoje baze podataka kreirati tabelu sa sljedećom strukturom:
  35.  
  36. a) Proizvodi:
  37.     I. ProizvodID, automatski generatpr vrijednosti i primarni ključ
  38.     II. Sifra, polje za unos 10 UNICODE karaktera (obavezan unos), jedinstvena vrijednost
  39.     III. Naziv, polje za unos 50 UNICODE karaktera (obavezan unos)
  40.     IV. Cijena, polje za unos decimalnog broja (obavezan unos)
  41.  
  42. */
  43.  
  44.  
  45. GO
  46. CREATE TABLE Proizvodi(
  47.  
  48.     ProizvodID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  49.     Sifra nvarchar(10) UNIQUE NOT NULL,
  50.     Naziv nvarchar(50) NOT NULL,
  51.     Cijena decimal NOT NULL
  52.  
  53. );
  54.  
  55. GO
  56. SELECT *
  57. FROM Proizvodi
  58.  
  59.  
  60. /*
  61.  
  62. b) Skladista
  63.     I. SkladisteID, automatski generator vrijednosti i primarni ključ
  64.     II. Naziv, polje za unos 50 UNICODE karaktera (obavezan unos)
  65.     III. Oznaka, polje za unos 10 UNICODE karaktera (obavezan unos), jedinstvena vrijednost
  66.     IV. Lokacija, polje za unos 50 UNICODE karaktera (obavezan unos)
  67.  
  68. */
  69.  
  70.  
  71. GO
  72. CREATE TABLE Skladista(
  73.    
  74.     SkladisteID int IDENTITY(1,1) PRIMARY KEY NOT NULL,
  75.     Naziv nvarchar(50) NOT NULL,
  76.     Oznaka nvarchar(10) UNIQUE NOT NULL,
  77.     Lokacija nvarchar(50) NOT NULL
  78.  
  79. );
  80.  
  81.  
  82.  
  83. /*
  84.  
  85. c) SkladisteProizvodi
  86. I) Stanje, polje za unos decimalnih brojeva (obavezan unos)
  87.  
  88.  
  89. Napomena: Na jednom skladištu može biti uskladišteno više proizvoda,
  90. dok isti proizvod može biti uskladišten na više različitih skladišta.
  91.  
  92. Onemogućiti da se isti proizvod na skladištu može pojaviti više puta.
  93.  
  94. */
  95.  
  96. GO
  97. CREATE TABLE SkladisteProizvodi(
  98.    
  99.     SkladisteID INT FOREIGN KEY REFERENCES Skladista(SkladisteID) NOT NULL,
  100.     ProizvodID INT FOREIGN KEY REFERENCES Proizvodi(ProizvodID) NOT NULL,
  101.  
  102.     PRIMARY KEY(SkladisteID, ProizvodID),
  103.     Stanje decimal NOT NULL
  104.  
  105. );
  106.  
  107.  
  108. /*
  109.  
  110. 2. Popunjavanje tabela podacima
  111. a) Putem INSERT komande u tabelu Skladista dodati minimalno 3 skladišta.
  112. b) Koristeći bazu podataka AdventureWorks2014, preko INSERT i SELECT komande
  113. importovati 10 najprodavanijih bicikala (kategorija proizvoda 'Bikes' i to sljedeće kolone:
  114.  
  115. I. Broj proizvoda (ProductNumber) - > Sifra,
  116. II. Naziv bicikla (Name) -> Naziv,
  117. III. Cijena po komadu (ListPrice) -> Cijena,
  118.  
  119. c) Putem INSERT i SELECT komandi u tabelu SkladisteProizvodi za sva dodana skladista importovati
  120. sve proizvode tako da stanje bude 100
  121.  
  122. */
  123.  
  124.  
  125. GO
  126. INSERT INTO Skladista
  127. (Naziv, Oznaka, Lokacija)
  128. VALUES ('Skladiste-Sarajevo', 'SK-SA', 'Sarajevo'),
  129.        ('Skladiste-Banja-Luka', 'SK-BL', 'Banja Luka'),
  130.        ('Skladiste-Mostar', 'SK-MO', 'Mostar')
  131.  
  132.  
  133. GO
  134.  
  135. INSERT INTO Proizvodi
  136. (Sifra, Naziv, Cijena)
  137. SELECT TOP 10
  138.  
  139.     AdventureWorks2014.Production.Product.ProductNumber AS [Sifra],
  140.     AdventureWorks2014.Production.Product.Name AS [Naziv],
  141.     AdventureWorks2014.Production.Product.ListPrice AS [Cijena]
  142.  
  143. FROM AdventureWorks2014.Production.Product
  144.  
  145.    
  146. WHERE AdventureWorks2014.Production.Product.ProductSubcategoryID IN
  147.  
  148.     (
  149.  
  150.         SELECT AdventureWorks2014.Production.ProductSubcategory.ProductSubcategoryID
  151.         FROM AdventureWorks2014.Production.ProductSubcategory
  152.         WHERE AdventureWorks2014.Production.ProductSubcategory.ProductSubcategoryID = AdventureWorks2014.Production.Product.ProductSubcategoryID AND AdventureWorks2014.Production.ProductSubcategory.ProductCategoryID IN (
  153.            
  154.             SELECT AdventureWorks2014.Production.ProductCategory.ProductCategoryID
  155.             FROM AdventureWorks2014.Production.ProductCategory
  156.             WHERE AdventureWorks2014.Production.ProductCategory.ProductCategoryID = AdventureWorks2014.Production.ProductSubcategory.ProductCategoryID AND AdventureWorks2014.Production.ProductCategory.Name = 'Bikes'
  157.        
  158.         )
  159.    
  160.     )
  161.  
  162. ORDER BY (
  163.    
  164.     SELECT SUM(AdventureWorks2014.Purchasing.PurchaseOrderDetail.OrderQty)
  165.     FROM AdventureWorks2014.Purchasing.PurchaseOrderDetail
  166.     WHERE AdventureWorks2014.Purchasing.PurchaseOrderDetail.ProductID IN (
  167.        
  168.         SELECT AdventureWorks2014.Production.Product.ProductID
  169.         FROM AdventureWorks2014.Production.Product
  170.         WHERE AdventureWorks2014.Production.Product.ProductID = AdventureWorks2014.Purchasing.PurchaseOrderDetail.ProductID
  171.     )
  172.  
  173.     ) DESC
  174.  
  175.  
  176.  
  177. /*
  178.  
  179. Putem INSERT i SELECT komandi u tabelu SkladisteProizvodi za
  180. sva dodana skladista importovati sve proizvode tako da stanje bude 100
  181.  
  182. */
  183.  
  184. GO
  185. INSERT INTO SkladisteProizvodi
  186. (SkladisteID, ProizvodID, Stanje)
  187. SELECT 1, Proizvodi.ProizvodID, 100
  188. FROM Proizvodi
  189.  
  190. GO
  191. INSERT INTO SkladisteProizvodi
  192. (SkladisteID, ProizvodID, Stanje)
  193. SELECT 2, Proizvodi.ProizvodID, 100
  194. FROM Proizvodi
  195.  
  196. GO
  197. INSERT INTO SkladisteProizvodi
  198. (SkladisteID, ProizvodID, Stanje)
  199. SELECT 3, Proizvodi.ProizvodID, 100
  200. FROM Proizvodi
  201.  
  202.  
  203.  
  204. /*
  205.  
  206. 3. Kreirati uskladištenu proceduru koja će vršiti povećanje stanja skladišta za
  207. određeni proizvod na odabranom skladištu. Provjeriti ispravnost procedure.
  208.  
  209. */
  210.  
  211.  
  212. GO
  213. CREATE PROCEDURE PovecajStanje
  214. @sifraProizvoda nvarchar(10), @nazivSkladista nvarchar(15), @stanje decimal
  215. AS
  216.  
  217.     BEGIN
  218.         UPDATE SkladisteProizvodi
  219.         SET SkladisteProizvodi.Stanje += @stanje
  220.         WHERE SkladisteProizvodi.SkladisteID = (
  221.            
  222.             SELECT Skladista.SkladisteID
  223.             FROM Skladista
  224.             WHERE Skladista.Naziv = @nazivSkladista
  225.         )
  226.  
  227.         AND SkladisteProizvodi.ProizvodID = (
  228.            
  229.             SELECT Proizvodi.ProizvodID
  230.             FROM Proizvodi
  231.             WHERE Proizvodi.Sifra = @sifraProizvoda
  232.        
  233.         )
  234.     END;
  235.  
  236. GO
  237.    
  238. ALTER PROCEDURE PovecajStanje
  239. @sifraProizvoda nvarchar(20), @nazivSkladista nvarchar(20), @stanje decimal
  240. AS
  241.  
  242.     BEGIN
  243.         UPDATE SkladisteProizvodi
  244.         SET SkladisteProizvodi.Stanje += @stanje
  245.         WHERE SkladisteProizvodi.SkladisteID = (
  246.            
  247.             SELECT Skladista.SkladisteID
  248.             FROM Skladista
  249.             WHERE Skladista.Naziv = @nazivSkladista
  250.         )
  251.  
  252.         AND SkladisteProizvodi.ProizvodID = (
  253.            
  254.             SELECT Proizvodi.ProizvodID
  255.             FROM Proizvodi
  256.             WHERE Proizvodi.Sifra = @sifraProizvoda
  257.        
  258.         )
  259.     END;
  260.  
  261. GO
  262. SELECT *
  263. FROM Proizvodi
  264. WHERE Proizvodi.Sifra = 'BK-R93R-62'
  265.  
  266. -- BK-R93R-62
  267.  
  268.  
  269. USE IB140294_vjezba
  270.  
  271. EXEC PovecajStanje 'BK-R93R-62', 'Skladiste-Sarajevo', 50
  272.  
  273.  
  274. GO
  275. /*
  276.  
  277. 4. Kreiranje indeksa u bazi podataka nad tabelama
  278.  
  279.     a) Non-clustered indeks nad tabelom Proizvodi. Potrebno je indeksirati Sifru i Naziv.
  280.     Također, potrebno je uključiti kolonu Cijena
  281.  
  282.     b) Napisati proizvoljni upit nad tabelom Proizvodi koji u potpunosti iskorištava indeks iz prethodnog koraka
  283.     c) Uradite disable indeksa iz koraka a)
  284.  
  285. */
  286.  
  287.  
  288. CREATE NONCLUSTERED INDEX ProizvodiIndex
  289. ON Proizvodi(Sifra, Naziv)
  290. INCLUDE (Cijena)
  291.  
  292.  
  293. GO
  294. SELECT Sifra, Naziv, Cijena
  295. FROM Proizvodi
  296.  
  297.  
  298. GO
  299. ALTER INDEX ProizvodiIndex
  300. ON Proizvodi
  301. DISABLE;
  302.  
  303.  
  304.  
  305.  
  306. /*
  307.  
  308. 5. Kreirati view sa sljedećom definicijom. Objekat treba da prikazuje sifru,
  309. naziv i cijenu proizvoda, oznaku, naziv i lokaciju skladišta, te stanje na skladištu.
  310.  
  311. */
  312.  
  313.  
  314. GO
  315.  
  316. CREATE VIEW ProizvodiPogled
  317. AS
  318.  
  319.     SELECT
  320.  
  321.     (
  322.         SELECT Proizvodi.Naziv
  323.         FROM Proizvodi
  324.         WHERE Proizvodi.ProizvodID = SkladisteProizvodi.ProizvodID
  325.    
  326.     ) AS [Naziv proizvoda],
  327.  
  328.     (
  329.         SELECT Proizvodi.Sifra
  330.         FROM Proizvodi
  331.         WHERE Proizvodi.ProizvodID = SkladisteProizvodi.ProizvodID
  332.  
  333.     ) AS [Sifra],
  334.  
  335.     (
  336.         SELECT Proizvodi.Cijena
  337.         FROM Proizvodi
  338.         WHERE Proizvodi.ProizvodID = SkladisteProizvodi.ProizvodID
  339.    
  340.     ) AS [Cijena proizvoda],
  341.  
  342.     (
  343.         SELECT Skladista.Oznaka
  344.         FROM Skladista
  345.         WHERE Skladista.SkladisteID = SkladisteProizvodi.SkladisteID
  346.    
  347.     ) AS [Oznaka],
  348.  
  349.     (
  350.         SELECT Skladista.Naziv
  351.         FROM Skladista
  352.         WHERE Skladista.SkladisteID = SkladisteProizvodi.SkladisteID
  353.  
  354.     ) AS [Naziv skladista],
  355.  
  356.     (
  357.         SELECT Skladista.Lokacija
  358.         FROM Skladista
  359.         WHERE Skladista.SkladisteID = SkladisteProizvodi.SkladisteID
  360.    
  361.     ) AS [Lokacija],
  362.  
  363.     (SkladisteProizvodi.Stanje) AS [Stanje]
  364.  
  365.     FROM SkladisteProizvodi
  366.  
  367.  
  368. GO
  369. SELECT *
  370. FROM ProizvodiPogled
  371.  
  372.  
  373.  
  374. /*
  375.  
  376.  
  377. 6. Kreirati uskladištenu proceduru koja će na osnovu unesene šifre proizvoda prikazati ukupno stanje zaliha
  378. na svim skladištima. U rezultatu prikazati sifru, naziv i cijenu proizvoda te ukupno stanje zaliha.
  379. U proceduri koristiti prethodno kreirani view. Provjeriti ispravnost kreirane procedure.
  380.  
  381. */
  382. GO
  383. CREATE PROCEDURE PrikazStanjaNaSkladistu
  384. @sifra nvarchar (20)
  385.  
  386. AS
  387.  
  388.     BEGIN
  389.  
  390.     SELECT
  391.  
  392.     ProizvodiPogled.[Naziv proizvoda],
  393.     ProizvodiPogled.Sifra,
  394.     ProizvodiPogled.[Cijena proizvoda],
  395.     ProizvodiPogled.Stanje
  396.  
  397.  
  398.     FROM ProizvodiPogled
  399.     WHERE ProizvodiPogled.Sifra = @sifra
  400.  
  401.     END;
  402.  
  403. GO
  404. ALTER PROCEDURE PrikazStanjaNaSkladistu
  405. @sifra nvarchar (20)
  406.  
  407. AS
  408.  
  409.     BEGIN
  410.  
  411.     SELECT
  412.  
  413.     ProizvodiPogled.[Naziv proizvoda],
  414.     ProizvodiPogled.Sifra,
  415.     ProizvodiPogled.[Cijena proizvoda],
  416.     ProizvodiPogled.Stanje
  417.  
  418.  
  419.     FROM ProizvodiPogled
  420.     WHERE ProizvodiPogled.Sifra = @sifra
  421.  
  422.     END;
  423.  
  424.  
  425. EXEC PrikazStanjaNaSkladistu 'BK-R93R-62'
  426.  
  427.  
  428.  
  429. /*
  430.  
  431. 7. Kreirati uskladištenu proceduru koja će vršiti upis novih proizvoda,
  432. te kao stanje zaliha za uneseni proizvod postaviti na 0 za sva skladišta. Provjeriti ispravnost kreirane procedure.
  433.  
  434. */
  435.  
  436.  
  437. GO
  438. CREATE PROCEDURE UpisProizvodSkladiste
  439. @sifra nvarchar(20), @naziv nvarchar(50), @cijena decimal, @oznakaSkladista nvarchar(10)
  440.  
  441. AS
  442.  
  443.  
  444.     BEGIN
  445.         INSERT INTO Proizvodi
  446.         (Sifra, Naziv, Cijena)
  447.         VALUES (@sifra, @naziv, @cijena)
  448.  
  449.         INSERT INTO SkladisteProizvodi
  450.         (SkladisteID, ProizvodID, Stanje)
  451.  
  452.  
  453.         VALUES (
  454.            
  455.             (
  456.                 SELECT Skladista.SkladisteID
  457.                 FROM Skladista
  458.                 WHERE Skladista.Oznaka = @oznakaSkladista
  459.             ),
  460.  
  461.             (
  462.                 SELECT Proizvodi.ProizvodID
  463.                 FROM Proizvodi
  464.                 WHERE Proizvodi.Sifra = @sifra
  465.             ),
  466.  
  467.             0
  468.        
  469.         )
  470.     END;
  471.  
  472.  
  473. SELECT *
  474. FROM Proizvodi
  475.  
  476. EXEC UpisProizvodSkladiste '145SDSS852', 'Sky Cola', 3578, 'SK-SA'
  477.  
  478.  
  479. SELECT *
  480. FROM SkladisteProizvodi
  481. INNER JOIN Proizvodi
  482. ON Proizvodi.ProizvodID = SkladisteProizvodi.ProizvodID
  483.  
  484. WHERE Proizvodi.Sifra = '145SDSS852'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement