SHARE
TWEET
Untitled
a guest
Jan 29th, 2018
51
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
- 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
- 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.
- Pre svega, rekurzija na VSTUD bazi moze da se primenjuje samo na tabelu USLOVNI_PREDMET tako da ce kod skoro uvek biti slican ovome.
- Pored toga, rekurzija je sablon koji izgleda ovako:
- WITH NEKO_IME(NEKE_KOLONE) AS
- (
- INICIJALNI_SELECT
- UNION ALL
- ITERATIVNI_SELECT
- )
- GLAVNI_SELECT
- Kao sto samo ime kaze INICIJALNI_SELECT je upit koji predstavlja pocetak rekurzije, u njemu podesavamo vrednosti od kojih se pocinje.
- Kolona KORAK nam cesto nije potrebna al je stavljamo da bismo imali informaciju o dubini rekurzije u kojoj je dobijen neki red.
- U inicijalnom select-u nju stavimo na 0.
- 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.
- 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.
- 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.
- To je sve sto se tice inicijalnog select-a.
- Nakon toga treba ispisati ITERATIVNI_SELECT.
- U ITERATIVNO SELECT-U NE SME DA POSTOJI JOIN, SPAJANJE SE VRSI DEKARTOVIM PROIZVODOM A USLOVNOST SPAJANJA SE STAVLJA U WHERE.
- Svaki put kada se izvrsi iterativni select, napredujemo dublje u rekurziju. Zbog toga KORAK povecavamo za 1 u svakom prolasku.
- Kako nam KOREN predstavlja samo informaciju o predmetu za koji trazimo uslovne, njega kroz iterativni select ne menjamo.
- 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.
- 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.
- To je sve sto se tice rekurzije, glavni upit najcesve samo spaja PREDMET sa nasom rekurzijom i vadi NAZIV-e.
- Nadam se da je sada malo jasnije.
- --3) Написати рекурзивaн SQL упит који за сваки обавезан предмет на смеру Информатика
- -- издваја предмете који морају да се положе пре полагања обавезног предмета и носе
- -- по 6 бодова. Издвојити назив обавезног предмета и назив условног предмета.
- -- Може се користити податак да је идентификатор смера Информатика 201.
- WITH REKURZIJA(KORAK, KOREN, ID_TRENUTNOG, ID_USLOVNOG) AS
- (
- SELECT 0, --INICIJALNI
- OP.ID_PREDMETA,
- OP.ID_PREDMETA,
- UP.ID_USLOVNOG
- FROM OBAVEZAN_PREDMET OP
- JOIN USLOVNI_PREDMET UP ON OP.ID_PREDMETA = UP.ID_PREDMETA
- AND OP.ID_SMERA = 201
- UNION ALL
- SELECT KORAK + 1, --ITERATIVNI
- KOREN,
- R.ID_USLOVNOG,
- UP.ID_USLOVNOG
- FROM REKURZIJA R, USLOVNI_PREDMET UP
- WHERE R.ID_USLOVNOG = UP.ID_PREDMETA
- )
- SELECT P1.NAZIV, P2.NAZIV --GLAVNI
- FROM REKURZIJA R
- JOIN PREDMET P1 ON P1.ID_PREDMETA = R.KOREN
- JOIN PREDMET P2 ON P2.ID_PREDMETA = R.ID_USLOVNOG
- WHERE P2.BODOVI = 6
RAW Paste Data

