17/19.09. (lekcija sa primerima) Aritmetičke operacije i numeričke funkcije
1. Uvod
SQL ne služi samo za pretraživanje podataka, već i za njihovu obradu i računanje.
Kada radimo sa brojevima u tabelama, možemo da:
-
primenjujemo aritmetičke operacije (
+,-,*,/), -
kontrolišemo redosled izračunavanja pomoću zagrada,
-
koristimo ugrađene numeričke funkcije da dobijemo dodatne rezultate.
2. Aritmetičke operacije
Osnovne aritmetičke operacije su:
| Operator | Značenje | Primer | Rezultat |
|---|---|---|---|
+ |
Sabiranje | 10 + 5 |
15 |
- |
Oduzimanje | 10 - 5 |
5 |
* |
Množenje | 10 * 5 |
50 |
/ |
Deljenje | 10 / 5 |
2 |
%* |
Ostatak pri deljenju (modulo) – podržava SQL Server, MySQL – |
10 % 3 |
1 |
🔹 Napomena: Operator % nije uvek podržan u svim bazama podataka (npr. u Oracle-u se koristi MOD() funkcija).
3. Redosled izračunavanja
Kao i u matematici, prioritet operatora je isti, a u nastavku su navedeni - počev od operatira sa najvišim prioritetom:
-
-
Zagrade
( ) -
Stepenovanje (
POWER) – ako baza podržava -
Množenje
*, deljenje/, modulo% -
Sabiranje
+, oduzimanje-
-
Primer:
SELECT 10 + 5 * 2; -- Rezultat: 20 (prvo množenje)
SELECT (10 + 5) * 2; -- Rezultat: 30 (prvo zagrada)
4. Numeričke funkcije
SQL sadrži veliki broj funkcija za rad sa brojevima. Pored osnovnih aritmetičkih operacija (+, -, *, /), SQL ima i ugrađene numeričke funkcije.
One omogućavaju da se podaci obrade direktno u upitu, bez potrebe da se naknadno računa u aplikaciji. U nastavku su neke od najčešće korišćenih numeričkih funkcija:
| Funkcija | Opis | Primer | Rezultat |
|---|---|---|---|
ABS(n) |
Apsolutna vrednost | ABS(-10) |
10 |
CEILING(n) |
Zaokruživanje naviše | CEILING(4.2) |
5 |
FLOOR(n) |
Zaokruživanje naniže | FLOOR(4.8) |
4 |
ROUND(n,d) |
Zaokruživanje na d decimala | ROUND(123.456, 2) |
123.46 |
POWER(a,b) |
Stepenovanje (a^b) | POWER(2,3) |
8 |
SQRT(n) |
Kvadratni koren | SQRT(16) |
4 |
LOG(n) |
Prirodni logaritam (osnova e) | LOG(10) |
2.3025… |
LOG10(n) |
Dekadni logaritam (osnova 10) | LOG10(100) |
2 |
SIGN(n) |
Znak broja (-1,0,1) | SIGN(-15) |
-1 |
PI() |
Vrednost broja π | PI() |
3.14159… |
RAND() |
Nasumičan broj (0–1) | RAND() |
0.7483… |
Napomena: Postoji razlika između numeričkih i agregatnih funkcija (koje ćemo raditi kasnije):
-
-
Numeričke funkcije (kao što su
ABS,ROUND,POWER,SQRT…) rade nad pojedinačnim vrednostima i vraćaju rezultat za svaku vrednost posebno. -
Agregatne funkcije (
SUM,AVG,MAX,MIN,COUNT) rade nad skupom redova i vraćaju jedan rezultat za taj skup, tj za sve te redove vraćaju samo jedan broj.
-
5. Primeri
Ako se oslonimo na prethodnu bazu koju smo kreirali sa tabelama Korisnici, Proizvodi, i Narudzbine, možemo koristiti numeričke funkcije da izvršimo razne operacije nad numeričkim podacima u tim tabelama.
Funkcija ROUND() se koristi za zaokruživanje broja na određeni broj decimala.
Primer:
Zaokruži cenu proizvoda na dve decimale.
SELECT ROUND(Cena, 2) AS ZaokruzenaCena
FROM Proizvodi;
Rezultat: Ovaj upit će vratiti cenu proizvoda sa samo dve decimale.
-
CEILING(): Vraća najmanji ceo broj koji je veći ili jednak vrednosti. -
FLOOR(): Vraća najveći ceo broj koji je manji ili jednak vrednosti.
Primer:
-
Zaokruži cenu na najbliži veći ceo broj:
SELECT CEILING(Cena) AS CenaCeiling FROM Proizvodi; -
Zaokruži cenu na najbliži manji ceo broj:
SELECT FLOOR(Cena) AS CenaFloor FROM Proizvodi;
Rezultat: Ovi upiti će zaokružiti cene proizvoda na najbliži veći i manji ceo broj, prema vrednosti u koloni Cena.
Funkcija ABS() vraća apsolutnu vrednost broja (odstranjuje negativni predznak).
Primer:
Ako je vrednost u nekoj koloni negativna, možemo izračunati njen apsolutni iznos. U ovom primeru ćemo samo koristiti ABS() na cenu proizvoda (ako bi vrednost bila negativna):
SELECT ABS(Cena) AS ApsolutnaCena
FROM Proizvodi;
Rezultat: Ovaj upit bi prikazao cenu proizvoda, bez obzira na to da li je negativna ili pozitivna (iako u realnim uslovima cena proizvoda neće biti negativna).
Funkcija POWER() se koristi za podizanje broja na određeni stepen.
Primer:
Računanje cene proizvoda podignute na kvadrat.
SELECT POWER(Cena, 2) AS CenaNaKvadrat
FROM Proizvodi;
Rezultat: Ovaj upit će prikazati kvadrat svake cene proizvoda u tabeli Proizvodi.
Funkcija PI() vraća vrednost broja Pi (≈ 3.14159). Može se koristiti u matematičkim proračunima.
Primer:
Računanje površine kruga na osnovu prečnika (koristeći formulu π *
r^2):
SELECT PI() * POWER(5, 2) AS PovrsinaKruga;
Rezultat: Ovaj upit će izračunati površinu kruga sa radijusom 5 koristeći broj Pi.
Funkcija RAND() generiše slučajni broj između 0 i 1.
Primer:
Generisanje slučajnog broja za simulaciju popusta na proizvode:
SELECT Naziv, Cena, (Cena * RAND()) AS Popust
FROM Proizvodi;
Rezultat: Ovaj upit će generisati slučajni popust za svaki proizvod u tabeli Proizvodi.
5. Primeri koje nismo radili na času:
pogledati kod kuće ove primere
SQL upiti:
-- Povećanje cene za 20% (aritmetika)
SELECT Naziv, Cena, Cena * 1.2 AS NovaCena
FROM Proizvodi;
-- Apsolutna vrednost cena
SELECT Naziv, ABS(Cena) AS CenaPozitivna
FROM Proizvodi;
-- Zaokruživanje cene
SELECT Naziv, ROUND(Cena, 0) AS CenaCeoBroj
FROM Proizvodi;
-- Cena u kvadratu
SELECT Naziv, POWER(Cena, 2) AS KvadratCene
FROM Proizvodi;
6. Zadaci za vežbu
-
Napisati upit koji svakoj ceni dodaje 10% poreza.
-
Napisati upit koji računa apsolutnu vrednost cene i nazvati kolonu
PozitivnaCena. -
Napisati upit koji izračunava kvadratni koren cene (za pozitivne cene).
-
Prikazati naziv proizvoda i slučajan broj između 0 i 1 (koristiti
RAND()). -
Prikazati cenu zaokruženu na dve decimale.
-
Izračunati
(Cena + 5) * 2i uporediti rezultat sa(Cena + (5 * 2)).
7. Mini test (opciono)
-
Koji je prioritet operacija:
+,*,()? -
Koja funkcija vraća apsolutnu vrednost broja?
-
Razlika između
CEILING()iFLOOR()? -
Šta vraća
SIGN(-25)? -
Koja funkcija generiše slučajan broj između 0 i 1?