1. Prikazati spojeno ime i prezime, kao i grad za sve polaznike čije se
prezime završava na „lovic“ i koji imaju manje od 29 godina.
SELECT (IME ||' '|| PREZIME) AS "IME I PREZIME", GRAD
FROM POLAZNIK
WHERE LOWER(PREZIME) LIKE '%lovic'
########################################################
2. Prikazati ID i naziv kursa i jezik (format jezika videti na slici)
za sve kurseve koji se slušaju na engleskom jeziku i koji su se
završili (održali) pre više od 9 godina.
NAPOMENA: Zahtev realizovati korišćenjem podupita.
SELECT KURSID, NAZIVKURSA, SUBSTR(JEZIK,1,3) ||'.' AS JEZIK
FROM KURS
WHERE JEZIK LIKE 'engleski' AND KURSID IN (SELECT KURSID
FROM TERMIN
WHERE DATUMOD + INTERVAL '9' YEAR < SYSDATE);
########################################################
3. Prikazati broj kurseva i broj različitih oblasti po jezicima na kojima se slušaju.
U rezultatu ne treba prikazivati
kurseve koji se slušaju na srpskom jeziku i koji imaju tri ili više različitih oblasti.
SELECT COUNT(*) AS BROJ_KURSEVA, COUNT(DISTINCT OBLAST) AS BROJ_OBLASTI
FROM KURS
WHERE JEZIK NOT LIKE 'srp%'
GROUP BY JEZIK HAVING COUNT(DISTINCT OBLAST) < 3
########################################################
4.Prikazati id kursa, naziv kursa i broj različitih predavača za
sve kurseve čija je najmanja cena veća od svih
prosečnih cena kurseva čiji termini se održavaju u učionici B020.
SELECT K.KURSID, K.NAZIVKURSA, COUNT(DISTINCT T.PREDAVAC)
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
GROUP BY K.KURSID, K.NAZIVKURSA
HAVING MIN(T.CENA) > (SELECT AVG(T1.CENA)
FROM TERMIN T1
WHERE T1.BROJUCIONICE = 'B020');
########################################################
5. Prikazati id kursa, datum početka termina i naziv kursa i broj
prijavljenih kandidata po terminu, broj ispravnih
prijava (prijava pre početka termina) i broj
neispravnih prijava (prijava posle početka termina) za sve kurseve
jezika.
SELECT K.KURSID, T.DATUMOD, K.NAZIVKURSA, COUNT(*) AS BROJ_PRIJAVLJENIH,
SUM(CASE WHEN P.DATUMPRIJAVE < T.DATUMOD THEN 1 ELSE 0 END) AS BROJ_ISPRAVNIH,
SUM(CASE WHEN P.DATUMPRIJAVE > T.DATUMOD THEN 1 ELSE 0 END) AS BROJ_NEISPRAVNIH
FROM TERMIN T JOIN KURS K ON K.KURSID = T.KURSID
JOIN PRIJAVA P ON (T.DATUMOD,T.KURSID) = (P.DATUMOD,P.KURSID)
WHERE K.OBLAST = 'Programiranje'
GROUP BY K.KURSID, T.DATUMOD, K.NAZIVKURSA;
########################################################
6. Pronaći šifre svih kurseva koji se mogu dobiti kao
gratis kursevi za kurs ‘C#’ (uzeti u obzir i gratis kurseve
njegovog gratis kursa itd.).
WITH GRATIS_KURSEVI(GRATIS_KURS) AS
(
SELECT KURSGRATIS
FROM KURS
WHERE NAZIVKURSA = 'Programiranje u C#'
UNION ALL
SELECT KURSGRATIS
FROM KURS K JOIN GRATIS_KURSEVI GK ON K.KURSID = GK.GRATIS_KURS
WHERE KURSGRATIS IS NOT NULL
)
SELECT *
FROM GRATIS_KURSEVI
########################################################
7. Prikazati ime, prezime polaznika, cenu termina i inicijale
imena i prezimena predavača za koji se polaznik
odlučio, kao i to da li je polazniku prošao rođendan u tekućoj
godini za sve polaznike koji imaju više od 26 ipo godina.
I NACIN:
SELECT PO.IME, PO.PREZIME, T.CENA,
CONCAT(SUBSTR(P.IME,1,1),SUBSTR(P.PREZIME,1,1)) AS INICIJALI,
CASE
WHEN EXTRACT(MONTH FROM DATUMRODJENJA) < EXTRACT(MONTH FROM SYSDATE)
OR EXTRACT(DAY FROM DATUMRODJENJA) <= EXTRACT(DAY FROM SYSDATE)
AND EXTRACT(MONTH FROM DATUMRODJENJA) = EXTRACT(MONTH FROM SYSDATE)
THEN 'PROSAO RODJENDAN'
ELSE 'NIJE PROSAO RODJENDAN'
END AS RODJENDAN
FROM POLAZNIK PO JOIN PRIJAVA PR ON PO.POLAZNIKID = PR.POLAZNIKID
JOIN TERMIN T ON (PR.DATUMOD,PR.KURSID) = (T.DATUMOD,T.KURSID)
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE MONTHS_BETWEEN(SYSDATE, PO.DATUMRODJENJA)/12 > 26.5;
---------------------------------------------------------
II NACIN:
SELECT PO.IME, PO.PREZIME, T.CENA,
CONCAT(SUBSTR(P.IME,1,1),SUBSTR(P.PREZIME,1,1)) AS INICIJALI,
CASE
WHEN EXTRACT(MONTH FROM DATUMRODJENJA) < EXTRACT(MONTH FROM SYSDATE)
THEN 'PROSAO RODJENDAN'
WHEN EXTRACT(MONTH FROM DATUMRODJENJA) > EXTRACT(MONTH FROM SYSDATE)
THEN 'NIJE PROSAO RODJENDAN'
WHEN EXTRACT(DAY FROM DATUMRODJENJA) <= EXTRACT(DAY FROM SYSDATE)
THEN 'PROSAO RODJENDAN'
ELSE 'NIJE PROSAO RODJENDAN'
END AS RODJENDAN
FROM POLAZNIK PO JOIN PRIJAVA PR ON PO.POLAZNIKID = PR.POLAZNIKID
JOIN TERMIN T ON (PR.DATUMOD,PR.KURSID) = (T.DATUMOD,T.KURSID)
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE MONTHS_BETWEEN(SYSDATE, PO.DATUMRODJENJA)/12 > 26.5;
########################################################
8. Prikazati naziv kurseva i broj termina za kurseve za sve termine
koji imaju gratis kurs i čija je minimalna cena
manja od svih cena termina čije su prijave
realizovane u septembru ili oktobru.
SELECT K.NAZIVKURSA, COUNT(*) AS BROJ_TERMINA
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
WHERE K.KURSGRATIS IS NOT NULL
GROUP BY K.NAZIVKURSA
HAVING MIN(T.CENA) < (SELECT MIN(T.CENA)
FROM TERMIN T JOIN PRIJAVA PR ON (T.KURSID,T.DATUMOD)=(PR.KURSID,PR.DATUMOD)
WHERE EXTRACT(MONTH FROM PR.DATUMPRIJAVE) IN (9,10));
########################################################
9.Prikazati id kursa, id predavača, ukupne cene termina
prema predavačima i kursevima, ali i zbirno prema
kursevima, kao i ukupnu cenu svih termina za termine
u kojima ime predavača počinje na slovo J.
SELECT K.KURSID, T.PREDAVAC, SUM(T.CENA)
FROM KURS K JOIN TERMIN T ON K.KURSID = T.KURSID
JOIN PREDAVAC P ON T.PREDAVAC = P.PREDAVACID
WHERE P.IME LIKE 'J%'
GROUP BY ROLLUP( K.KURSID, T.PREDAVAC)