Садржај
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: Брисање података из табела
Логички оператори (AND, OR, NOT)¶
Више логичких услова могуће је повезати уобичајеним логичким операторима:
Оператор
AND
означава конјункцију, тј. логичко и.Оператор
OR
означава дисјункцију, тј. логичко или.Оператор
NOT
означава негацију, тј. логичко не.
Прикажимо њихову употребу на неколико примера упита.
Приказати све податке о ученицима одељења I2 (првог два).
SELECT *
FROM ucenik
WHERE razred = 1 AND odeljenje = 2;
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
6 |
Јован |
Миленковић |
м |
2006-04-07 |
1 |
2 |
7 |
Јована |
Миленковић |
ж |
2006-04-07 |
1 |
2 |
12 |
Ана |
Анђелковић |
ж |
2007-04-23 |
1 |
2 |
38 |
Ксенија |
Ђукић |
ж |
2007-02-15 |
1 |
2 |
39 |
Анабела |
Лазаревић |
ж |
2006-07-08 |
1 |
2 |
… |
… |
… |
… |
… |
… |
… |
Овај упит можемо да прочитамо као:
Приметимо да се у овом примеру захтева да ученик иде у први разред, као и да иде у
друго одељење (пошто се тражи да су испуњени и први и други услов, употребљава се
оператор AND
).
На следећој слици може да се види како изгледа овај упит покренут у систему SQLite Studio. Види се само првих неколико редова и информација о томе да има укупно 33 реда који задовољавају постављен услов.
Приказати све податке о ученицима који се зову Петар Петровић.
Нагласимо да је могуће да постоји више ученика који имају исто име и презиме.
SELECT *
FROM ucenik
WHERE ime = 'Петар' AND prezime = 'Петровић';
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
1 |
Петар |
Петровић |
м |
2006-07-01 |
1 |
1 |
Структура овог упита је веома слична оном претходном (потребно је да су задовољена оба наведена услова).
Приказати све податке о ученицима који иду у непарну смену (то су ученици који иду у први и ученици који иду у трећи разред).
SELECT *
FROM ucenik
WHERE razred = 1 OR razred = 3;
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
1 |
Петар |
Петровић |
м |
2006-07-01 |
1 |
1 |
2 |
Милица |
Јовановић |
ж |
2006-04-03 |
1 |
1 |
3 |
Лидија |
Петровић |
ж |
2006-12-14 |
1 |
1 |
6 |
Јован |
Миленковић |
м |
2006-04-07 |
1 |
2 |
7 |
Јована |
Миленковић |
ж |
2006-04-07 |
1 |
2 |
… |
… |
… |
… |
… |
… |
… |
Овај упит можемо да прочитамо као:
У овом примеру је довољно да је задовољен било који од два наведена услова
(подаци о ученику се приказују било да иде у први, било да иде у трећи разред),
па се користи оператор OR
.
На екскурзију у октобру иду сви ученици, осим ученика првог разреда. Приказати њихова имена и презимена.
Тражи се списак ученика код којих је разред различит од 1. Задатак
можемо да решимо применом оператора NOT
.
SELECT *
FROM ucenik
WHERE NOT (razred = 1);
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
4 |
Петар |
Миловановић |
м |
2005-12-08 |
2 |
1 |
5 |
Ана |
Пекић |
ж |
2005-02-23 |
2 |
1 |
8 |
Гордана |
Сарић |
ж |
2005-01-03 |
2 |
1 |
9 |
Вања |
Савић |
м |
2004-11-13 |
3 |
1 |
10 |
Николина |
Јовановић |
ж |
2004-08-03 |
3 |
1 |
… |
… |
… |
… |
… |
… |
… |
Овај упит можемо протумачити као
Ипак, још једноставније решење је да се употреби оператор различито !=
.
SELECT *
FROM ucenik
WHERE razred != 1;
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
4 |
Петар |
Миловановић |
м |
2005-12-08 |
2 |
1 |
5 |
Ана |
Пекић |
ж |
2005-02-23 |
2 |
1 |
8 |
Гордана |
Сарић |
ж |
2005-01-03 |
2 |
1 |
9 |
Вања |
Савић |
м |
2004-11-13 |
3 |
1 |
10 |
Николина |
Јовановић |
ж |
2004-08-03 |
3 |
1 |
… |
… |
… |
… |
… |
… |
… |
Приказати све податке о ученицима који се презивају Петровић
,
али се не зову Петар
.
И у овом случају можемо да употребимо оператор NOT
.
SELECT *
FROM ucenik
WHERE NOT (ime = 'Петар') AND prezime = 'Петровић';
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
3 |
Лидија |
Петровић |
ж |
2006-12-14 |
1 |
1 |
47 |
Душанка |
Петровић |
ж |
2006-09-28 |
1 |
2 |
112 |
Тамара |
Петровић |
ж |
2005-05-29 |
2 |
1 |
126 |
Марија |
Петровић |
ж |
2005-03-27 |
2 |
2 |
285 |
Илија |
Петровић |
м |
2003-10-27 |
4 |
1 |
Задатак може да се реши и помоћу оператора различито.
SELECT *
FROM ucenik
WHERE ime != 'Петар' AND prezime = 'Петровић';
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
---|---|---|---|---|---|---|
3 |
Лидија |
Петровић |
ж |
2006-12-14 |
1 |
1 |
47 |
Душанка |
Петровић |
ж |
2006-09-28 |
1 |
2 |
112 |
Тамара |
Петровић |
ж |
2005-05-29 |
2 |
1 |
126 |
Марија |
Петровић |
ж |
2005-03-27 |
2 |
2 |
285 |
Илија |
Петровић |
м |
2003-10-27 |
4 |
1 |
Вежба¶
Покушај сада да самостално решиш наредни задатак.
Прикажи називе предмета из другог разреда који имају недељни фонд од два часа.