Изрази¶
Након SELECT
се најчешће наводе само називи колона, међутим,
могуће је употребити и сложеније изразе који у себи укључују и
вредности прочитане из одговарајућих колона. Изрази се граде применом
оператора (аритметичких, попут +
, -
, *
, /
, %
али и
других) и библиотечких функција на називе колона и константне
вредности (бројеве, константне ниске и слично). Тиме заправо
пресликавамо вредности прочитане из колона табела применом
одговарајућих функција. Илуструјмо ово кроз неколико примера.
Аритметички оператори имају своје уобичајено значење. Оператор дељења
/
када се примени на податке целобројног типа означава целобројно
дељење, док се оператором %
означава остатак при дељењу
(нпр. вредност израза 14 / 4
је 3
, а израза 14 % 4
је
2
).
Приказати годишњи фонд часова за сваки предмет (претпоставља се да школска година има 37 радних недеља).
SELECT naziv, razred, 37 * fond
FROM predmet;
Извршавањем упита добија се следећи резултат:
naziv |
razred |
37 * fond |
---|---|---|
Математика |
1 |
148 |
Српски језик |
1 |
148 |
Рачунарство и информатика |
1 |
74 |
Математика |
2 |
185 |
Психологија |
2 |
74 |
… |
… |
… |
Уместо назива колоне fond
наведен је израз 37 * fond
који
подразумева да се вредност прочитана из колоне fond
помножи са 37.
Приметимо да колона са годишњим фондом нема неко илустративно име. То
можемо да променимо коришћењем тзв. алијаса, тако што ћемо колони
променити име коришћењем кључне речи AS
.
SELECT naziv, razred, 37 * fond AS godisnji_fond
FROM predmet;
Извршавањем упита добија се следећи резултат:
naziv |
razred |
godisnji_fond |
---|---|---|
Математика |
1 |
148 |
Српски језик |
1 |
148 |
Рачунарство и информатика |
1 |
74 |
Математика |
2 |
185 |
Психологија |
2 |
74 |
… |
… |
… |
Изрази могу да буду и део услова приликом селекције, тј. могу да се
наводе и у склопу клаузуле WHERE
.
Приказати оне предмете код којих је годишњи фонд часова једнак 74.
SELECT *
FROM predmet
WHERE 37 * fond = 74;
Извршавањем упита добија се следећи резултат:
id |
naziv |
razred |
fond |
---|---|---|---|
3 |
Рачунарство и информатика |
1 |
2 |
5 |
Психологија |
2 |
2 |
6 |
Физика |
1 |
2 |
10 |
Социологија |
4 |
2 |
11 |
Филозофија |
4 |
2 |
… |
… |
… |
… |
Алијас израза (име израза наведено након AS
) можемо да употребимо
и у склопу клаузуле WHERE
.
SELECT naziv, razred, 37 * fond AS godisnji_fond
FROM predmet
WHERE godisnji_fond = 74;
Извршавањем упита добија се следећи резултат:
naziv |
razred |
godisnji_fond |
---|---|---|
Рачунарство и информатика |
1 |
74 |
Психологија |
2 |
74 |
Физика |
1 |
74 |
Социологија |
4 |
74 |
Филозофија |
4 |
74 |
… |
… |
… |
За сваки предмет приказати назив, разред и смену у којој се предаје (прва и трећа година су у првој, а друга и четврта у другој смени).
Јасно је да смена зависи од парности разреда. Оператором %
можемо
израчунати остатак при дељењу разреда са 2 и тако за први и трећи
разред добити вредност 1, а за други и четврти разред
вредност 0. Смену затим можемо добити одузимањем те вредности од
броја 2.
SELECT naziv, razred, 2 - razred % 2 AS smena
FROM predmet;
Извршавањем упита добија се следећи резултат:
naziv |
razred |
smena |
---|---|---|
Математика |
1 |
1 |
Српски језик |
1 |
1 |
Рачунарство и информатика |
1 |
1 |
Математика |
2 |
2 |
Психологија |
2 |
2 |
… |
… |
… |
Аритметички оператори нису једини оператори који су подржани. Ниске се
могу надовезати оператором ||
.
Направити јединствену колону која садржи пуно име и презиме сваког ученика.
SELECT id, ime || ' ' || prezime AS ime_i_prezime
FROM ucenik
Извршавањем упита добија се следећи резултат:
id |
ime_i_prezime |
---|---|
1 |
Петар Петровић |
2 |
Милица Јовановић |
3 |
Лидија Петровић |
4 |
Петар Миловановић |
5 |
Ана Пекић |
… |
… |
Напоменимо да се у неким другим системима за управљање базама података
за надовезивање ниски уместо оператора ||
користи функција CONCAT
.
Направити преглед регулисаних и нерегулисаних изостанака, тако што се уз идентификатор сваког изостанка прикаже да ли је нерегулисан или регулисан (било да је оправдан или неоправдан). Истаћи нерегулисане изостанке поруком „потребно да се регулише“.
Задатак ћемо решити употребом гранања. Основни облик гранања у језику
SQL је израз CASE
. Његова основна синтакса је облика:
CASE
WHEN uslov1 THEN vrednost1
WHEN uslov2 THEN vrednost2
...
WHEN uslovk THEN vrednostk
ELSE vrednost
END
Врши се провера испуњености једног по једног услова и ако је неки од
њих испуњен, вредност израза CASE
је вредност која је придружена
том услову. У супротном је вредност израза CASE
једнака вредности
која је наведена уз ELSE
. У нашем примеру, гранање можемо постићи
на следећи начин:
SELECT id, CASE
WHEN status = 'нерегулисан' THEN 'потребно да се регулише'
ELSE 'регулисан'
END AS status
FROM izostanak;
Извршавањем упита добија се следећи резултат:
id |
status |
---|---|
1 |
регулисан |
2 |
регулисан |
3 |
потребно да се регулише |
4 |
потребно да се регулише |
5 |
регулисан |
… |
… |
Илуструјмо употребу CASE
израза још једним примером.
Уз сваку оцену из табеле оцена приказати и њен текстуални опис (недовољан, довољан, добар, врлодобар, одличан).
SELECT id, ocena, CASE
WHEN ocena = 1 THEN 'недовољан'
WHEN ocena = 2 THEN 'довољан'
WHEN ocena = 3 THEN 'добар'
WHEN ocena = 4 THEN 'врлодобар'
WHEN ocena = 5 THEN 'одличан'
END AS opis_ocene
FROM ocena;
Извршавањем упита добија се следећи резултат:
id |
ocena |
opis_ocene |
---|---|---|
11 |
3 |
добар |
12 |
3 |
добар |
13 |
2 |
довољан |
15 |
3 |
добар |
16 |
1 |
недовољан |
… |
… |
… |
Вежба¶
Наредних неколико упита пробај да напишеш самостално. Решења можеш да тестираш овде, а можеш све задатке да урадиш и у систему SQLite Studio.
Ученици скупљају поене на основу оцена које су добили. За оцену два добијају 5 поена, за оцену три 10 поена, за оцену четири 15 поена и за оцену пет 20 поена. За сваку оцену у табели оцена приказати идентификатор ученика који је добио ту оцену и број поена који се добијају за ту оцену.
Прикажи све податке о изостанцима, при чему се уз оправдане
изостанке као статус наводи вредност 1, уз неоправдане вредност 2,
а уз нерегулисане 0 (та колона треба да се зове status
).