Садржај
1.0 Базе: Увод у базе података
Шта су базе података?
Табеларна организација података
Повезане табеле
Базе и табеле - квиз
1.1 Базе: SQLite
SQLite и SQLite Studio
Креирање базе у SQLite Studio
SQLite и SQLite Studio - квиз
Креирање базе у SQLite Studio - задаци за вежбу
1.2 Базе: Дизајнирање базе података
База компаније за продају дигиталних композиција - подаци о композицијама
База компаније за продају дигиталних композиција - подаци о продаји
Дизајнирање базе података - квиз
2.0 - SQL: Читање података из базе
SQL: Читање података из табела
Читање података - квиз
2.1 SQL: Пројекција и селекција
Пројекција
Селекција
Пројекција и селекција - квиз
Пројекција и селекција - задаци (дневник)
2.2 SQL: Логички и релацијски оператори
Логички оператори
Релацијски оператори
Оператори - квиз
Оператори - задаци (дневник)
2.3 SQL: Изрази и функције - Додатно
Изрази
Функције
Изрази и функције - квиз
Изрази и функције - задаци (дневник)
2.4 SQL: Сортирање, уклањање дупликата, ограничавање броја врста
Сортирање
Ограничавање броја врста у резултату
Уклањање дупликата
Сортирање, уклањање дупликата, ограничавање одговора - квиз
Сортирање и ограничавање - задаци (дневник)
2.5 SQL: Агрегатне функције и груписање
Агрегатне функције
Груписање и израчунавање статистика појединачних група
Селекција након груписања
Агрегатне функције и груписање - квиз
Агрегатне функције и груписање - задаци (дневник)
2.6 SQL: Спајање табела
Спајање табела
Имплицитно спајање
Спајање и груписање
Врсте спајања
Спајање табела - квиз
Спајање - задаци (дневник)
2.7 SQL: Угнежђени упити
Угнежђени упити
Угнежђени упити - квиз
Угнежђени упити - задаци (дневник)
2.8 SQL: Сложенији угњеждени упити - Додатно
Корелисани подупити
Провера постојања
2.9 SQL: Погледи
Погледи
Погледи - квиз
Погледи - задаци (дневник)
3.0 SQL: Промена садржаја базе
Измене података у бази
3.1 SQL: Уписивање података у табеле
Уписивање података
Уписивање података прочитаних из базе
Уписивање података - квиз
3.2 SQL: Ажурирање података у табелама
Ажурирање података
Ажурирање података - квиз
3.3 SQL: Брисање података из табела
Брисање података
Брисање података - квиз

Погледи

Приметили смо да се неки упити често користе као основа за издвајање одређених података. На пример, често је потребно спојити две или више табела, да би се над спојеним табелама вршили различити даљи упити. На пример, приликом скоро сваке анализе изостанака врши се спајање табеле ученика и табеле изостанака, да би се над резултатом спајања вршиле даље анализе. На пример, резултат спајања нам је потребан да бисмо израчунали укупан број изостанака сваког ученика, али и да бисмо пронашли број неоправданих изостанака у сваком одељењу.

SELECT ucenik.id, ucenik.ime, ucenik.prezime, COUNT(*) AS broj_izostanaka
FROM izostanak JOIN
     ucenik ON izostanak.id_ucenik = ucenik.id
GROUP BY ucenik.id;

Извршавањем упита добија се следећи резултат:

id

ime

prezime

broj_izostanaka

1

Петар

Петровић

42

2

Милица

Јовановић

37

4

Петар

Миловановић

34

5

Ана

Пекић

8

6

Јован

Миленковић

27

SELECT razred, odeljenje, COUNT(*) AS broj_neopravdanih
FROM izostanak JOIN
     ucenik ON izostanak.id_ucenik = ucenik.id
WHERE izostanak.status = 'неоправдан'
GROUP BY razred, odeljenje;

Извршавањем упита добија се следећи резултат:

razred

odeljenje

broj_neopravdanih

1

1

35

1

2

49

1

3

39

2

1

71

2

2

37

База података која је могла у целости да се преузме раније током овог курса и отвори у систему SQLite Studio, већ у себи има креиран описан поглед.

https://petljamediastorage.blob.core.windows.net/root/Media/Default/Kursevi/OnlineNastava/kurs-gim-cetvrti-drustveni-inf/dnevnik_a.png

Системи за управљање базама података омогућавају да се често коришћени упити запамте као посебни погледи на базу података. Погледе можемо да схватимо као фиктивне табеле, које се у каснијим упитима SELECT могу користити као и све остале табеле. Погледи нису заиста сачувани у бази као табеле, већ се упит који их користи интегрише са упитом којим се поглед дефинише и тако добијени комбиновани упит се оптимизује и извршава. Погледи се могу користити само за читање података и упис података у поглед није могућ (јер погледи нису праве табеле). Креирање погледа врши се упитом наредног облика:

CREATE VIEW naziv_pogleda AS
  SELECT upit;

На пример, можемо креирати поглед izostanci_detaljno на следећи начин:

CREATE VIEW izostanci_detaljno AS
  SELECT izostanak.id,
         izostanak.id_ucenik,
         ucenik.ime,
         ucenik.prezime,
         ucenik.razred,
         ucenik.odeljenje,
         izostanak.datum,
         izostanak.status
  FROM izostanak JOIN
       ucenik ON izostanak.id_ucenik = ucenik.id;

Након тога, претходна два упита се могу извршити на следећи начин:

SELECT id, ime, prezime, COUNT(*) AS broj_izostanaka
FROM izostanci_detaljno
GROUP BY id_ucenik;

Извршавањем упита добија се следећи резултат:

id

ime

prezime

broj_izostanaka

1128

Петар

Петровић

42

1350

Милица

Јовановић

37

2140

Петар

Миловановић

34

2007

Ана

Пекић

8

2875

Јован

Миленковић

27

SELECT razred, odeljenje, COUNT(*) AS broj_neopravdanih
FROM izostanci_detaljno
WHERE status = 'неоправдан'
GROUP BY razred, odeljenje;

Извршавањем упита добија се следећи резултат:

razred

odeljenje

broj_neopravdanih

1

1

35

1

2

49

1

3

39

2

1

71

2

2

37

Угнежђени упити (ако нису корелисани) могу се избећи креирањем погледа за унутрашњи подупит (што нарочито има смисла ако се за унутрашњи упит очекује да може бити коришћен више пута). Разматрали смо већ упит који за свако одељење приказује највећи број оправданих изостанака и установили смо да је прво пожељно креирати табелу која за сваког ученика садржи идентификатор, разред и одељење и број оправданих изостанака. Њу можемо креирати као посебан поглед.

CREATE VIEW broj_opravdanih_izostanaka AS
  SELECT id_ucenik AS id, razred, odeljenje, COUNT(*) as broj_opravdanih
  FROM izostanci_detaljno
  WHERE status = 'оправдан'
  GROUP BY id_ucenik;

На основу овог погледа је веома једноставно одредити највећи број оправданих изостанака за свако одељење.

SELECT razred, odeljenje, MAX(broj_opravdanih)
FROM broj_opravdanih_izostanaka
GROUP BY razred, odeljenje;

Извршавањем упита добија се следећи резултат:

razred

odeljenje

MAX(broj_opravdanih)

1

1

55

1

2

67

1

3

60

2

1

53

2

2

60

Претходна лекција
Следећа лекција
A- A+
Тема
Темa

Prijavi problem


Obeleži sve kategorije koje odgovaraju problemu

Još detalja - opišite nam problem


Uspešno ste prijavili problem!
Status problema i sve dodatne informacije možete pratiti klikom na link.
Nažalost nismo trenutno u mogućnosti da obradimo vaš zahtev.
Molimo vas da pokušate kasnije.