Advertisement
Guest User

Untitled

a guest
Mar 21st, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 23.76 KB | None | 0 0
  1. --2.2 Wyszukiwanie informacji
  2.  
  3. --a) Podać listę przedmiotów.
  4. SELECT id_przed, Nazwa FROM PRZEDMIOT;
  5.  
  6. --b) Wyświetlić listę studentów z grupy o nazwie „Grupa 2”.
  7. SELECT nr_albumu, nazwisko FROM STUDENT,GRUPA
  8. WHERE grupa.nr_gr = student.nr_gr
  9. AND grupa.nazwa LIKE 'Grupa 2';
  10.  
  11. SELECT nr_albumu,nazwisko FROM STUDENT
  12. INNER JOIN GRUPA ON grupa.nr_gr = student.nr_gr
  13. AND grupa.nazwa LIKE 'Grupa 2';
  14.  
  15. --c) Podać do jakie grupy należy każdy student, dane posortować według nazwy grupy.
  16. SELECT student.nr_albumu,student.nazwisko,student.nr_gr,grupa.nazwa FROM STUDENT,GRUPA
  17. WHERE grupa.nr_gr = student.nr_gr
  18. ORDER BY grupa.nazwa;
  19.  
  20. SELECT student.nr_albumu,student.nazwisko,student.nr_gr,grupa.nazwa FROM STUDENT
  21. INNER JOIN GRUPA ON grupa.nr_gr = student.nr_gr
  22. ORDER BY grupa.nazwa;
  23.  
  24. --d) Podać jaki nauczyciel uczy jakiego przedmiotu.
  25. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa
  26. FROM WYKLADOWCA,PRO_ZAJ,PRZEDMIOT
  27. WHERE wykladowca.nr_wykl = pro_zaj.nr_wykl
  28. AND pro_zaj.id_przed = przedmiot.id_przed;
  29.  
  30. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa
  31. FROM WYKLADOWCA
  32. INNER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  33. INNER JOIN PRZEDMIOT ON pro_zaj.id_przed = przedmiot.id_przed;
  34.  
  35. --e) Podać jakie przedmioty prowadzi każdy nauczyciel.
  36. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa
  37. FROM WYKLADOWCA,PRO_ZAJ,PRZEDMIOT
  38. WHERE wykladowca.nr_wykl = pro_zaj.nr_wykl(+) AND pro_zaj.id_przed = przedmiot.id_przed(+);
  39.  
  40. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa
  41. FROM WYKLADOWCA
  42. LEFT OUTER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  43. LEFT OUTER JOIN PRZEDMIOT ON pro_zaj.id_przed = przedmiot.id_przed;
  44.  
  45. --f) Podać na jakie zajęcia chodzą poszczególne grupy (dane posortować według nazwy grupy, nazwy przedmiotu).
  46. SELECT grupa.nr_gr,grupa.nazwa,przedmiot.id_przed,przedmiot.nazwa
  47. FROM GRUPA,PRZEDMIOT,GR_ZAJ
  48. WHERE grupa.nr_gr = gr_zaj.nr_gr
  49. AND przedmiot.id_przed = gr_zaj.id_przed
  50. ORDER BY grupa.nazwa,przedmiot.nazwa;
  51.  
  52. SELECT grupa.nr_gr,grupa.nazwa,przedmiot.id_przed,przedmiot.nazwa
  53. FROM GRUPA
  54. INNER JOIN GR_ZAJ ON grupa.nr_gr = gr_zaj.nr_gr
  55. INNER JOIN PRZEDMIOT ON przedmiot.id_przed = gr_zaj.id_przed
  56. ORDER BY grupa.nazwa,przedmiot.nazwa;
  57.  
  58. --g) Podać jakich przedmiotów uczą wykładowcy ze stopniem doktora.
  59. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa
  60. FROM PRZEDMIOT,WYKLADOWCA,PRO_ZAJ
  61. WHERE wykladowca.nr_wykl = pro_zaj.nr_wykl
  62. AND przedmiot.id_przed = pro_zaj.id_przed
  63. AND wykladowca.stopien = 'dr';
  64.  
  65. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa
  66. FROM PRZEDMIOT
  67. INNER JOIN PRO_ZAJ ON przedmiot.id_przed = pro_zaj.id_przed
  68. INNER JOIN WYKLADOWCA ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  69. AND wykladowca.stopien = 'dr';
  70.  
  71. --h) Dla każdego przedmiotu podać przez jakiego nauczyciela są wykładane.
  72. SELECT przedmiot.id_przed,przedmiot.nazwa,wykladowca.nr_wykl,wykladowca.nazwisko
  73. FROM PRZEDMIOT,PRO_ZAJ,WYKLADOWCA
  74. WHERE pro_zaj.id_przed(+) = przedmiot.id_przed AND wykladowca.nr_wykl(+) = pro_zaj.nr_wykl;
  75.  
  76. SELECT przedmiot.id_przed,przedmiot.nazwa,wykladowca.nr_wykl,wykladowca.nazwisko
  77. FROM PRZEDMIOT
  78. LEFT OUTER JOIN PRO_ZAJ ON przedmiot.id_przed = pro_zaj.id_przed
  79. LEFT OUTER JOIN WYKLADOWCA ON wykladowca.nr_wykl = pro_zaj.nr_wykl;
  80.  
  81. --i) Podać jakich przedmiotów nikt nie prowadzi.
  82. SELECT przedmiot.id_przed,przedmiot.nazwa
  83. FROM PRZEDMIOT WHERE NOT EXISTS
  84. (SELECT pro_zaj.id_przed
  85. FROM PRO_ZAJ WHERE przedmiot.id_przed = pro_zaj.id_przed);
  86.  
  87. --j) Podać na jakie zajęcia prowadzone przez wykładowców nie chodzi żadna grupa.
  88. --UPDATE GR_ZAJ SET nr_gr = NULL WHERE id_przed = 9;
  89. --UPDATE GR_ZAJ SET nr_gr = NULL WHERE id_przed = 8;
  90.  
  91. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa
  92. FROM PRZEDMIOT,GR_ZAJ
  93. WHERE EXISTS (SELECT DISTINCT gr_zaj.id_przed, przedmiot.nazwa
  94. FROM GR_ZAJ WHERE przedmiot.id_przed = gr_zaj.id_przed AND gr_zaj.nr_gr IS NULL)
  95. AND EXISTS (SELECT DISTINCT gr_zaj.nr_wykl FROM WYKLADOWCA,GR_ZAJ WHERE wykladowca.nr_wykl = gr_zaj.nr_wykl);
  96.  
  97. --k) Podać na jakie przedmioty nie chodzi żaden student.
  98. --UPDATE GR_ZAJ SET nr_gr = NULL WHERE id_przed = 9;
  99. --UPDATE GR_ZAJ SET nr_gr = NULL WHERE id_przed = 8;
  100.  
  101. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa
  102. FROM PRZEDMIOT,GR_ZAJ,STUDENT
  103. WHERE NOT EXISTS (SELECT przedmiot.id_przed, przedmiot.nazwa FROM GR_ZAJ,STUDENT
  104. WHERE przedmiot.id_przed = gr_zaj.id_przed AND gr_zaj.nr_gr IS NOT NULL AND student.nr_gr = gr_zaj.nr_gr);
  105.  
  106. --l) Podać jaki nauczyciel nie uczy żadnego przedmiotu.
  107. SELECT wykladowca.nr_wykl, wykladowca.nazwisko
  108. FROM WYKLADOWCA WHERE NOT EXISTS
  109. (SELECT PRO_ZAJ.NR_WYKL FROM PRO_ZAJ
  110. WHERE WYKLADOWCA.NR_WYKL = PRO_ZAJ.NR_WYKL);
  111.  
  112. --m) Podać na jakie zajęcia chodzi każda grupa.
  113.  
  114. --INSERT INTO GR_ZAJ VALUES(1,2,2,'400');
  115. --INSERT INTO GR_ZAJ VALUES(1,2,4,'400');
  116. --DELETE GR_ZAJ WHERE Sala = '400';
  117.  
  118. SELECT przedmiot.id_przed, przedmiot.nazwa FROM PRZEDMIOT,GR_ZAJ,GRUPA
  119. WHERE przedmiot.id_przed = gr_zaj.id_przed AND grupa.nr_gr = gr_zaj.nr_gr
  120. GROUP BY przedmiot.id_przed, przedmiot.nazwa HAVING COUNT(grupa.nr_gr)=(SELECT COUNT(grupa.nr_gr) FROM GRUPA);
  121.  
  122. SELECT przedmiot.id_przed, przedmiot.nazwa FROM PRZEDMIOT
  123. INNER JOIN gr_zaj ON przedmiot.id_przed = gr_zaj.id_przed
  124. INNER JOIN grupa ON grupa.nr_gr = gr_zaj.nr_gr
  125. GROUP BY przedmiot.id_przed, przedmiot.nazwa HAVING COUNT(grupa.nr_gr)=(SELECT COUNT(grupa.nr_gr) FROM GRUPA);
  126.  
  127. --n) Podać nazwy przedmiotów które odbywają się w sali 405.
  128. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa FROM PRZEDMIOT
  129. WHERE EXISTS(SELECT gr_zaj.id_przed FROM GR_ZAJ
  130. WHERE przedmiot.id_przed = gr_zaj.id_przed AND gr_zaj.sala = '405');
  131.  
  132. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa FROM PRZEDMIOT
  133. INNER JOIN GR_ZAJ ON przedmiot.id_przed = gr_zaj.id_przed
  134. AND gr_zaj.sala = '405';
  135.  
  136. --o) Podać listę studentów którzy mają zajęcia w sali 405.
  137. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT
  138. WHERE EXISTS(SELECT gr_zaj.nr_gr FROM GR_ZAJ
  139. WHERE student.nr_gr = gr_zaj.nr_gr AND gr_zaj.sala = '405');
  140.  
  141. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT
  142. INNER JOIN GR_ZAJ ON student.nr_gr = gr_zaj.nr_gr AND gr_zaj.sala = '405';
  143.  
  144. --p) Podać listę studentów którzy nie mają zajęć w sali 405.
  145. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT
  146. WHERE NOT EXISTS(SELECT gr_zaj.nr_gr FROM GR_ZAJ
  147. WHERE student.nr_gr = gr_zaj.nr_gr AND gr_zaj.sala = '405');
  148.  
  149. --q) Podać listę studentów którzy chodzą na przedmiot o nazwie FIZYKA.
  150. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT,GR_ZAJ,PRZEDMIOT
  151. WHERE student.nr_gr = gr_zaj.nr_gr AND przedmiot.id_przed = gr_zaj.id_przed AND przedmiot.nazwa = 'FIZYKA';
  152.  
  153. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT
  154. INNER JOIN GR_ZAJ ON student.nr_gr = gr_zaj.nr_gr
  155. INNER JOIN PRZEDMIOT ON przedmiot.id_przed = gr_zaj.id_przed
  156. AND przedmiot.nazwa = 'FIZYKA';
  157.  
  158. --r) Podać na jakie zajęcia chodzą studenci o imieniu Astor.
  159. SELECT DISTINCT przedmiot.id_przed,przedmiot.nazwa FROM PRZEDMIOT,GR_ZAJ,STUDENT
  160. WHERE student.nr_gr = gr_zaj.nr_gr AND przedmiot.id_przed = gr_zaj.id_przed
  161. AND student.imie = 'Astor';
  162.  
  163. SELECT DISTINCT przedmiot.id_przed,przedmiot.nazwa FROM PRZEDMIOT
  164. INNER JOIN GR_ZAJ ON przedmiot.id_przed = gr_zaj.id_przed
  165. INNER JOIN STUDENT ON student.nr_gr = gr_zaj.nr_gr AND student.imie = 'Astor';
  166.  
  167. --s) Podać nazwiska studentów których uczy mgr Bwyk.
  168. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT,GR_ZAJ,PRO_ZAJ,WYKLADOWCA
  169. WHERE pro_zaj.nr_wykl = gr_zaj.nr_wykl AND student.nr_gr = gr_zaj.nr_gr
  170. AND wykladowca.nr_wykl = pro_zaj.nr_wykl AND wykladowca.nazwisko = 'Bwyk';
  171.  
  172. SELECT DISTINCT student.nr_albumu, student.nazwisko, student.imie FROM STUDENT
  173. INNER JOIN GR_ZAJ ON student.nr_gr = gr_zaj.nr_gr
  174. INNER JOIN PRO_ZAJ ON pro_zaj.nr_wykl = gr_zaj.nr_wykl
  175. INNER JOIN WYKLADOWCA ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  176. AND wykladowca.nazwisko = 'Bwyk';
  177.  
  178.  
  179. --2.3 Agregacja danych
  180.  
  181. --a) Podać ile każdy wykładowca prowadzi przedmiotów.
  182. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,COUNT(pro_zaj.id_przed) AS ILOSC
  183. FROM WYKLADOWCA,PRO_ZAJ
  184. WHERE pro_zaj.nr_wykl(+) = wykladowca.nr_wykl
  185. GROUP BY wykladowca.nr_wykl,wykladowca.nazwisko;
  186.  
  187. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,COUNT(pro_zaj.id_przed) AS ILOSC
  188. FROM WYKLADOWCA
  189. LEFT OUTER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  190. GROUP BY wykladowca.nr_wykl,wykladowca.nazwisko;
  191.  
  192. --b) Podać nazwy grup dla których grupa.liczba_st <> zliczona ilość wierszy.
  193. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, COUNT(STUDENT.NR_GR) AS "ZLICZONA ILOSC WIERSZY"
  194. FROM STUDENT,GRUPA
  195. WHERE student.nr_gr = grupa.nr_gr
  196. GROUP BY grupa.nr_gr, grupa.nazwa,grupa.liczba_st HAVING COUNT(STUDENT.NR_GR) <> GRUPA.LICZBA_ST;
  197.  
  198. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, "ZLICZONA ILOSC WIERSZY"
  199. FROM GRUPA
  200. INNER JOIN (SELECT student.nr_gr, COUNT(student.nr_gr) AS "ZLICZONA ILOSC WIERSZY"
  201. FROM STUDENT GROUP BY student.nr_gr)x ON x.nr_gr = grupa.nr_gr
  202. AND GRUPA.LICZBA_ST <> "ZLICZONA ILOSC WIERSZY";
  203.  
  204. --c) Podać z iloma grupami każdy wykładowca ma zajęcia.
  205. SELECT wykladowca.nr_wykl, wykladowca.nazwisko, COUNT(gr_zaj.nr_gr) AS "ILOSC GRUP"
  206. FROM WYKLADOWCA,GR_ZAJ
  207. WHERE gr_zaj.nr_wykl(+) = wykladowca.nr_wykl
  208. GROUP BY wykladowca.nr_wykl, wykladowca.nazwisko;
  209.  
  210. SELECT wykladowca.nr_wykl, wykladowca.nazwisko, "ILOSC GRUP"
  211. FROM WYKLADOWCA
  212. LEFT OUTER JOIN (SELECT gr_zaj.nr_wykl,COUNT(gr_zaj.nr_gr) AS "ILOSC GRUP"
  213. FROM GR_ZAJ GROUP BY gr_zaj.nr_wykl)x ON x.nr_wykl = wykladowca.nr_wykl;
  214.  
  215. --d) Podać ile każdy student ma przedmiotów.
  216. SELECT student.nr_albumu, student.nazwisko, COUNT(gr_zaj.id_przed) AS "ILOSC PRZEDMIOTOW"
  217. FROM STUDENT,GR_ZAJ
  218. WHERE gr_zaj.nr_gr(+) = student.nr_gr
  219. GROUP BY student.nr_albumu, student.nazwisko ORDER BY student.nr_albumu;
  220.  
  221. SELECT student.nr_albumu, student.nazwisko, "ILOSC PRZEDMIOTOW"
  222. FROM STUDENT
  223. LEFT OUTER JOIN
  224. (SELECT gr_zaj.nr_gr, COUNT(gr_zaj.id_przed) AS "ILOSC PRZEDMIOTOW"
  225. FROM GR_ZAJ GROUP BY gr_zaj.nr_gr)x ON x.nr_gr = student.nr_gr;
  226.  
  227. --e) Podać ilu studentów uczęszcza na każdy przedmiot.
  228. SELECT przedmiot.id_przed, przedmiot.nazwa, COUNT(student.nr_albumu) AS "ILOSC STUDENTOW"
  229. FROM STUDENT,PRZEDMIOT,GR_ZAJ
  230. WHERE gr_zaj.id_przed(+) = przedmiot.id_przed  AND student.nr_gr(+) = gr_zaj.nr_gr
  231. GROUP BY przedmiot.id_przed, przedmiot.nazwa;
  232.  
  233. SELECT DISTINCT przedmiot.id_przed, przedmiot.nazwa,COUNT(student.nr_albumu) AS "ILOSC STUDENTOW"
  234. FROM PRZEDMIOT
  235. LEFT OUTER JOIN GR_ZAJ ON gr_zaj.id_przed = przedmiot.id_przed
  236. LEFT OUTER JOIN STUDENT ON student.nr_gr = gr_zaj.nr_gr
  237. GROUP BY przedmiot.id_przed, przedmiot.nazwa;
  238.  
  239. --f) Podać liczbą studentów w grupach.
  240. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, COUNT(STUDENT.NR_GR) AS "ZLICZONA ILOSC WIERSZY"
  241. FROM STUDENT,GRUPA
  242. WHERE student.nr_gr(+)=grupa.nr_gr
  243. GROUP BY grupa.nr_gr, grupa.nazwa,grupa.liczba_st;
  244.  
  245. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, "ZLICZONA ILOSC WIERSZY"
  246. FROM GRUPA
  247. LEFT OUTER JOIN (SELECT student.nr_gr, COUNT(student.nr_gr) AS "ZLICZONA ILOSC WIERSZY"
  248. FROM STUDENT GROUP BY student.nr_gr)x ON x.nr_gr = grupa.nr_gr;
  249.  
  250. --g) Podać nazwy grup dla których grupa.liczba_st = zliczona ilość wierszy.
  251. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, COUNT(STUDENT.NR_GR) AS "ZLICZONA ILOSC WIERSZY"
  252. FROM STUDENT,GRUPA
  253. WHERE student.nr_gr(+) = grupa.nr_gr
  254. GROUP BY grupa.nr_gr, grupa.nazwa,grupa.liczba_st HAVING COUNT(STUDENT.NR_GR) = GRUPA.LICZBA_ST;
  255.  
  256. SELECT grupa.nr_gr, grupa.nazwa, grupa.liczba_st, SUM(STUDENT.NR_GR) AS "ZLICZONA ILOSC WIERSZY"
  257. FROM GRUPA
  258. LEFT OUTER JOIN STUDENT ON student.nr_gr = grupa.nr_gr
  259. GROUP BY grupa.nr_gr, grupa.nazwa,grupa.liczba_st HAVING SUM(STUDENT.NR_GR) = GRUPA.LICZBA_ST;
  260.  
  261. --h) Podać średnią ocenę każdego studenta z każdego przedmiotu.
  262. SELECT student.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa,
  263. ROUND(AVG(zaliczenie.ocena),2) AS SREDNIA FROM STUDENT,PRZEDMIOT,ZALICZENIE
  264. WHERE zaliczenie.nr_albumu(+)=student.nr_albumu AND przedmiot.id_przed(+) = zaliczenie.id_przed
  265. GROUP BY student.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa;
  266.  
  267. SELECT student.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa, SREDNIA
  268. FROM STUDENT
  269. LEFT OUTER JOIN (SELECT zaliczenie.nr_albumu,zaliczenie.id_przed,ROUND(AVG(zaliczenie.ocena),2) AS SREDNIA
  270. FROM ZALICZENIE GROUP BY zaliczenie.nr_albumu,zaliczenie.id_przed)x ON x.nr_albumu = student.nr_albumu
  271. LEFT OUTER JOIN PRZEDMIOT ON x.id_przed = przedmiot.id_przed;
  272.  
  273. --i) Podać nazwę przedmiotu którego najwięcej studentów nie zaliczyło w pierwszym terminie.
  274. SELECT przedmiot.id_przed,przedmiot.nazwa FROM PRZEDMIOT
  275. LEFT OUTER JOIN (SELECT zaliczenie.id_przed, COUNT(zaliczenie.nr_albumu) AS x FROM ZALICZENIE
  276. WHERE EXISTS (SELECT z.termin FROM ZALICZENIE z WHERE z.termin > 1 AND z.id_przed = zaliczenie.id_przed)
  277. AND zaliczenie.termin = (SELECT MAX(z.termin) FROM ZALICZENIE z WHERE z.id_przed = zaliczenie.id_przed)
  278. GROUP BY zaliczenie.id_przed)y ON y.id_przed = przedmiot.id_przed
  279. WHERE x = (SELECT MAX(x) FROM (SELECT zaliczenie.id_przed, COUNT(zaliczenie.nr_albumu) AS x FROM ZALICZENIE
  280. WHERE EXISTS (SELECT z.termin FROM ZALICZENIE z WHERE z.termin > 1 AND z.id_przed = zaliczenie.id_przed)
  281. AND zaliczenie.termin = (SELECT MAX(z.termin) FROM ZALICZENIE z WHERE z.id_przed = zaliczenie.id_przed)
  282. GROUP BY zaliczenie.id_przed));
  283.  
  284. --j) Podać ostatnią ocenę każdego studenta z każdego przedmiotu (według termin).
  285. SELECT DISTINCT zaliczenie.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena FROM ZALICZENIE,STUDENT,PRZEDMIOT
  286. WHERE student.nr_albumu(+) = zaliczenie.nr_albumu AND przedmiot.id_przed(+) = zaliczenie.id_przed AND zaliczenie.termin = (SELECT MAX(z.termin) FROM ZALICZENIE z
  287. WHERE z.id_przed = zaliczenie.id_przed AND z.nr_albumu = zaliczenie.nr_albumu);
  288.  
  289. SELECT DISTINCT zaliczenie.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena FROM ZALICZENIE
  290. LEFT OUTER JOIN STUDENT ON student.nr_albumu = zaliczenie.nr_albumu
  291. LEFT OUTER JOIN PRZEDMIOT ON przedmiot.id_przed = zaliczenie.id_przed
  292. WHERE zaliczenie.termin = (SELECT MAX(z.termin) FROM ZALICZENIE z
  293. WHERE z.id_przed = zaliczenie.id_przed AND z.nr_albumu = zaliczenie.nr_albumu);
  294.  
  295. --k) Podać w której sali odbywa się najwięcej zajęć.
  296. SELECT sala FROM (SELECT gr_zaj.sala, COUNT(gr_zaj.id_przed) AS x
  297. FROM GR_ZAJ GROUP BY gr_zaj.sala)
  298. WHERE x IN (SELECT MAX(x) FROM (SELECT gr_zaj.sala, COUNT(gr_zaj.id_przed) AS x
  299. FROM GR_ZAJ GROUP BY gr_zaj.sala));
  300.  
  301. --l) Podać ile każdy prowadzący z każdego przedmiotu postawił jakich ocen.
  302. SELECT DISTINCT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa,zaliczenie.ocena,
  303. COUNT(zaliczenie.ocena) AS ILOSC FROM WYKLADOWCA,PRZEDMIOT,ZALICZENIE,PRO_ZAJ
  304. WHERE pro_zaj.nr_wykl(+) = wykladowca.nr_wykl AND przedmiot.id_przed(+) = pro_zaj.id_przed
  305. AND zaliczenie.id_przed(+) = pro_zaj.id_przed  GROUP BY wykladowca.nr_wykl, wykladowca.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena;
  306.  
  307. SELECT DISTINCT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa,zaliczenie.ocena,
  308. COUNT(zaliczenie.ocena) AS ILOSC FROM WYKLADOWCA
  309. LEFT OUTER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  310. LEFT OUTER JOIN PRZEDMIOT ON przedmiot.id_przed = pro_zaj.id_przed
  311. LEFT OUTER JOIN ZALICZENIE ON zaliczenie.id_przed = pro_zaj.id_przed
  312. GROUP BY wykladowca.nr_wykl, wykladowca.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena;
  313.  
  314. --m) Podać ile każdy prowadzący z każdego przedmiotu w każdym terminie postawił jakich ocen.
  315. SELECT DISTINCT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa,zaliczenie.ocena,zaliczenie.termin,
  316. COUNT(zaliczenie.ocena) AS ILOSC FROM WYKLADOWCA,PRZEDMIOT,ZALICZENIE,PRO_ZAJ
  317. WHERE pro_zaj.nr_wykl(+) = wykladowca.nr_wykl AND przedmiot.id_przed(+) = pro_zaj.id_przed AND zaliczenie.id_przed(+) = pro_zaj.id_przed
  318. GROUP BY wykladowca.nr_wykl, wykladowca.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena,zaliczenie.termin;
  319.  
  320. SELECT DISTINCT wykladowca.nr_wykl,wykladowca.nazwisko,przedmiot.id_przed,przedmiot.nazwa,zaliczenie.ocena,zaliczenie.termin,
  321. COUNT(zaliczenie.ocena) AS ILOSC FROM WYKLADOWCA
  322. LEFT OUTER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  323. LEFT OUTER JOIN PRZEDMIOT ON przedmiot.id_przed = pro_zaj.id_przed
  324. LEFT OUTER JOIN ZALICZENIE ON zaliczenie.id_przed = pro_zaj.id_przed
  325. GROUP BY wykladowca.nr_wykl, wykladowca.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena,zaliczenie.termin;
  326.  
  327. --n) Podać dane studenta który ma najlepszą średnią ocen.
  328. SELECT nr_albumu, nazwisko FROM (SELECT student.nr_albumu,student.nazwisko,ROUND(AVG(zaliczenie.ocena),2) AS x FROM STUDENT,ZALICZENIE
  329. WHERE student.nr_albumu = zaliczenie.nr_albumu GROUP BY student.nr_albumu,student.nazwisko)
  330. WHERE x IN (SELECT MAX(x) FROM (SELECT ROUND(AVG(zaliczenie.ocena),2) AS x FROM STUDENT,ZALICZENIE
  331. WHERE student.nr_albumu = zaliczenie.nr_albumu GROUP BY student.nr_albumu));
  332.  
  333. SELECT nr_albumu, nazwisko FROM (SELECT student.nr_albumu,student.nazwisko,ROUND(AVG(zaliczenie.ocena),2) AS x FROM STUDENT
  334. INNER JOIN ZALICZENIE ON student.nr_albumu = zaliczenie.nr_albumu GROUP BY student.nr_albumu,student.nazwisko)
  335. WHERE x IN (SELECT MAX(x) FROM (SELECT ROUND(AVG(zaliczenie.ocena),2) AS x FROM STUDENT INNER JOIN ZALICZENIE
  336. ON student.nr_albumu = zaliczenie.nr_albumu GROUP BY student.nr_albumu));
  337.  
  338. --o) Podać ilu studentów w każdym terminie zaliczyło każdy przedmiot.
  339. SELECT przedmiot.id_przed,przedmiot.nazwa,zaliczenie.termin,COUNT(zaliczenie.nr_albumu) AS ILOSC
  340. FROM PRZEDMIOT,ZALICZENIE,STUDENT
  341. WHERE przedmiot.id_przed = zaliczenie.id_przed AND student.nr_albumu = zaliczenie.nr_albumu
  342. GROUP BY przedmiot.id_przed,przedmiot.nazwa,zaliczenie.termin;
  343.  
  344. SELECT przedmiot.id_przed,przedmiot.nazwa,zaliczenie.termin,COUNT(zaliczenie.nr_albumu) AS ILOSC
  345. FROM PRZEDMIOT
  346. LEFT OUTER JOIN ZALICZENIE ON przedmiot.id_przed = zaliczenie.id_przed
  347. LEFT OUTER JOIN STUDENT ON student.nr_albumu = zaliczenie.nr_albumu
  348. GROUP BY przedmiot.id_przed,przedmiot.nazwa,zaliczenie.termin;
  349.  
  350. --p) Podać dla każdego typu przedmiotu ilu studentów uzyskało jaką ocenę.
  351. SELECT przedmiot.typ, zaliczenie.ocena, COUNT(zaliczenie.nr_albumu) AS "LICZBA STUDENTOW"
  352. FROM PRZEDMIOT,ZALICZENIE,STUDENT
  353. WHERE przedmiot.id_przed = zaliczenie.id_przed AND student.nr_albumu = zaliczenie.nr_albumu
  354. GROUP BY przedmiot.typ, zaliczenie.ocena;
  355.  
  356. SELECT przedmiot.typ, zaliczenie.ocena, COUNT(zaliczenie.nr_albumu) AS "LICZBA STUDENTOW"
  357. FROM PRZEDMIOT
  358. LEFT OUTER JOIN ZALICZENIE ON przedmiot.id_przed = zaliczenie.id_przed
  359. LEFT OUTER JOIN STUDENT ON student.nr_albumu = zaliczenie.nr_albumu
  360. GROUP BY przedmiot.typ, zaliczenie.ocena;
  361.  
  362. --q) Podać dzień w którym odbyło się najwięcej zaliczeń.
  363. SELECT DATA FROM (SELECT TO_CHAR(zaliczenie.data,'dd.mm.yyyy') AS DATA,COUNT(zaliczenie.id_przed) AS x
  364. FROM ZALICZENIE GROUP BY TO_CHAR(zaliczenie.data,'dd.mm.yyyy'))
  365. WHERE x IN (SELECT MAX(x) FROM (SELECT TO_CHAR(zaliczenie.data,'dd.mm.yyyy') AS DATA,COUNT(zaliczenie.id_przed) AS x
  366. FROM ZALICZENIE GROUP BY TO_CHAR(zaliczenie.data,'dd.mm.yyyy')));  
  367.  
  368. --r) Podać dzień tygodnia w który odbyło się najwięcej zaliczeń (poniedziałek, wtorek itd.).
  369. SELECT DZIEN_TYGODNIA FROM (SELECT TO_CHAR(zaliczenie.data,'day') AS DZIEN_TYGODNIA,COUNT(zaliczenie.id_przed) AS x
  370. FROM ZALICZENIE GROUP BY TO_CHAR(zaliczenie.data,'day'))
  371. WHERE x IN (SELECT MAX(x) FROM (SELECT TO_CHAR(zaliczenie.data,'day') AS y,COUNT(zaliczenie.id_przed) AS x
  372. FROM ZALICZENIE GROUP BY TO_CHAR(zaliczenie.data,'day')));  
  373.  
  374. --s) Podać dzień tygodnia, w którym było postawione najwięcej ocen niedostatecznych.
  375. SELECT DZIEN_TYGODNIA FROM (SELECT TO_CHAR(zaliczenie.data,'day') AS DZIEN_TYGODNIA,COUNT(zaliczenie.ocena) AS x
  376. FROM ZALICZENIE WHERE zaliczenie.ocena = 2 GROUP BY TO_CHAR(zaliczenie.data,'day'));
  377.  
  378. --t) Podać dane wykładowców prowadzących więcej niż dwa przedmioty.
  379. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,COUNT(pro_zaj.id_przed) AS "LICZBA PRZEDMIOTOW"
  380. FROM WYKLADOWCA,PRO_ZAJ,PRZEDMIOT
  381. WHERE wykladowca.nr_wykl = pro_zaj.nr_wykl AND przedmiot.id_przed = pro_zaj.id_przed
  382. GROUP BY wykladowca.nr_wykl,wykladowca.nazwisko HAVING COUNT(pro_zaj.id_przed)>2;
  383.  
  384. SELECT wykladowca.nr_wykl,wykladowca.nazwisko,COUNT(pro_zaj.id_przed) AS "LICZBA PRZEDMIOTOW"
  385. FROM WYKLADOWCA
  386. INNER JOIN PRO_ZAJ ON wykladowca.nr_wykl = pro_zaj.nr_wykl
  387. INNER JOIN PRZEDMIOT ON przedmiot.id_przed = pro_zaj.id_przed
  388. GROUP BY wykladowca.nr_wykl,wykladowca.nazwisko HAVING COUNT(pro_zaj.id_przed)>2;
  389.  
  390. --u) Podać dane o przedmiotach na które chodzi więcej niż 5 studentów.
  391. SELECT przedmiot.id_przed,przedmiot.nazwa,COUNT(gr_zaj.nr_gr) AS "LICZBA STUDENTOW"
  392. FROM PRZEDMIOT,GR_ZAJ,STUDENT
  393. WHERE przedmiot.id_przed = gr_zaj.id_przed AND student.nr_gr = gr_zaj.nr_gr
  394. GROUP BY przedmiot.id_przed,przedmiot.nazwa HAVING COUNT(gr_zaj.nr_gr) > 5;
  395.  
  396. SELECT przedmiot.id_przed,przedmiot.nazwa,COUNT(gr_zaj.nr_gr) AS "LICZBA STUDENTOW"
  397. FROM PRZEDMIOT
  398. INNER JOIN GR_ZAJ ON przedmiot.id_przed = gr_zaj.id_przed
  399. INNER JOIN STUDENT ON student.nr_gr = gr_zaj.nr_gr
  400. GROUP BY przedmiot.id_przed,przedmiot.nazwa HAVING COUNT(gr_zaj.nr_gr) > 5;
  401.  
  402. --2.4 Wstawianie danych.
  403.  
  404. --a) Utwórz widok imiona, który będzie zawierał listę imion studentów.
  405. CREATE OR REPLACE VIEW imiona AS
  406.   SELECT DISTINCT student.imie FROM STUDENT ORDER BY student.imie;
  407. --SELECT * FROM imiona;
  408.  
  409. --b) Utwórz tabele imiona_w. Wpisz do niej imiona wszystkich wykładowców.
  410. CREATE TABLE imiona_w AS SELECT DISTINCT IMIE FROM WYKLADOWCA;
  411. --SELECT * FROM imiona_w;
  412.  
  413. --c) Napisz zapytanie, które każdemu studentowi, który jeszcze nie ma zaliczenia z przedmiotu fizyka,
  414. --   wpisze je w trzecim terminie ocena 3, z dzisiejszą datą.
  415. INSERT INTO ZALICZENIE SELECT DISTINCT 1,nr_albumu,3,SYSDATE,3 FROM STUDENT
  416. WHERE NOT EXISTS (SELECT zaliczenie.nr_albumu FROM zaliczenie
  417. WHERE zaliczenie.nr_albumu = student.nr_albumu AND zaliczenie.id_przed = 1) ORDER BY nr_albumu;
  418.  
  419. --d) Napisz zapytanie które studentom z grupy o nazwie „grupa 1” usunie zaliczenia z przedmiotu o nazwie polski.
  420. DELETE FROM ZALICZENIE WHERE EXISTS (SELECT student.nr_albumu FROM STUDENT,GRUPA
  421. WHERE student.nr_gr(+) = grupa.nr_gr AND zaliczenie.nr_albumu = student.nr_albumu AND grupa.nazwa = 'Grupa 1')
  422. AND EXISTS (SELECT przedmiot.id_przed FROM PRZEDMIOT WHERE zaliczenie.id_przed = przedmiot.id_przed
  423. AND przedmiot.nazwa = 'POLSKI');
  424.  
  425. --e) Utwórz widok zal_stu_2, który będzie zawierał informacje o zaliczeniach studenta.
  426. --   [Nr_albumu, nazwisko, id_przed, nazwa, typ, ocena]
  427. --   Ocena – ostatnia ocena z zaliczenia
  428. CREATE OR REPLACE VIEW zal_stu_2 AS
  429.   SELECT  zaliczenie.nr_albumu, student.nazwisko, przedmiot.id_przed, przedmiot.nazwa, zaliczenie.ocena FROM ZALICZENIE
  430.   LEFT OUTER JOIN STUDENT ON student.nr_albumu = zaliczenie.nr_albumu
  431.   LEFT OUTER JOIN PRZEDMIOT ON przedmiot.id_przed = zaliczenie.id_przed
  432.   WHERE zaliczenie.termin = (SELECT MAX(z.termin) FROM ZALICZENIE z
  433.   WHERE z.id_przed = zaliczenie.id_przed AND z.nr_albumu = zaliczenie.nr_albumu);
  434. --SELECT * FROM zal_stu_2;
  435.  
  436. --f) Utwórz widok zal_stu_1, który będzie zawierał informacje o zaliczeniach studenta.
  437. --   [Nr_albumu, nazwisko, id_przed, nazwa, typ, ocena]
  438. --   Ocena – średnia ocen z zaliczenia
  439. CREATE OR REPLACE VIEW zal_stu_1 AS
  440.   SELECT student.nr_albumu,student.nazwisko,przedmiot.id_przed,przedmiot.nazwa,przedmiot.typ,
  441.   ROUND(AVG(zaliczenie.ocena),2) AS ocena FROM STUDENT,ZALICZENIE,PRZEDMIOT
  442.   WHERE student.nr_albumu = zaliczenie.nr_albumu AND przedmiot.id_przed = zaliczenie.id_przed
  443.   GROUP BY student.nr_albumu,student.nazwisko,przedmiot.id_przed,przedmiot.nazwa,przedmiot.typ
  444.   ORDER BY student.nr_albumu,przedmiot.id_przed;
  445. --SELECT * FROM zal_stu_1;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement