Advertisement
Guest User

Untitled

a guest
Jul 11th, 2018
161
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Oracle 8 10.28 KB | None | 0 0
  1. Zad.1
  2. INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,SYSDATE,800,NULL,20);
  3.  
  4. INSERT INTO pracownicy VALUES(2307,'Balwierczak','Pawel','Q',667,7902,TO_DATE('18/07/12', 'YY/MM/DD'),800,NULL,20);
  5. ##################
  6. DODATKOWE
  7.  
  8. zad.1
  9. UPDATE artykul SET cena=cena-10
  10. WHERE nazwa LIKE '%parasol%';
  11. zad.2
  12. SELECT a.nazwa, NVL(SUM(p.ilosc),0)
  13. FROM pozycja p
  14. right join artykul a ON p.id_artykulu=a.id_artykulu
  15. GROUP BY a.nazwa;
  16. zad.3
  17. UPDATE klienci k
  18. SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
  19. join klienci k1 ON z.id_klienta = k1.id_klienta
  20. WHERE k1.id_klienta = k.id_klienta);
  21. zad.4 (wyświetlić pracowników bez podwładnych)
  22. SELECT * FROM pracownicy p
  23. WHERE p.id_pracownika NOT IN (
  24. SELECT p.id_szefa FROM pracownicy p);
  25. zad.5(nazwa wyrobu, cene i dochod laczny w poprzednim roku)
  26. SELECT wyroby.id_produktu, wyroby.opis, AVG(ceny.cena_cennikowa), SUM(wiersze_zamowien.wartosc) FROM zamowienia
  27. JOIN wiersze_zamowien ON zamowienia.id_zamowienia = wiersze_zamowien.id_zamowienia AND TO_CHAR(zamowienia.data_zamowienia, 'YYYY') = TO_CHAR(ADD_MONTHS('1991-01-01', -12), 'YYYY')
  28. RIGHT JOIN wyroby ON wyroby.id_produktu = wiersze_zamowien.id_produktu
  29. JOIN ceny ON ceny.id_produktu = wyroby.id_produktu
  30. GROUP BY wyroby.id_produktu, wyroby.opis;
  31. ####################
  32. STARE
  33.  
  34. ZESTAW 1
  35.  
  36. 1. Wstaw nowy rekord DO pracowników, a w nim swoje imię i nazwisko, dzisiejszą datę, a resztę według uznania.
  37.  
  38. INSERT INTO pracownicy
  39. VALUES    (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
  40.  
  41. 2. Pokaż wszystkich pracowników, którzy mają podwładnych
  42.  
  43. SELECT id_pracownika, nazwisko, imie
  44. FROM pracownicy
  45. WHERE id_pracownika IN (
  46.   SELECT id_szefa
  47.   FROM pracownicy
  48.   WHERE id_szefa IS NOT NULL
  49. );
  50.  
  51. 3. Pokaż średnie ceny dla wyrobów, nawet dla tych, które nie mają ceny.
  52.  
  53. SELECT w.opis, AVG(c.cena_cennikowa) AS "Srednia cena cennikowa", AVG (c.cena_minimalna) AS "średnia cena minimalna"
  54. FROM wyroby w
  55. left join ceny c ON c.id_produktu=w.id_produktu
  56. GROUP BY w.opis
  57. ORDER BY w.opis
  58.  
  59. 4. Podwoić limit kredytowy klientom, którzy w ciągu ostatniego miesiąca dokonali zamówień. (jakoś tak)
  60.  
  61. UPDATE klienci
  62. SET limit_kredytowy = limit_kredytowy*2
  63. WHERE id_klienta IN
  64. (
  65. SELECT id_klienta
  66. FROM zamowienia
  67. WHERE data_zamowienia > '90/10/19'
  68. );
  69.    
  70.  
  71. ZESTAW 2
  72.  
  73. 1. Dodać rekord ze swoimi danymi (imię, nazwisko a reszta dowolna)
  74.  
  75. INSERT INTO pracownicy
  76. VALUES    (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
  77.  
  78. 2. Wyświetlić zamówienia dla klientów nie z bostonu
  79.  
  80. SELECT k.id_klienta, k.miasto, z.id_zamowienia
  81. FROM klienci k
  82.   LEFT JOIN zamowienia z ON k.id_klienta = z.id_klienta
  83. WHERE k.miasto != 'BOSTON';
  84.  
  85.  
  86. 3. Wyświetlić ilość pracowników na poszczególnym etacie (+ te co nie ma żadnego pracownika)
  87.  
  88. SELECT COUNT(p.id_pracownika) AS "ilosc pracownikow" , e.etat
  89. FROM pracownicy p
  90. left join etaty e ON p.id_etatu = e.id_etatu
  91. GROUP BY e.etat
  92.  
  93. 4. Zwiększyć o 10% limit kredytowy klientom, którzy mają MIN. 3 zamówienia
  94.  
  95. UPDATE klienci
  96. SET limit_kredytowy = limit_kredytowy*0.1 + limit_kredytowy
  97. WHERE id_klienta IN
  98. (
  99. SELECT k.id_klienta
  100. FROM klienci k, zamowienia z
  101. WHERE z.id_klienta = k.id_klienta
  102. GROUP BY k.id_klienta
  103. HAVING COUNT(k.id_klienta) >= 3
  104. );
  105.  
  106. ZESTAW 3
  107.  
  108. 1. INSERT
  109.  
  110. INSERT INTO pracownicy
  111. VALUES    (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
  112.  
  113. 2. wskaż wydziały, które posiadają tylko jednego pracownika
  114.  
  115. SELECT w.nazwa, COUNT(p.id_wydzialu) AS "ilosc pracownikow"
  116. FROM pracownicy p, wydzialy w
  117. WHERE p.id_wydzialu=w.id_wydzialu
  118. GROUP BY w.nazwa
  119. HAVING COUNT(p.id_wydzialu) = 1
  120.  
  121.  
  122. 3. wskaż pracowników, który mają największe obroty (? coś takiego)
  123. SELECT p.id_pracownika, p.imie, p.nazwisko, SUM(z.wartosc) AS wartosc
  124. FROM pracownicy p
  125. join klienci k ON p.id_pracownika= k.id_pracownika
  126. join zamowienia z ON z.ID_KLIENTA = k.id_klienta
  127. GROUP BY p.id_pracownika, p.imie, p.nazwisko
  128. ORDER BY dupa DESC;
  129.  
  130.  
  131. 4. Podnieść płące pracowników, którzy mają więcej niż 2 klientów (nie pamiętam o ile)
  132.  
  133. UPDATE pracownicy
  134. SET pensja = pensja + 300
  135. WHERE id_pracownika IN
  136. (
  137. SELECT p.id_pracownika
  138. FROM pracownicy p, klienci k
  139. WHERE k.id_pracownika=p.id_pracownika
  140. GROUP BY p.id_pracownika
  141. HAVING COUNT(k.id_pracownika) > 2
  142. );
  143.  
  144.  
  145. ZESTAW 4
  146.  
  147. 1. INSERT
  148.  
  149. INSERT INTO pracownicy
  150. VALUES    (1234,'NAZWISKO','IMIE','Q',667,7902,TO_DATE('2016/07/05', 'YYYY/MM/DD'),800,NULL,20);
  151.  
  152. 2. Wyświetlić MAX i MIN zamówień dla poszczególnych klientow.
  153.  
  154. SELECT k.nazwa, MIN(z.wartosc) AS "MIN", MAX(Z.WARTOSC) AS "MAX"
  155. FROM ZAMOWIENIA Z, KLIENCI K
  156. WHERE k.id_klienta=Z.id_klienta
  157. GROUP BY K.NAZWA
  158.  
  159. 3. Wyświetlić miasto(chyba), nazwę klienta, ilość sprzedaży i średnią sprzedaży, coś w tym stylu
  160.  
  161. SELECT k.miasto, K.NAZWA, COUNT(Z.ID_ZAMOWIENIA), AVG(Z.WARTOSC)
  162. FROM ZAMOWIENIA Z, KLIENCI K
  163. WHERE k.id_klienta=Z.id_klienta
  164. GROUP BY K.MIASTO, K.NAZWA
  165.  
  166.  
  167. 4. Zwiększyć pensje pracowników w dziale "SALES" o 1%, jak dobrze pamiętam
  168.  
  169. UPDATE pracownicy
  170. SET pensja = pensja + pensja*0.01
  171. WHERE id_pracownika IN
  172. (
  173. SELECT p.id_pracownika
  174. FROM pracownicy p, wydzialy w
  175. WHERE p.id_wydzialu = w.id_wydzialu
  176. AND w.nazwa = 'SALES'
  177. );
  178.  
  179. ########################
  180. NOWE
  181.  
  182. --grupa A
  183. INSERT INTO pracownicy VALUES(40,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
  184.  
  185. SELECT s.id_siedziby,s.region,COUNT(w.id_wydzialu) FROM siedziby s
  186. join wydzialy w ON s.id_siedziby = w.id_siedziby
  187. GROUP BY s.id_siedziby,s.region  HAVING COUNT (w.id_wydzialu)<=1;
  188.  
  189. SELECT w.id_produktu,w.opis,c.cena_cennikowa,SUM(wz.wartosc) FROM wyroby w
  190. left join ceny c ON w.id_produktu = c.id_produktu
  191. left join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
  192. left join zamowienia z ON wz.ID_ZAMOWIENIA = z.id_zamowienia
  193. GROUP BY w.id_produktu,w.opis,c.cena_cennikowa;
  194.  
  195. UPDATE pracownicy
  196. SET pensja = pensja*0.95
  197. WHERE id_pracownika IN (
  198. SELECT p.id_pracownika FROM pracownicy p
  199. join klienci k ON p.id_pracownika = k.id_pracownika
  200. join zamowienia z ON k.id_klienta = z.ID_KLIENTA
  201. WHERE z.data_zamowienia <TO_DATE('1990/02/01','YY/MM/DD')
  202. AND z.data_zamowienia >TO_DATE('1990/01/01','YY/MM/DD')
  203. GROUP BY p.id_pracownika HAVING SUM(z.wartosc) < 500);
  204.  
  205. --grupa B
  206. INSERT INTO pracownicy VALUES (41,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
  207.  
  208. SELECT z.id_zamowienia,z.data_zamowienia,z.id_klienta FROM zamowienia z
  209. join wiersze_zamowien wz ON z.id_zamowienia = wz.id_zamowienia
  210. GROUP BY z.id_zamowienia,z.data_zamowienia,z.id_klienta HAVING COUNT(wz.id_zamowienia) = 1;
  211.  
  212. SELECT * FROM (SELECT w.id_produktu,w.opis FROM wyroby w
  213. join wiersze_zamowien wz ON w.id_produktu = wz.id_produktu
  214. GROUP BY w.id_produktu,w.opis
  215. ORDER BY COUNT(wz.id_produktu) DESC)
  216. WHERE ROWNUM <=3;
  217.  
  218. UPDATE pracownicy
  219. SET prowizja = prowizja *1.02
  220. WHERE
  221. id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
  222. join etaty e ON p.id_etatu = e.id_etatu
  223. WHERE e.etat ='SALESPERSON')
  224. AND
  225. id_pracownika IN (SELECT p.id_szefa FROM pracownicy p);
  226.  
  227. --grupa C
  228. INSERT INTO pracownicy VALUES (42,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
  229.  
  230. SELECT p.id_pracownika FROM pracownicy p
  231. MINUS
  232. SELECT p1.id_szefa FROM pracownicy p1;
  233. --mysle ze to wyzej wystarczy ale mozna to rozbudowac do postaci
  234. SELECT * FROM pracownicy
  235. WHERE id_pracownika IN (
  236. SELECT p.id_pracownika FROM pracownicy p
  237. MINUS
  238. SELECT p1.id_szefa FROM pracownicy p1);
  239.  
  240.  
  241. SELECT k.nazwa,COUNT(z.id_zamowienia),AVG(z.wartosc) FROM klienci k
  242. left join zamowienia z ON k.id_klienta = z.id_klienta
  243. GROUP BY k.miasto,k.nazwa;
  244.  
  245. UPDATE pracownicy
  246. SET prowizja = prowizja * 1.01
  247. WHERE id_pracownika IN(
  248. SELECT p.id_pracownika FROM pracownicy p
  249. join wydzialy w ON p.id_wydzialu = w.ID_wydzialu
  250. WHERE w.nazwa != 'SALES');
  251.  
  252. --grupa D
  253. INSERT INTO pracownicy VALUES(43,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
  254.  
  255. SELECT w.id_wydzialu,w.nazwa FROM wydzialy w
  256. left join pracownicy p ON p.id_wydzialu = w.ID_WYDZIALU
  257. GROUP BY w.id_wydzialu,w.nazwa HAVING COUNT(p.id_wydzialu) < 1;
  258.  
  259. SELECT * FROM (SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
  260. join etaty e ON p.id_etatu = e.id_etatu
  261. join wydzialy w ON p.id_wydzialu = w.id_wydzialu
  262. join klienci k ON p.id_pracownika = k.id_pracownika
  263. join zamowienia z ON k.id_klienta = z.id_klienta
  264. WHERE e.etat = 'SALESPERSON'
  265. GROUP BY p.nazwisko,p.imie,w.nazwa
  266. ORDER BY SUM(z.wartosc))
  267. WHERE ROWNUM <=1;
  268.  
  269. UPDATE pracownicy
  270. SET pensja = pensja * 1.1
  271. WHERE id_pracownika IN (SELECT p.id_pracownika FROM pracownicy p
  272. join klienci k ON p.id_pracownika = k.id_pracownika
  273. join etaty e ON p.id_etatu = e.id_etatu
  274. WHERE e.etat = 'SALESPERSON'
  275. GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta)>2);
  276.  
  277. --grupa E
  278. INSERT INTO klienci VALUES (44,'KRZYSZTOF JANICKI',NULL,NULL,NULL,NULL,NULL,NULL,7902,10,NULL);
  279. INSERT INTO klienci(id_klienta,nazwa,id_pracownika,limit_kredytowy) VALUES (45,'KRZYSZTOF JANICKI',7902,10);
  280.  
  281. SELECT  * FROM (
  282. SELECT p.id_pracownika,p.imie,p.nazwisko,p.pensja FROM pracownicy p
  283. ORDER BY p.pensja DESC)
  284. WHERE ROWNUM <=3;
  285.  
  286. SELECT * FROM(
  287. SELECT p.nazwisko,p.imie,w.nazwa,SUM(z.wartosc) AS obroty FROM pracownicy p
  288. join wydzialy w ON p.id_wydzialu = w.id_wydzialu
  289. join klienci k ON p.id_pracownika = k.id_pracownika
  290. join zamowienia z ON k.id_klienta = z.id_klienta
  291. join etaty e ON p.id_etatu = e.id_etatu
  292. WHERE e.etat = 'SALESPERSON'
  293. GROUP BY p.nazwisko,p.imie,w.nazwa
  294. ORDER BY SUM(z.wartosc) DESC)
  295. WHERE ROWNUM <=1;
  296.  
  297. UPDATE pracownicy
  298. SET prowizja = prowizja * 1.02
  299. WHERE id_pracownika IN(
  300. SELECT p.id_pracownika FROM pracownicy p
  301. join klienci k ON p.id_pracownika = k.id_pracownika
  302. GROUP BY p.id_pracownika HAVING COUNT(k.id_klienta) >=1);
  303.  
  304. --grupa F
  305. INSERT INTO pracownicy VALUES (46,'JANICKI','KRZYSZTOF','A',667,7902,SYSDATE,2000,200,20);
  306.  
  307. SELECT z.id_zamowienia,z.data_zamowienia FROM zamowienia z
  308. join klienci k ON z.id_klienta = k.id_klienta
  309. WHERE k.miasto = 'BOSTON';
  310.  
  311. SELECT e.id_etatu,e.etat,AVG(p.pensja) FROM etaty e
  312. left join pracownicy p ON e.id_etatu = p.id_etatu
  313. GROUP BY e.id_etatu,e.etat;
  314.  
  315. UPDATE klienci k
  316. SET k.limit_kredytowy = k.limit_kredytowy +10*(SELECT COUNT(z.id_zamowienia) FROM zamowienia z
  317. join klienci k1 ON z.id_klienta = k1.id_klienta
  318. WHERE k1.id_klienta = k.id_klienta);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement