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

Функције

SQL подржава велики број библиотечких функција које су обично детаљно описане у документацији одабраног система за управљање базама података. Употреба функција и њихов детаљан опис превазилази домет овог курса. За оне који желе да знају више, поменућемо само неколико основних функција и илустровати кроз примере како се користе.

Функција substr издваја подниску дате ниске. Аргументи су јој ниска, почетна позиција (позиције се броје од један, а не од нула) и број карактера.

Издвојити имена, презимена и иницијале свих ученика.

SELECT ime, prezime, substr(ime, 1, 1) || substr(prezime, 1, 1) AS inicijali
FROM ucenik;

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

ime

prezime

inicijali

Петар

Петровић

ПП

Милица

Јовановић

МЈ

Лидија

Петровић

ЛП

Петар

Миловановић

ПМ

Ана

Пекић

АП

Функција length одређује дужину ниске (број њених карактера).

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

SELECT ime
FROM ucenik
WHERE length(ime) = 3;

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

ime

Ана

Ана

Уна

Теа

Вук

Функције upper и lower преводе ниску у сва велика тј. сва мала слова (не мењајући карактере који нису слова).

Функције max и min одређују максимум тј. минимум две (или више) вредности које су им прослеђене. Ове функције су применљиве и на датуме и на ниске (при чему треба обратити пажњу на колациону секвенцу која одређује поредак ниски).

Када би сви ученици који су имали јединице и двојке поправили те оцене на тројке, прикажи како би изгледала табела оцена.

SELECT id, id_predmet, id_ucenik, max(ocena, 3) AS ocena, datum, vrsta
FROM ocena;

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

id

id_predmet

id_ucenik

ocena

datum

vrsta

11

1

1

3

2020-10-15

писмени задатак

12

1

2

3

2020-10-15

писмени задатак

13

1

3

3

2020-10-15

писмени задатак

15

1

14

3

2020-10-15

писмени задатак

16

1

15

3

2020-10-15

писмени задатак

Изразом max(ocena, 3) све оцене које су мање од 3 се претварају у 3, док оне веће од 3 остају непромењене.

Функција round врши заокруживање датог реалног броја на најближи цео број или на одређени број децимала.

Функција CAST(... AS ...) врши конверзију типова података. На пример, вредност израза CAST('123' AS INTEGER) је цео број 123.

Постоји одређен број функција за рад са датумима и временом. Најопштија од њих је функција strftime која форматира дати датум или време у задатом формату, а може се употребити и за издвајање одређених делова датума или времена. Сваки део датума описан је одређеним спецификатором:

  • %Y – година

  • %m – месец

  • %d – дан

  • %H – сат

  • %M – минут

  • %S – секунд

На пример, strftime('%d/%m/%Y', datum_rodjenja) форматира датум рођења прочитан из табеле ученика у формату дан/месец/година. Ако се уместо датума прочитаног из базе наведе now користи се текући датум и време. На пример, strftime('%Y-%m-%d', now) чита тренутни датум у подразумеваном формату. С обзиром на значај тог подразумеваног формата записа датума, уместо strftime могуће је употребити функцију date која форматира датум у подразумеваном формату година-месец-дан. Слично, функција time форматира време у подразумеваном формату %H:%M:%S тј. сат:минут:секунд.

Списак и детаљан опис свих подржаних функција је доступан у званичној документацији система SQLite (https://www.sqlite.org/lang_corefunc.html и https://www.sqlite.org/lang_datefunc.html).

Прикажимо неколико примера употребе ових функција.

Неки изостанци су грешком уписани после последњег дана школе, 20. јуна 2021. Како би изгледала таблица изостанака ако би се сви ти изостанци преправили тако да им датум буде 20. јун 2021?

SELECT id, id_ucenik, MIN(datum, '2021-06-20') AS datum, cas, status
FROM izostanak;

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

id

id_ucenik

datum

cas

status

1

1

2021-05-14

1

оправдан

2

1

2021-05-14

2

неоправдан

3

4

2021-05-14

1

нерегулисан

4

4

2021-05-14

2

нерегулисан

5

6

2021-06-01

1

неоправдан

Коришћењем функције за издвајање првог слова ниске одредити ученике мушког пола чије име почиње самогласником.

SELECT ime
FROM ucenik
WHERE pol = 'м' AND substr(ime, 1, 1) IN ('А', 'Е', 'И', 'О', 'У');

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

ime

Огњен

Андреј

Алекса

Урош

Алекса

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

SELECT ime, prezime,
       CAST(strftime('%d', datum_rodjenja) AS INTEGER) AS dan,
       CAST(strftime('%m', datum_rodjenja) AS INTEGER) AS mesec,
       CAST(strftime('%Y', datum_rodjenja) AS INTEGER) AS godina
FROM ucenik;

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

ime

prezime

dan

mesec

godina

Петар

Петровић

1

7

2006

Милица

Јовановић

3

4

2006

Лидија

Петровић

14

12

2006

Петар

Миловановић

8

12

2005

Ана

Пекић

23

2

2005

Вежба

Наредних неколико упита пробај да напишеш самостално. Решења можеш да тестираш овде, а можеш све задатке да урадиш и у систему SQLite Studio.

За сваки регулисани изостанак издвојити идентификатор и ознаку статуса (о за оправдане и н за неоправдане) у колони која се опет назива status - употребити функцију за издвајање првог карактера ниске.



Коришћењем функције за издвајање године из датума, приказати имена и презимена ученика рођених током 2006. године.



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