Advertisement
ostyleo

Untitled

Nov 9th, 2017
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 11.97 KB | None | 0 0
  1. USE Magazin_de_Antichitati
  2. GO
  3.  
  4. --                          INSERT                          --
  5.  
  6. INSERT INTO Perioada_Istorica (CodP, Denumire, INTERVAL)
  7.     VALUES  (1, 'Preistorie' , '10000 i.en.') ,
  8.             (2, 'Antichitate' , '8000 i.en.') ,
  9.             (3, 'Epoca Clasica' , '400 i.en.') ,
  10.             (4, 'Evul Mediu' , '500 en.') ,
  11.             (5, 'Renasterea' , '1400 en.') ,
  12.             (6, 'Epoca industriala' , '1700 en.'),
  13.             (7, 'Epoca moderna', '1900 en.')
  14. GO
  15.  
  16. INSERT INTO Categorie
  17.     VALUES (1, 'Bani obiecte de valoare'),
  18.            (2, 'Mobilier'),
  19.            (3, 'Bijuterii si accesorii'),
  20.            (4, 'Ceasuri'),
  21.            (5, 'Obiecte decorative'),
  22.            (6, 'Colectii'),
  23.            (7, 'Arta'),
  24.            (8, 'Masinarii'),
  25.            (9, 'Vesela'),
  26.            (10, 'Colectii'),
  27.            (11, 'Altele'),
  28.            (11, 'Oale') -- Nu poate fi adaugat, cheia nu este unicat
  29. GO
  30.  
  31. INSERT INTO Antichitate
  32.     VALUES (1,'Lant ceremonial din pene',10000,1,3),
  33.            (2,'Vas cupru',200,2,9),
  34.            (3,'Farfurie de aur',8000,2,9),
  35.            (4,'Bancnota de 2 lei',350,7,1),
  36.            (5,'Parfum Christian Dior Miss Dior Paris',1750,7,2),
  37.            (6,'Pat Neo Baroc',2650,6,2),
  38.            (7,'Ceas De Perete Cu Pendula Hamburg',643,7,4),
  39.            (8,'Hunga Munga',1500,4,11),
  40.            (11,'Ceakovski Bizet',55,7,11),
  41.            (12,'adwa',1231,111,11), -- Nu xista cheia CodP = 111
  42.            (13,'adwa',1231,2,111231), -- Nu xista cheia CodCA = 111231
  43.            (1,'afawfwa',1231,1,11) -- Cheia primara CodA este deja inserata
  44. GO
  45.  
  46. INSERT INTO Antichitate(CodA, Pret, CodP, CodCa)
  47.     VALUES (9,5000,3,11), (10,23,2,1)          
  48. GO
  49.  
  50. INSERT INTO Antichitate(Pret, CodP, CodCa) -- Nu se poat adauga elemente fara
  51.     VALUES (5000,3,11)                     -- cheia primara
  52. GO
  53.  
  54. INSERT INTO Achizitie
  55.     VALUES (1,1,'01-08-2016',6000),
  56.            (2,3,'01-02-2001',10),
  57.            (3,2,'30-05-2011',2000),
  58.            (4,4,'20-01-2010',120),
  59.            (5,1,'13-08-1999',500),
  60.            (6,10,'01-10-2016',1650),
  61.            (7,10,'05-06-2017',300),
  62.            (8,9,'08-03-2016',500),
  63.            (9,5,'01-02-2012',3000),
  64.            (10,7,'01-05-2016',5),
  65.            (11,7,'01-02-2010',32),
  66.            (22,7,'01-05-2016',-5), -- pretul nu poate fi negativ
  67.            (5,33,'01-05-2016',5) -- nu exista distribuitorul
  68. GO
  69.  
  70. --                          UPDATE                          --
  71.  
  72. ----Achzitie----
  73. UPDATE  Achizitie
  74.     SET Suma = Suma * 5
  75.     WHERE Suma <= 10
  76.  
  77. UPDATE Achizitie
  78.     SET CodS = 3
  79.     WHERE CodS BETWEEN 5 AND 7 OR CodS = 1  
  80.  
  81. UPDATE Achizitie
  82.     SET DATA = '02-03-2017'
  83.     WHERE DATA LIKE '01%2016'
  84.  
  85. UPDATE Achizitie
  86.     SET Suma = 222.54
  87.     WHERE Suma IN (120,50,10) OR Suma IS NULL
  88.  
  89. ----Antichitate----
  90. UPDATE Antichitate
  91.     SET Nume = 'in curs de identificare' , Pret = 0
  92.     WHERE Nume IS NULL
  93.  
  94. UPDATE Antichitate
  95.     SET Pret = Pret * 2
  96.     WHERE CodP = 1 OR CodP = 2
  97.  
  98. UPDATE Antichitate
  99.     SET Nume = 'in curs de identificare', Pret = 0
  100.     WHERE Nume IS NULL OR Nume LIKE 'Bacnot'
  101.  
  102. UPDATE Antichitate
  103.     SET CodCA = 3
  104.     WHERE CodP IN (1,2,4) OR Pret BETWEEN 8000 AND 10000
  105.  
  106. ---Perioada_Istorica----
  107. UPDATE Perioada_Istorica
  108.     SET INTERVAL = 'b.c.'
  109.     WHERE INTERVAL LIKE '$i.en.$' OR INTERVAL IN ('Preistorie','Antichitate','Epoca Clasica')
  110.  
  111. UPDATE Perioada_Istorica
  112.     SET Denumire = 'in curs de identificare'
  113.     WHERE Denumire IS NULL
  114.  
  115. UPDATE Perioada_Istorica
  116.     SET Denumire = 'Evul mediu'
  117.     WHERE CodP BETWEEN 1 AND 5 OR CodP > 9
  118.  
  119. --                          DELETE                          --
  120.  
  121. ----Antichitate----
  122. DELETE
  123.     FROM Antichitate
  124.     WHERE Nume IS NULL
  125.  
  126. DELETE
  127.     FROM Antichitate
  128.     WHERE CodP = 1 OR CodP = 2
  129.  
  130. DELETE
  131.     FROM Antichitate
  132.     WHERE Nume IS NULL OR Nume LIKE 'Bacnot'
  133.  
  134. DELETE
  135.     FROM Antichitate
  136.     WHERE CodP IN (1,2,4) OR Pret BETWEEN 8000 AND 10000
  137.  
  138. ----Achzitie----
  139. DELETE  
  140.     FROM Achizitie
  141.     WHERE Suma <= 10
  142.  
  143. DELETE
  144.     FROM Achizitie
  145.     WHERE CodS BETWEEN 5 AND 7 OR CodS = 1  
  146.  
  147. DELETE
  148.     FROM Achizitie
  149.     WHERE DATA LIKE '01%2016'
  150.  
  151. DELETE
  152.     FROM Achizitie
  153.     WHERE Suma IN (120,50,10) OR Suma IS NULL
  154.  
  155. --                          INTEROGARI                          --
  156.  
  157. -- Lista cumparatorilor ce au atestate de colectionar generale
  158. -- sau nu au atestate
  159.  
  160. SELECT C.CodCu,C.Nume, C.Prenume
  161.     FROM Cumparator C
  162.     WHERE C.CodCu IN (SELECT AC.CodAt
  163.                         FROM Atestat_de_Colectionar AC
  164.                         WHERE AC.Tip = 'General')
  165. UNION
  166. SELECT C.CodCu,C.Nume, C.Prenume
  167.     FROM Cumparator C
  168.     WHERE C.CodCu NOT IN (SELECT AC.CodAt
  169.                             FROM Atestat_de_Colectionar AC
  170.                             WHERE AC.Tip = 'General' OR Ac.Tip = 'Arme')
  171. ORDER BY C.Nume, C.Prenume
  172.  
  173.  
  174. -- Lista antichitatilor achizitionate + lista antichitatilor ce nu au un certificat de
  175. -- autenticitate sau sunt prea vechi pentru a putea fi identificate fara a fi afectate
  176. -- (inaintea epocii clasice)
  177.  
  178. SELECT A.CodA, A.Nume, A.Pret
  179.     FROM Antichitate A
  180.     WHERE A.CodA IN (SELECT V.CodA
  181.                         FROM Vanzare V)
  182. UNION
  183. SELECT A.CodA, A.Nume, A.Pret
  184.     FROM Antichitate A
  185.     WHERE A.CodA NOT IN (SELECT C.CodC FROM Certificat_de_Autenticitate C)
  186.           OR A.CodP IN (1,2)
  187. ORDER BY A.Pret
  188.  
  189. -- Lista cumparatorilor ce au macar atestate de colectionar 'arme' si au cumparat
  190. -- macar o antichitate
  191.  
  192. SELECT DISTINCT C.CodCu, C.Nume, C.Prenume
  193.     FROM Cumparator C
  194.     WHERE C.CodCu IN (SELECT CodAt FROM Atestat_de_Colectionar)
  195. INTERSECT
  196. SELECT DISTINCT C.CodCu, C.Nume, C.Prenume
  197.     FROM Cumparator C
  198.     WHERE C.CodCu IN (SELECT CodCu FROM Vanzare)
  199.  
  200. -- Lista produselor din categoria mobilier achizitionat de la un colectionar din Cluj
  201.  
  202. SELECT A.Nume, A.Pret
  203.     FROM Antichitate A
  204.     WHERE A.CodCA = 2
  205. INTERSECT
  206. SELECT A.Nume, A.Pret
  207.     FROM Antichitate A
  208.     WHERE A.CodA IN (SELECT AC.CodA
  209.                         FROM Achizitie AC
  210.                         WHERE AC.CodS IN (SELECT AD.CodAd
  211.                                             FROM Adresa AD
  212.                                             WHERE Oras = 'Cluj'))
  213. ORDER BY A.Pret
  214.  
  215. -- Lista clientilor ce nu au Atestat de colectionar
  216.  
  217. SELECT C.Nume, C.Prenume
  218.     FROM Cumparator C
  219. EXCEPT
  220. SELECT C.Nume, C.Prenume
  221.     FROM Cumparator C
  222.     WHERE C.CodCu IN (SELECT AC.CodAt
  223.                             FROM Atestat_de_Colectionar AC
  224.                             WHERE Tip IN ('Arme','Arne','Generic'))
  225.  
  226. -- Lista clientilor ce au Atestat de colectionar
  227.  
  228. SELECT C.Nume, C.Prenume
  229.     FROM Cumparator C
  230. EXCEPT
  231. SELECT C.Nume, C.Prenume
  232.     FROM Cumparator C
  233.     WHERE C.CodCu NOT IN (SELECT AC.CodAt
  234.                             FROM Atestat_de_Colectionar AC
  235.                             WHERE Tip IN ('Arme','Arne','Generic'))
  236.  
  237. -- Antichitatile cumparate si vandute
  238.  
  239. SELECT DISTINCT S.Nume AS [Nume Sursa],
  240.                 S.Prenume AS [Prenume Sursa],
  241.                 C.Nume AS [Nume Client],
  242.                 C.Prenume AS [Prenume Client],
  243.                 A.Nume AS [Denumire Antichitate]
  244.     FROM Sursa S
  245.         INNER JOIN Achizitie Ac ON S.CodS = Ac.CodS
  246.         INNER JOIN Antichitate A ON Ac.CodA = A.CodA
  247.         INNER JOIN Vanzare V ON V.CodA = A.CodA
  248.         INNER JOIN Cumparator C ON V.CodCu = C.CodCu
  249. ORDER BY S.Nume, S.Prenume,C.Nume,C.Prenume,A.Nume
  250.  
  251. -- toate antichitatile vandute din stoc  + antichitatile vandute de la clienti
  252.  
  253. SELECT S.Nume AS [Nume Sursa],
  254.                 S.Prenume AS [Prenume Sursa],
  255.                 C.Nume AS [Nume Client],
  256.                 C.Prenume AS [Prenume Client],
  257.                 A.Nume AS [Denumire Antichitate]
  258.     FROM Sursa S
  259.         LEFT JOIN Achizitie Ac ON S.CodS = Ac.CodS
  260.         LEFT JOIN Antichitate A ON Ac.CodA = A.CodA
  261.         LEFT JOIN Vanzare V ON V.CodA = A.CodA
  262.         LEFT JOIN Cumparator C ON V.CodCu = C.CodCu
  263. ORDER BY C.Nume,C.Prenume
  264.  
  265. -- toate antichitatile cumparate + antichitatile vandute
  266.  
  267. SELECT S.Nume AS [Nume Sursa],
  268.                 S.Prenume AS [Prenume Sursa],
  269.                 C.Nume AS [Nume Client],
  270.                 C.Prenume AS [Prenume Client],
  271.                 A.Nume AS [Denumire Antichitate]
  272.     FROM Sursa S
  273.         RIGHT JOIN Achizitie Ac ON S.CodS = Ac.CodS
  274.         RIGHT JOIN Antichitate A ON Ac.CodA = A.CodA
  275.         RIGHT JOIN Vanzare V ON V.CodA = A.CodA
  276.         RIGHT JOIN Cumparator C ON V.CodCu = C.CodCu
  277. ORDER BY S.Nume, S.Prenume
  278.  
  279. -- toate produsele achizitionate si cu cat au fost vandute + cele vandute din stock
  280. -- + cele ce inca nu au fost vandute
  281.  
  282. SELECT Ac.DATA AS [DATA Achizitiei],
  283.        Ac.Suma AS [Suma Achizitiei],
  284.        V.DATA AS [DATA Vanzarii],
  285.        V.Suma AS [Suma Vanzarii]
  286.     FROM Achizitie Ac
  287.         FULL JOIN Antichitate A ON Ac.CodA = A.CodA
  288.         FULL JOIN Vanzare V ON A.CodA = V.CodA
  289. ORDER BY Ac.DATA,V.DATA
  290.  
  291. -- Vanzatorii ce au efectuat o vanzare
  292.  
  293. SELECT V.Nume, V.Prenume
  294.     FROM Vanzator V
  295.     WHERE EXISTS (SELECT*
  296.                     FROM Vanzare Vz
  297.                     WHERE Vz.CodV = V.CodV)
  298.  
  299. -- Vanzatorii ce nu au efectuat o vanzare
  300.  
  301. SELECT V.Nume, V.Prenume
  302.     FROM Vanzator V
  303.     WHERE EXISTS (SELECT*
  304.                     FROM Vanzare Vz
  305.                     WHERE Vz.CodV = V.CodV)
  306.  
  307. -- Top categorii de antichitati cu cea mai mare valoare de vanzare
  308.  
  309. SELECT TOP 3 CA.Nume, SUM(V.Suma) AS Suma
  310.     FROM Categorie CA, Vanzare V, Antichitate A
  311.     WHERE CA.CodCA = A.CodCA AND A.CodA = V.CodA
  312. GROUP BY CA.Nume
  313. HAVING SUM(V.Suma)> 3000
  314. ORDER BY Suma DESC
  315.  
  316. -- Top categorii de antichitati cu cea mai mare valoare de cumparare
  317.  
  318. SELECT TOP 10 CA.Nume, SUM(Ac.Suma) AS Medie
  319.     FROM Categorie CA, Achizitie Ac, Antichitate A
  320.     WHERE Ca.CodCA = A.CodCA AND A.codA = Ac.CodA
  321. GROUP BY CA.Nume
  322. HAVING SUM(Ac.Suma) > AVG(Ac.Suma)
  323. ORDER BY Medie DESC
  324.  
  325. -- Numarul de antichitati achizitionate organizat pe categorii, avand suma cheltuita peste medie
  326.  
  327. SELECT CA.Nume, COUNT(Ac.CodA) AS [Nr. Achizitii]
  328.     FROM Categorie CA, Achizitie Ac, Antichitate A
  329.     WHERE Ca.CodCA = A.CodCA AND A.codA = Ac.CodA
  330. GROUP BY CA.Nume
  331. HAVING SUM(Ac.Suma) > (SELECT AVG(Suma) FROM Achizitie)
  332. ORDER BY [Nr. Achizitii]
  333.  
  334. -- Valoarile peste medie a vanzarilor efectuate de un vanzator
  335.  
  336. SELECT V.Nume,V.Prenume, COUNT(Va.CodV) AS [Nr. Vanzari], AVG(Va.Suma) AS [Media]
  337.     FROM Vanzator V, Vanzare Va
  338.     WHERE Va.CodV = V.CodV
  339. GROUP BY V.Nume, V.Prenume
  340. HAVING SUM(Va.Suma) > (SELECT AVG(Suma) FROM Vanzare)
  341. ORDER BY [Media] DESC
  342.  
  343. --Produsele pretul mai mare decat cele vandute inainte de 01.01.2017
  344.  
  345. SELECT A.Nume
  346.     FROM Antichitate A, Vanzare V
  347.     WHERE A.CodA = V.CodA AND A.Pret > ALL(SELECT Suma
  348.                                             FROM Vanzare
  349.                                             WHERE DATA < '2017-01-01')
  350.  
  351. SELECT A.Nume
  352.     FROM Antichitate A, Vanzare V
  353.     WHERE A.CodA = V.CodA AND A.Pret > (SELECT AVG(Suma)
  354.                                             FROM Vanzare
  355.                                             WHERE DATA < '2017-01-01')
  356.  
  357. --Produsele pretul mai mic decat cele vandute in data de 01.01.2017
  358.  
  359. SELECT A.Nume
  360.     FROM Antichitate A, Vanzare V
  361.     WHERE A.CodA = V.CodA AND A.Pret < ANY(SELECT Suma
  362.                                             FROM Vanzare
  363.                                             WHERE DATA = '2017-01-01')
  364.  
  365. SELECT A.Nume
  366.     FROM Antichitate A, Vanzare V
  367.     WHERE A.CodA = V.CodA AND A.Pret < (SELECT AVG(Suma)
  368.                                             FROM Vanzare
  369.                                             WHERE DATA = '2017-01-01')
  370.  
  371. -- Produsele vandute in data de 01-01-2017
  372.  
  373. SELECT A.Nume
  374.     FROM Antichitate A, Vanzare V
  375.     WHERE A.CodA = V.CodA AND V.DATA = ALL(SELECT DATA
  376.                                             FROM Vanzare
  377.                                             WHERE DATA = '2017-01-01')
  378.  
  379. SELECT A.Nume
  380.     FROM Antichitate A, Vanzare V
  381.     WHERE A.CodA = V.CodA AND V.DATA NOT IN (SELECT DATA
  382.                                                 FROM Vanzare
  383.                                                 WHERE DATA < '2017-01-01' OR DATA >'2017-01-01' )
  384.  
  385. -- Produsele vandute inainte de 01-01-2017
  386.  
  387. SELECT A.Nume
  388.     FROM Antichitate A, Vanzare V
  389.     WHERE A.CodA = V.CodA AND V.DATA = ANY(SELECT DATA
  390.                                             FROM Vanzare
  391.                                             WHERE DATA < '2017-01-01')
  392.  
  393. SELECT A.Nume
  394.     FROM Antichitate A, Vanzare V
  395.     WHERE A.CodA = V.CodA AND V.DATA NOT IN (SELECT DATA
  396.                                                 FROM Vanzare
  397.                                                 WHERE DATA >= '2017-01-01')
  398.  
  399. -- Antichitatile cumparate si vandute
  400. SELECT A.[Nume Sursa],A.[Nume Sursa],A.[Nume Client],A.[Prenume Client],A.[Denumire Antichitate]
  401.     FROM (SELECT DISTINCT S.Nume AS [Nume Sursa],
  402.                           S.Prenume AS [Prenume Sursa],
  403.                           C.Nume AS [Nume Client],
  404.                           C.Prenume AS [Prenume Client],
  405.                           A.Nume AS [Denumire Antichitate]
  406.           FROM Sursa S
  407.             INNER JOIN Achizitie Ac ON S.CodS = Ac.CodS
  408.             INNER JOIN Antichitate A ON Ac.CodA = A.CodA
  409.             INNER JOIN Vanzare V ON V.CodA = A.CodA
  410.             INNER JOIN Cumparator C ON V.CodCu = C.CodCu) A
  411.  
  412.  
  413. -- toate antichitatile vandute din stoc  + antichitatile vandute de la clienti
  414.  
  415. SELECT A.[Nume Sursa],A.[Nume Sursa],A.[Nume Client],A.[Prenume Client],A.[Denumire Antichitate]
  416.     FROM (SELECT DISTINCT S.Nume AS [Nume Sursa],
  417.                           S.Prenume AS [Prenume Sursa],
  418.                           C.Nume AS [Nume Client],
  419.                           C.Prenume AS [Prenume Client],
  420.                           A.Nume AS [Denumire Antichitate]
  421.           FROM Sursa S
  422.             LEFT JOIN Achizitie Ac ON S.CodS = Ac.CodS
  423.             LEFT JOIN Antichitate A ON Ac.CodA = A.CodA
  424.             LEFT JOIN Vanzare V ON V.CodA = A.CodA
  425.             LEFT JOIN Cumparator C ON V.CodCu = C.CodCu) A
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement