Садржај
1.0 Базе: Увод у базе података
1.1 Базе: SQLite
1.2 Базе: Дизајнирање базе података
2.0 - 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: Брисање података из табела
Сортирање (ORDER BY)¶
Често се јавља потреба да податке прикажемо у одређеном редоследу. Потребан
редослед можемо да добијемо додавањем клаузуле ORDER BY
у упит SELECT
.
У клаузули ORDER BY
се наводи једна (или више) колона, на основу којих
се врши сортирање врста резултата.
Приказати списак свих предмета, уређен по разреду у ком се предају.
SELECT *
FROM predmet
ORDER BY razred;
Извршавањем упита добија се следећи резултат:
id |
naziv |
razred |
fond |
---|---|---|---|
1 |
Математика |
1 |
4 |
2 |
Српски језик |
1 |
4 |
3 |
Рачунарство и информатика |
1 |
2 |
6 |
Физика |
1 |
2 |
12 |
Енглески језик |
1 |
2 |
… |
… |
… |
… |
Сортирање се, наравно, лако комбинује са пројекцијом и селекцијом. Такође, сортирање може да се примени и на типове података који нису бројеви (на датуме, ниске…).
Приказати имена, презимена и датуме рођења свих ученика одељења првог један, уређене неопадајуће по датуму рођења (од најстаријих до најмлађих ђака).
SELECT ime, prezime, datum_rodjenja
FROM ucenik
WHERE razred = 1 AND odeljenje = 1
ORDER BY datum_rodjenja;
Извршавањем упита добија се следећи резултат:
ime |
prezime |
datum_rodjenja |
---|---|---|
Милица |
Јовановић |
2006-04-03 |
Огњен |
Стојановић |
2006-04-23 |
Александра |
Гајин |
2006-04-24 |
Војин |
Милошевић |
2006-04-30 |
Ивана |
Пејчев |
2006-05-13 |
… |
… |
… |
Овај упит можемо да прочитамо као:
Ако се жели обратан редослед сортирања (нерастући), тада се након
имена колоне може навести DESC
. Могуће је навести и ASC
чиме
се наглашава да је редослед неопадајући, међутим, пошто је тај
редослед подразумеван, ово се често изоставља.
Приказати имена, презимена и датуме рођења свих ученика одељења I1 првог један, уређене нерастући по датуму рођења (од најмлађих до најстаријих ђака).
SELECT ime, prezime, datum_rodjenja
FROM ucenik
WHERE razred = 1 AND odeljenje = 1
ORDER BY datum_rodjenja DESC;
Извршавањем упита добија се следећи резултат:
ime |
prezime |
datum_rodjenja |
---|---|---|
Теодора |
Вучковић |
2007-02-25 |
Даница |
Анђелковић |
2007-02-11 |
Анита |
Урошевић |
2007-02-05 |
Елена |
Ђурђевић |
2007-01-16 |
Анђелија |
Богдановић |
2007-01-16 |
… |
… |
… |
Ако је у клаузули ORDER BY
наведено више колона, тада се поређење
врши прво по првој колони, ако су вредности у првој колони једнаке,
поређење се врши по другој колони, ако су вредности и у другој колони
једнаке, поређење се врши по трећој колони итд.
Приказати све податке о ученицима у азбучном редоследу презимена и имена.
SELECT prezime, ime
FROM ucenik
ORDER BY prezime ASC, ime ASC;
Извршавањем упита добија се следећи резултат:
prezime |
ime |
---|---|
Алексић |
Магдалена |
Анђелковић |
Ана |
Анђелковић |
Даница |
Анђелковић |
Магдалена |
Антић |
Бранко |
… |
… |
Пошто су у клаузули ORDER BY
наведене две колоне prezime
, па
ime
, сортирање се прво врши по презименима, а ако су презимена
једнака, онда се врши по именима. ASC
означава да се сортирање обе
колоне врши у неопадајућем редоследу (и може да се изостави).
Нагласимо да је за сортирање по азбучном реду јако важно да су у
колонама ime
и prezime
подешене одговарајуће колационе
секвенце.
Вежба¶
Наредних неколико упита напиши самостално. Решења можеш да тестираш овде, а можеш све задатке да урадиш и у систему SQLite Studio.
Прикажи све податке о предметима првог разреда у нерастућем редоследу фонда часова.
Прикажи све податке о изостанцима тако да су прво наведени неоправдани, па нерегулисани, па оправдани, при чему су у свакој категорији изостанци поређени по датуму када су направљени, а за оне направљене истог датума по часу на ком су направљени.