Садржај
3.0 SQL: Промена садржаја базе
3.2 SQL: Ажурирање података у табелама
3.3 SQL: Брисање података из табела
7.0 Библиотека Flask - пројектни задатак

Провера постојања (EXISTS)

Некада желимо да издвојимо само оне врсте за које корелисани подупит враћа непразну (или празну) табелу тј. ако се утврди да постоји (или да не постоји) нека врста која задовољава услов корелисаног подупита. За то се може користити услов EXISTS (или NOT EXISTS, који је заправо само негација услова EXISTS).

Приказати имена ученика који имају неоправдане изостанке.

SELECT id, ime, prezime
FROM ucenik
WHERE EXISTS (SELECT *
              FROM izostanak
              WHERE izostanak.id_ucenik = ucenik.id AND status = 'неоправдан');

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

id

ime

prezime

1

Петар

Петровић

5

Ана

Пекић

6

Јован

Миленковић

8

Гордана

Сарић

9

Вања

Савић

Наравно, постоје и други начини да се овај упит реализује. На пример, можемо да спојимо табелу ученика и табелу изостанака, групишемо изостанке по свим ученицима, и прикажемо имена и презимена за сваку групу (приметимо да овде не примењујемо ни једну агрегатну функцију на формиране групе).

SELECT ucenik.id, ime, prezime
FROM ucenik JOIN
     izostanak on izostanak.id_ucenik = ucenik.id
WHERE status = 'неоправдан'
GROUP BY ucenik.id;

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

id

ime

prezime

1

Петар

Петровић

5

Ана

Пекић

6

Јован

Миленковић

8

Гордана

Сарић

9

Вања

Савић


У наредном проблему можемо да искористимо услов непостојања NOT EXISTS.

Приказати имена ученика који немају нерегулисаних изостанака.

SELECT id, ime, prezime
FROM ucenik
WHERE NOT EXISTS (SELECT *
                  FROM izostanak
                  WHERE izostanak.id_ucenik = ucenik.id AND status = 'нерегулисан');

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

id

ime

prezime

1

Петар

Петровић

2

Милица

Јовановић

3

Лидија

Петровић

5

Ана

Пекић

6

Јован

Миленковић

Вежба

Покушај да самостално напишеш наредни упит.

Прикажи идентификаторе и називе предмета из којих је уписана бар нека оцена на писменом задатку (употреби услов EXISTS).



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

SELECT DISTINCT p.id, p.naziv
FROM predmet p JOIN
     ocena o ON p.id = o.id_predmet
WHERE vrsta = 'писмени задатак'

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

id

naziv

1

Математика

2

Српски језик

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+