daily pastebin goal
40%
SHARE
TWEET

Untitled

a guest Jan 29th, 2018 51 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Nisam bio na vezbama i ne znam kako je Mirjana objasnila, ali mogu da objasnim kako ja resavam ove zadatke, pa ako se nekome ne svidja moj nacin, nek trazi dalje :D
  2.  
  3. Ovo je zadatak sa zadnjih vezbi, savetujem da kopiras kod u Data Studio pa da tamo citas i pratis objasnjenje jer ovde izgleda dosta razbacano.
  4.  
  5. Pre svega, rekurzija na VSTUD bazi moze da se primenjuje samo na tabelu USLOVNI_PREDMET tako da ce kod skoro uvek biti slican ovome.
  6. Pored toga, rekurzija je sablon koji izgleda ovako:
  7.  
  8. WITH NEKO_IME(NEKE_KOLONE) AS
  9. (
  10. INICIJALNI_SELECT
  11.  
  12. UNION ALL
  13.  
  14. ITERATIVNI_SELECT
  15. )
  16. GLAVNI_SELECT
  17.  
  18. Kao sto samo ime kaze INICIJALNI_SELECT je upit koji predstavlja pocetak rekurzije, u njemu podesavamo vrednosti od kojih se pocinje.
  19.  
  20. Kolona KORAK nam cesto nije potrebna al je stavljamo da bismo imali informaciju o dubini rekurzije u kojoj je dobijen neki red.
  21. U inicijalnom select-u nju stavimo na 0.
  22.  
  23. Posto nam se uvek traze uslovni predmeti nekog konkretnog predmeta(U ovom slucaju svih obaveznih sa I smera), kolona KOREN predstavlja bas taj predmed cije uslovne trazimo rekurzijom, njega cemo jednom podesiti u iterativnom select-u i kasnije ga kroz rekurziju necemo menjati kako bi nakon izvrsavanja rekurzije znali tacno koji obavezan predmet uslovljava koje uslovne. U ovom slucaju, za KOREN cemo postavi OP.ID_PREDMETA, odnosno obavezne predmete I smera.
  24.  
  25. ID_TRENUTNOG predstavlja trenutni predmet do kog smo dosli u rekurziji, u inicijalnom select-u, to ce biti isti predmet kao i KOREN, samo sto ce se kako idemo u rekurzijiu ID_TRENUTNOG menjati, dok KOREN nece.
  26.  
  27. ID_USLOVNOG predstavlja uslovne predmete od trenutnog predmeta do kog smo stigli (ID_TRENUTNOG), njega cemo u inicijalnom select-u postaviti bas na uslovne predmete KOREN-a jer je na samom pocetku KOREN taj trenutni predmet.
  28.  
  29. To je sve sto se tice inicijalnog select-a.
  30.  
  31. Nakon toga treba ispisati ITERATIVNI_SELECT.
  32.  
  33. U ITERATIVNO SELECT-U NE SME DA POSTOJI JOIN, SPAJANJE SE VRSI DEKARTOVIM PROIZVODOM A USLOVNOST SPAJANJA SE STAVLJA U WHERE.
  34.  
  35. Svaki put kada se izvrsi iterativni select, napredujemo dublje u rekurziju. Zbog toga KORAK povecavamo za 1 u svakom prolasku.
  36.  
  37. Kako nam KOREN predstavlja samo informaciju o predmetu za koji trazimo uslovne, njega kroz iterativni select ne menjamo.
  38.  
  39. Sada nam je samo preostalo da u iterativnom select-u napravimo pomeraj, tj da namestimo da ID_TRENUTNOG postane ID_USLOVNOG i da za ID_USLOVNOG nadjemo njegov uslovni i njega namestimo za novi ID_USLOVNOG.
  40.  
  41. To radimo tako sto na mesto gde je ID_TRENUTNOG sada u select-u stavimo ID_USLOVNOG, u WHERE-u nadjemo uslovni predmet tog naseg ID_USLOVNOG i njega prosledimo kao UP.ID_USLOVNOG za sledeci poziv.
  42.  
  43. To je sve sto se tice rekurzije, glavni upit najcesve samo spaja PREDMET sa nasom rekurzijom i vadi NAZIV-e.
  44.  
  45. Nadam se da je sada malo jasnije.
  46.  
  47. --3) Написати рекурзивaн SQL упит који за сваки обавезан предмет на смеру Информатика
  48. -- издваја предмете који морају да се положе пре полагања обавезног предмета и носе
  49. -- по 6 бодова. Издвојити назив обавезног предмета и назив условног предмета.
  50. -- Може се користити податак да је идентификатор смера Информатика 201.
  51.  
  52. WITH REKURZIJA(KORAK, KOREN, ID_TRENUTNOG, ID_USLOVNOG) AS
  53. (
  54. SELECT 0, --INICIJALNI
  55. OP.ID_PREDMETA,
  56. OP.ID_PREDMETA,
  57. UP.ID_USLOVNOG
  58. FROM OBAVEZAN_PREDMET OP
  59. JOIN USLOVNI_PREDMET UP ON OP.ID_PREDMETA = UP.ID_PREDMETA
  60. AND OP.ID_SMERA = 201
  61.  
  62. UNION ALL
  63.  
  64. SELECT KORAK + 1, --ITERATIVNI
  65. KOREN,
  66. R.ID_USLOVNOG,
  67. UP.ID_USLOVNOG
  68. FROM REKURZIJA R, USLOVNI_PREDMET UP
  69. WHERE R.ID_USLOVNOG = UP.ID_PREDMETA
  70. )
  71. SELECT P1.NAZIV, P2.NAZIV --GLAVNI
  72. FROM REKURZIJA R
  73. JOIN PREDMET P1 ON P1.ID_PREDMETA = R.KOREN
  74. JOIN PREDMET P2 ON P2.ID_PREDMETA = R.ID_USLOVNOG
  75. WHERE P2.BODOVI = 6
RAW Paste Data
Pastebin PRO WINTER Special!
Get 40% OFF Pastebin PRO accounts!
Top