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

Ажурирање података

Понекад желимо да изменимо неке податке у бази, тј. у табелама базе. У језику SQL за то се користе упити UPDATE. Основни облик ових упита је:

UPDATE naziv_tabele
SET kolona_1 = vrednost_1, ..., kolona_k = vrednost_k
WHERE uslov;

Клаузула WHERE одређује који редови ће бити измењени – ако се она изостави, биће измењени сви редови, што често није оно што желимо. Илуструјмо ажурирање кроз неколико примера.

Ученику са идентификатором 1, Петру Петровићу, грешком је уписан датум рођења 1. јул 2006. године, а он је заправо рођен 2. јула 2006. године. Исправити ову грешку.

UPDATE ucenik
SET datum_rodjenja = '2006-07-02'
WHERE id = 1;

Условом може да се одабере и више врста.

Због ванредних околоности, одлучено је да ниједан ученик неће имати јединицу. Напиши упит који све јединице у табели оцена претвара у двојке.

UPDATE ocena
SET ocena = 2
WHERE ocena = 1;

Вредности које се уписују не морају бити константне.

Такође, одлучено је да се повећају све оцене за 1 (осим, наравно, петица, које остају петице).

UPDATE ocena
SET ocena = ocena + 1
WHERE ocena < 5;

На крају, у наредном, мало компликованијем примеру приказаћемо како услови у клаузули WHERE могу да буду прилично компликовани и могу да садрже и угнежђене подупите.

Сви ученици из првог два су поправили оцене које су добили на писменом из математике одржаном 15. октобра 2020. Напиши упит који свим ученицима уместо јединице уписује двојку.

Кључни задатак код овог упита је одредити које су то врсте у табели оцена, које одговарају оценама на том писменом задатку у том одељењу. Потребно је, дакле, одредити клаузулу WHERE која ће издвојити само те врсте у табели оцена. Добра пракса је да се пре ажурирања провери да ли су одабране добре врсте, тако што ће се иста клаузула WHERE употребити у склопу упита SELECT.

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

SELECT *
FROM ocena
WHERE id_ucenik IN (SELECT id
                    FROM ucenik
                    WHERE razred = 1 AND odeljenje = 2) AND
      id_predmet = (SELECT id
                    FROM predmet
                    WHERE naziv = 'Математика' AND razred = 1) AND
      datum = '2020-10-15' AND
      vrsta = 'писмени задатак' AND
      ocena = 1;

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

id

id_predmet

id_ucenik

ocena

datum

vrsta

40

1

7

1

2020-10-15

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

55

1

51

1

2020-10-15

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

57

1

53

1

2020-10-15

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

58

1

54

1

2020-10-15

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

66

1

62

1

2020-10-15

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

Када видимо да су редови добро одабрани, од упита SELECT лако можемо да направимо упит UPDATE.

UPDATE ocena
SET ocena = 2
WHERE id_ucenik IN (SELECT id
                    FROM ucenik
                    WHERE razred = 1 AND odeljenje = 2) AND
      id_predmet = (SELECT id
                    FROM predmet
                    WHERE naziv = 'Математика' AND razred = 1) AND
      datum = '2020-10-15' AND
      vrsta = 'писмени задатак' AND
      ocena = 1;

Вежба

Покушај да наредних неколико упита напишеш самостално.

По новом плану и програму предмет рачунарство и информатика у првом разреду треба да има фонд од 3 уместо 2 часа. Напиши упит који ажурира базу у складу са тим.



Наставник је грешком уписао да је писмени задатак из предмета чији је идентификатор 1 одржан 15. октобра 2020. године, а одржан је заправо 16. октобра 2020. године. Напиши упит који исправља ову грешку.



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



Разредни одељења II1 је од родитеља ученика сазнао да су сви изостанци које су ученици тог одељења направили, а који до сада нису регулисани, оправдани. Напиши упит који реализује ту промену.



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