Селекција (WHERE)¶
Као што смо могли да одаберемо само податке из неких колона, тако
можемо да одаберемо и само податке из неких врста, тј. да извршимо
филтрирање података на основу неког задатог услова. Тада је потребно
да користимо следећи облик упита SELECT.
SELECT kolone
FROM tabele
WHERE uslov;
Када наведемо клаузулу WHERE, кажемо да је извршена селекција
врста табеле, тј. да смо извршили филтрирање података. За овакав
упит се каже и да извршава рестрикцију табеле.
Пројекцијом, дакле, избацујемо одређене колоне из резултата, а селекцијом (рестрикцијом) одређене врсте.
🤓 Зашто се ова операција зове селекција, односно рестрикција?
И термини селекција врста табеле и рестрикција табеле долазе из формализма релационе алгебре.
Реч селекција значи избор, а овде се односи на избор оних врста табеле, које задовољавају дати услов.
Реч рестрикција значи ограничење, а у овом контексту говори да дату табелу ограничавамо само на оне врсте које задовољавају дати услов.
У наставку ћемо кроз низ примера илустровати различите облике услова које можемо да користимо.
Приказати све податке о ученицима првог разреда.
SELECT *
FROM ucenik
WHERE razred = 1;
Извршавањем упита добија се следећи резултат:
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 |
… |
… |
… |
… |
… |
… |
… |
Овај упит може да се протумачи као:
Услов у овом упиту је razred = 1. Приметимо да у услову могу да се наводе називи
колона табеле, као и константне вредности (у овом случају то је број 1), док се за
једнакост користи знак =.
Приказати све податке о предметима у другом разреду
SELECT *
FROM predmet
WHERE razred = 2;
Извршавањем упита добија се следећи резултат:
id |
naziv |
razred |
fond |
|---|---|---|---|
4 |
Математика |
2 |
5 |
5 |
Психологија |
2 |
2 |
7 |
Физика |
2 |
3 |
24 |
Српски језик |
2 |
3 |
25 |
Енглески језик |
2 |
2 |
… |
… |
… |
… |
Приказати све податке о ученицима који се зову Петар.
SELECT *
FROM ucenik
WHERE ime = 'Петар';
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
|---|---|---|---|---|---|---|
1 |
Петар |
Петровић |
м |
2006-07-01 |
1 |
1 |
4 |
Петар |
Миловановић |
м |
2005-12-08 |
2 |
1 |
50 |
Петар |
Милић |
м |
2006-06-14 |
1 |
2 |
163 |
Петар |
Платиша |
м |
2005-05-30 |
2 |
3 |
У овом упиту услов је ime = 'Петар'. Приметимо да је овај пут
константна вредност 'Петар' наведена под једноструким наводницима,
јер је у питању ниска карактера. Исти ефекат се може добити и ако се
употребе двоструки наводници тј. ако се наведе "Петар".
SELECT *
FROM ucenik
WHERE ime = "Петар";
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
|---|---|---|---|---|---|---|
1 |
Петар |
Петровић |
м |
2006-07-01 |
1 |
1 |
4 |
Петар |
Миловановић |
м |
2005-12-08 |
2 |
1 |
50 |
Петар |
Милић |
м |
2006-06-14 |
1 |
2 |
163 |
Петар |
Платиша |
м |
2005-05-30 |
2 |
3 |
Приказати све оцене добијене на писменим задацима.
SELECT *
FROM ocena
WHERE vrsta = 'писмени задатак';
Извршавањем упита добија се следећи резултат:
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 |
2 |
2020-10-15 |
писмени задатак |
15 |
1 |
14 |
3 |
2020-10-15 |
писмени задатак |
16 |
1 |
15 |
1 |
2020-10-15 |
писмени задатак |
… |
… |
… |
… |
… |
… |
Проверити да ли међу ученицима постоји неко ко се зове исто као што се и презива (приказати све такве ученике).
SELECT *
FROM ucenik
WHERE ime = prezime;
Извршавањем упита добија се следећи резултат:
id |
ime |
prezime |
pol |
datum_rodjenja |
razred |
odeljenje |
|---|---|---|---|---|---|---|
201 |
Милић |
Милић |
м |
2004-11-21 |
3 |
1 |
336 |
Милош |
Милош |
м |
2003-08-09 |
4 |
3 |
Наравно, у истом упиту се могу комбиновати пројекција и селекција.
Приказати све идентификаторе неоправданих изостанака.
SELECT id
FROM izostanak
WHERE status = 'неоправдан';
Извршавањем упита добија се следећи резултат:
id |
|---|
2 |
5 |
9 |
10 |
11 |
… |
У свим овим примерима вршили смо исљкучиво поређење коришћењем једнакости. У даљем раду ћеш научити да језик SQL подржава и друге релације.
Вежба¶
Пробај сада да самостално напишеш наредних неколико упита.
Приказати све податке о предметима који имају недељни фонд од 2 часа.
Издвојити имена и презимена ученика рођених 1. јула 2006. године.