13.07.2015 Views

1 Vježba 2: (SQL Server) Rješenja: Koristiti funkcije: - FESB

1 Vježba 2: (SQL Server) Rješenja: Koristiti funkcije: - FESB

1 Vježba 2: (SQL Server) Rješenja: Koristiti funkcije: - FESB

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2DATEADDFunkcija vraća datumkoji se dobije kada se nazadani datum dodaodređeni vremenskiinterval.DATEADD(datepart,number, date)datepart - parametar kojim se određuje na koji diodatuma se želi dodati odgovarajući iznos.Za vrijednost ovog argumenta navodi seneka od konstanti: year, month, day, week.number - iznos koji se dodaje, cjelobrojan podatakdate - datum koji se mijenja, odnosno kojem se želidodati određena vrijednost. Mora biti tipa datetimeili smalldatetime.Rješenja:1.a)SELECT STUDENT.PREZIME, STUDENT.IME, STUDENT.dat_rodenja,YEAR(STUDENT.dat_rodenja) as YEAR,MONTH(STUDENT.dat_rodenja) as MONTH,DAY(STUDENT.dat_rodenja) as DAYFROM STUDENT1.b)SELECT PREZIME, IME , DAT_UPISA,DATEADD(YEAR,7, DAT_UPISA) as ‘Datum isteka’FROM STUDENTWHERE DATEADD(YEAR,7, DAT_UPISA) < GETDATE()IliSELECT PREZIME, IME , DAT_UPISA,DAT_ISTEKA=DATEADD(YEAR,7, DAT_UPISA)FROM STUDENTWHERE DATEDIFF(YEAR, DAT_UPISA, GETDATE()) >= 72.a)SELECT STUDENT.PREZIME, STUDENT.IME, STUDENT.dat_rodenja, tren_status_imeFROM STUDENT join tren_status on STUDENT.tren_status_id = tren_status.tren_status_id2.b)SELECT STUDENT.PREZIME, STUDENT.IME, STUDENT.dat_rodenja,case when STUDENT.tren_status_id = 1 then 'Studira'else 'Ne studira'endFROM STUDENT join tren_status on STUDENT.tren_status_id = tren_status.tren_status_id3.b)select predmet.PREDMET_ID, IME_PREDMETA , avg(ocjena)from predmet join upisuje on predmet.predmet_id = upisuje.predmet_idwhere dat_polaganja between '2005-01-01' and '2005-12-31'group by predmet.PREDMET_ID, IME_PREDMETA3.c)select prezime, ime, tren_status_ime, ISNULL(jmbg, 'NN'),CASE WHEN MONTH(dat_upisa) = 9 then 'Redovno upisan'ELSE 'Naknadno upisan'ENDfrom student join tren_status on student.tren_status_id = tren_status.tren_status_id4.a)Select prezime + ' ' + imefrom student join upisni_list on student.student_id = upisni_list.student_idwhere ind_upisa_id = 2and sk_god = '2005/06'4.b)select prezime + ' ' + ime, ime_predmeta, ocjena, semfrom student join upisni_list on student.student_id = upisni_list.student_idjoin upisuje on upisni_list.ulist_id = upisuje.ulist_idjoin predmet on upisuje.predmet_id = predmet.predmet_idwhere ind_upisa_id = 2and sk_god = '2005/06'422.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2Vježba 4:(<strong>SQL</strong> <strong>Server</strong>)1.a) Ispisati šifru i naziv svih mjesta koja nemaju poštanski broj.b) Ispisati naziv i šifru svih obrazovnih programa kojima šifra započinje brojem 7(koristiti naredbu BETWEEN).c) Ispisati podatke o studentu (koristiti funkciju CONVERT, Dodatak 1.) u obliku:d) Ispisati sve predmete koji započinju sa riječi 'Programiranje'.e) Ispisati predmete koji se ne nalaze u tablici nastavnih planova.2.a) Napisati SELECT naredbu koja pronalazi sve predmete koji pripadaju ispitnoj grupi 1 ili 6.b) Proširiti SELECT pod a) tako da daje rezultat kao u tablici. Pretpostavka je da se predmeti ispitnegrupe 1 i 6 polažu ponedjeljkom, 2 i 7 utorkom itd. (koristiti naredbu CASE, Dodatak 3.)c) Kreirati VIEW STUD_PRED nad tablicama STUDENT, UPISNI_LIST,UPISUJE i PREDMET koji se sastoji od naziva predmeta, imena,prezimena i mat. broja studenta te školske godine i semestra kada jepredmet upisan.Napraviti upit koji iz kreiranog view-a vraća sve podatke za predmet'Baze podataka'.Pogled se definira sa:CREATE VIEW ime ASSELECT ...select query3.a) Napisati SELECT naredbu koja vraća prezime i ime studenta, matični broj, ocjenu i naziv predmeta,i to samo za studente koji su položili pojedini predmet. Rezultat upita sortirati po matičnom broju.b) Na osnovu a) napraviti novu naredbu koja vraća prosjek ocjena (2 decimale) za pojedinog studenta.Napomena za b):- ne treba koristiti tablicu PREDMET,- za prosjek ocjena koristiti agregatnu funkciju AVG(),- kako je ocjena tipa integer to će i prosjek biti integer te treba koristiti CONVERT,- agregatne <strong>funkcije</strong> se koriste uz naredbu GROUP BY.4. Navedena je SELECT naredba kojom se mogu dobiti rezultati pretraživanja tablica STUDENT i MJESTOpovezanih sa dvije veze (dva relationship-a) preko alias naziva za tablicu MJESTO, te rezultat tog selekta:SELECT ime, prezime, mjesto_rod, M_ROD.ime_mjesta, mjesto_stan, M_STAN.ime_mjestaFROM STUDENT JOIN MJESTO M_ROD ON STUDENT.mjesto_rod = M_ROD.mjesto_idJOIN MJESTO M_STAN ON STUDENT.mjesto_stan = M_STAN.mjesto_idorder by prezime522.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2Također koristeći alias za tablicu NASTAVNIK koja je u dvostrukoj vezi sa tablicomNASTAVNI_PLAN napisati SELECT naredbu (za obraz. program 450 i šk. godinu 2008/09) kojadaje ovakav rezultat:……DODATAK 1:Using CONVERT:CONVERT ( data_type [ ( length ) ] , expression [ , style ] )Arguments:expressionIs any valid Microsoft® <strong>SQL</strong> <strong>Server</strong> expression.data_typeIs the target system-supplied data type.lengthIs an optional parameter of nchar, nvarchar, char, varchar, binary, or varbinary data types.styleIs the style of date format used to convert datetime or smalldatetime data to character data (nchar, nvarchar,char, varchar, nchar, or nvarchar data types), or the string format when converting float, real, money, orsmallmoney data to character data (nchar, nvarchar, char, varchar, nchar, or nvarchar data types).<strong>SQL</strong> <strong>Server</strong> supports the date format in Arabic style, using Kuwaiti algorithm.In the table, the two columns on the left represent the style values for datetime or smalldatetime conversion tocharacter data.Add 100 to a style value to get a four-place year that includes the century (yyyy).Without century (yy) With century (yyyy) Standard Input/Output- 0 or 100 (*) Default mon dd yyyy hh:miAM (orPM)1 101 USA mm/dd/yy2 102 ANSI yy.mm.dd3 103 British/French dd/mm/yy4 104 German dd.mm.yy5 105 Italian dd-mm-yy6 106 - dd mon yy.........622.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2DODATAK 2: Model baze podataka:Rješenja:1.a.select mjesto_id, ime_mjestafrom mjestowhere post_br IS NULL1.b.select ime + ', ' + ime_oca + ', '+ prezime as 'Ime, ime oca, prezime' ,CONVERT(varchar(10),dat_upisa, 104) as 'Upisan', matbr as 'Mat. broj'from student1.c.select ime + ', ' + ime_oca + ', ' + prezime, convert(varchar(10),dat_upisa,104), matbrfrom student1.d.select * from predmetwhere left(ime_predmeta,13) = 'programiranje'1.e.select * from predmetwhere not exists (select * from nastavni_planwhere nastavni_plan.predmet_id = predmet.predmet_id)722.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2ili2.a.select * from predmetwhere ispitna_grupa in (1, 6)select * from predmetwhere ispitna_grupa = 1 or ispitna_grupa = 62.b.select ime_predmeta , ' polaže se u ' +casewhen ispitna_grupa IN (1,6) then 'ponedjeljak'when ispitna_grupa IN (2,7) then 'utorak'when ispitna_grupa IN (3,8) then 'srijedu'when ispitna_grupa IN (4,9) then 'èetvrtak'when ispitna_grupa IN (5,10) then 'petak'end as 'dan u tjednu'from predmet2.c.create view STUD_PRED asselect ime_predmeta, ime, prezime, matbr, sk_god, semfrom student join upisni_list on student.student_id = upisni_list.student_idjoin upisuje on upisni_list.ulist_id = upisuje.ulist_idjoin predmet on upisuje.predmet_id = predmet.predmet_idselect * from STUD_PREDwhere ime_predmeta = 'Baze podataka'3.a)select prezime, ime, matbr, ocjena, ime_predmetafrom student join upisni_list on student.student_id = upisni_list.student_idjoin upisuje on upisni_list.ulist_id = upisuje.ulist_idjoin predmet on predmet.predmet_id = upisuje.predmet_idwhere ocjena IS NOT NULLorder by 33.b)select prezime, ime, matbr, avg(convert(decimal(15,2),ocjena))from student join upisni_list on student.student_id = upisni_list.student_idjoin upisuje on upisni_list.ulist_id = upisuje.ulist_idwhere ocjena IS NOT NULLgroup by prezime, ime, matbrorder by 34.select ime_predmeta as 'Predmet',predavac.nastavnik_prezime + ' ' + predavac.nastavnik_ime as 'Predavaè',sati_pred as 'Sati pred.',asistent.nastavnik_prezime + ' ' + asistent.nastavnik_ime as 'Asistent',convert(char(1),sati_av) + '/' + convert(char(1),sati_lab) as 'Vj. (aud/lab)'from predmet join nastavni_plan on predmet.predmet_id = nastavni_plan.predmet_idjoin nastavnik predavacon nastavni_plan.nastavnik1_id = predavac.nastavnik_idjoin nastavnik asistenton nastavni_plan.nastavnik2_id = asistent.nastavnik_idwhere sk_god = '2008/09' and obr_prog_id = 450822.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2Vježba 5:(<strong>SQL</strong> <strong>Server</strong>)1. a) Ispisati šifru i naziv svih mjesta koja nemaju poštanski broj.b) Ispisati sve studente kojima je ime Ante ili Jure ili Tanja i stanuju u Splitu.c) Ispisati sve predmete koji imaju 3 ili više sati predavanja.d) Ispisati sve predmete koji imaju auditorne ili laboratorijske vježbe.Kako izgleda upit ako uvjet postrožimo i kažemo 'ili samo auditorne ili samo laboratorijske vježbe'?2. a) Prikazati šifru i naziv obrazovnih programa koji nije upisao niti jedan student.b) Prikazati šifru i naziv obrazovnih programa koji nisu u nastavnom planu.c) Zadatke a) i b) riješiti pomoću UNION naredbe (jedna SELECT naredba).3. Navedena je SELECT naredba kojom se mogu dobiti rezultati pretraživanja tablica STUDENT i MJESTOpovezanih sa dvije veze (dva relationship-a) preko alias naziva za tablicu MJESTO, te rezultat tog selekta:SELECT student_id, ime, prezime, mjesto_rod, M_ROD.ime_mjesta,mjesto_stan, M_STAN.ime_mjestaFROM STUDENT JOIN MJESTO M_ROD ON STUDENT.mjesto_rod = M_ROD.mjesto_idJOIN MJESTO M_STAN ON STUDENT.mjesto_stan = M_STAN.mjesto_idorder by prezimea) Također koristeći alias za tablicu NASTAVNIK koja je u dvostrukoj vezi sa tablicomNASTAVNI_PLAN napisati SELECT naredbu (za obraz. program 450 i šk. godinu 2008/09) kojadaje ovakav rezultat:……b) Kako ovaj zadatak rješiti preko UNION naredbe?Napomena: Umjesto 5 kolona bit će 3, za svaki predmet po dvije kolone.4. Napraviti view V_STUDENT koji daje podatke kako je navedeno na slici(uputa: prvo konstruirati SELECT naredbu, testirati je, pa onda generirati view):… nastavak tablice na idućoj stranici…922.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 25. Iz view-a V_STUDENT (zadatak 2.) i tablice NASTAVNIK napisati SELECT naredbu koja daje rezultatkao u donjem prozoru:<strong>Koristiti</strong> UNION i string <strong>funkcije</strong>:LEFT( niz_znakova, n )RIGHT( niz_znakova, n )LEN( niz_znakova )SUBSTRING( niz_znakova, start, n )CHARINDEX( traženi_niz, pretraživani_niz )DODATAK 1: Model baze podataka:1022.11.2010


Fakultet elektrotehnike, strojarstva i brodogradnje BAZE PODATAKA 2Rješenje:3a:select ime_predmeta as 'Predmet',predavac.nastavnik_prezime + ' ' + predavac.nastavnik_ime as 'Predavaè',sati_pred as 'Sati pred.',asistent.nastavnik_prezime + ' ' + asistent.nastavnik_ime as 'Asistent',convert(char(1),sati_av) + '/' + convert(char(1),sati_lab) as 'Vj. (aud/lab)'from predmet join nastavni_plan on predmet.predmet_id = nastavni_plan.predmet_idjoin nastavnik predavacon nastavni_plan.nastavnik1_id = predavac.nastavnik_idjoin nastavnik asistenton nastavni_plan.nastavnik2_id = asistent.nastavnik_idwhere sk_god = '2008/09' and obr_prog_id = 4503b:select ime_predmeta as 'Predmet', nastavnik.nastavnik_prezime + ' ' +nastavnik.nastavnik_ime as 'Nastavnik',convert(char(1),sati_pred) as 'Sati', 1 as redosljedfrom predmet join nastavni_plan on predmet.predmet_id = nastavni_plan.predmet_idjoin nastavnik on nastavni_plan.nastavnik1_id = nastavnik.nastavnik_idUNIONselect ime_predmeta, nastavnik.nastavnik_prezime + ' ' + nastavnik.nastavnik_ime,convert(char(1),sati_av) + '/' + convert(char(1),sati_lab), 2from predmet join nastavni_plan on predmet.predmet_id = nastavni_plan.predmet_idjoin nastavnik on nastavni_plan.nastavnik2_id = nastavnik.nastavnik_idorder by 1, 44:SELECT STUDENT.student_id, STUDENT.prezime + ' ' + STUDENT.ime as [Student],STUDENT.ime_oca, STUDENT.JMBG, STUDENT.dat_rodenja,MJESTO.ime_mjesta AS [Stanuje u], STUDENT.adresa,MJESTO1.ime_mjesta AS [Roden u],STUDENT.dat_upisa, STUDENT.matbr,TREN_STATUS.tren_status_ime,STUDENT.mjesto_rod, STUDENT.mjesto_stan,TREN_STATUS.tren_status_idFROM STUDENT JOIN MJESTO ON STUDENT.mjesto_stan = MJESTO.mjesto_idJOIN MJESTO MJESTO1 ON STUDENT.mjesto_rod = MJESTO1. mjesto_idJOIN TREN_STATUS ONSTUDENT.tren_status_id = TREN_STATUS.tren_status_id5:SELECT LEFT(Student, CHARINDEX(' ', Student)+1) + '. - student'AS 'Naziv - funkcija'FROM V_STUDENTUNIONSELECT nastavnik_prezime + ' ' + LEFT(nastavnik_ime,1) + '. - nastavnik'FROM NASTAVNIKORDER BY 11122.11.2010

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!