Sunteți pe pagina 1din 38

Cap 5.

Expresii SQL

EXPRESII SQL
1. Compozitia unei expresii
2. Reprezentarea valorilor constante in instructiuni MySQL
3. Operatori
4. Functii SQL predefinite

InfoAcademy SQL 2015

Compozitia unei expresii


Expresiile pot fi intalnite in:
- valorile coloanelor returnate de catre instructiunea SELECT;
- valorile introduce pe coloane cu instructiunea UPDATE;
- criteriile de ordonare din clauza ORDER BY;
- conditiile din clauza WHERE.
O expresie SQL poate fi compusa din:
- Valori constante, specificate ca atare in cadrul instructiunii SQL
(numere, siruri, date calendaristice, etc.);
- Valori ale coloanelor din tabelele care intervin in instructiuni;
- Apeluri catre functii SQL predefinite;
- NULL.
Toate acestea pot fi combinate de operatori, care acepta unul sau
InfoAcademy SQL 2015
3
mai multi operanzi

EXPRESII SQL
1. Compozitia unei expresii
2. Reprezentarea valorilor constante in instructiuni
MySQL
3. Operatori
4. Functii SQL predefinite

InfoAcademy SQL 2015

Reprezentarea numerelor

Exercitiul 5.011

Reguli:
- In baza 10 numerele pot fi scrise astfel: 60, -25, +17;
- In hexazecimal pot fi scrise astfel:
- xvaloare Ex. xDA = 13*16+10 = 218
- Xvaloare Ex. X58 = 5*16+8 = 88
- 0xvaloare Ex. 0x2aF = 2*16*16+10*16+15 = 687
- Valoare utilizeaza cifre de la 0-9 si litere de la A la F, case
insensitive, + sau - Numerele fractionare, pot fi precedate de semn si reprezentate
astfel:
- In notatie fractionara obisnuita Ex. 43.8
- In notatie stiintifica Ex. 0.438e2 = 43.8
Tipul de date asignat constantelor in functie de
InfoAcademy SQL 2015
reprezentarea lor:

Reprezentarea sirurilor de caractere

Exemplul

5.021
- Valorile de tip sir de caractere trebuie incluse intre apostroafe;
- Daca dorim ca o valoare de tip sir de caractere sa aiba un anumit
CHARSET si COLLATION vom scrie CHARSET precedat de _, urmat
de valoarea propriu-zisa si de COLLATION (Ex. _latin2 Popescu
COLLATE latin2_general_ci.

Reprezentarea valorilor de tip temporal


5.031

Exemplul

- Valorile vor fi introduce intre apostroafe cu exceptia anului, care


este numeric;
- Zilele si lunile cu o cifra pot fi reprezentate ca atare;
InfoAcademy SQL 2015
6
- Separatorul de an, luna,
zi poate fi altul decat -

EXPRESII SQL
1. Compozitia unei expresii
2. Reprezentarea valorilor constante in instructiuni MySQL
3. Operatori
4. Functii SQL predefinite

InfoAcademy SQL 2015

Categorii de operatori
- Aritmetici, identici cu operatorii aritmetici uzuali, produc un rezultat
numeric;
- De comparare, compara valorile expresiilor (operanzi) returnand valori
de adevar (A/F)
- Logici, folositi pentru expresii compuse, returneaza o valoare de adevar
- De evaluare conditionata
- De conversie

InfoAcademy SQL 2015

Operatori aritmetici

Exemplul 5.041

+ adunare
- scadere
* inmultire
/ impartire poate rezulta un numar fractionar
DIV impartire intreaga returneaza catul impartirii primului
operand la al doilea
- % modulo returneaza restul impartirii primului operand la al
doilea
-

Operatorii aritmetici + si pot fi aplicati si valorilor de tip temporar,


adaugand/scazand un interval de timp dintr-o data existenta. Se
utilizeaza cuvantul cheie INTERVAL urmat de o expresie (valoare) si
de unitatea de masura (YEAR, MONTH, WEEK, DAY, HOUR,
MINUTE, SECOND).
InfoAcademy SQL 2015

Operatori de comparare

Exemplul 5.051

Accepta unul sau mai multi operanzi si returneaza 0, 1 sau NULL.


Pot compara inclusive siruri de caractere.
> mai mare
< mai mic
>= mai mare sau egal
<= mai mic sau egal
= egal
!= diferit de
<> diferit de
IS NULL
IS NOT NULL
<=> verifica egalitatea, chiar si pentru NULL
Operand [NOT] BETWEEN valoare1 AND valoare2 (inclusive
capetele)
- Expresie1 [NOT] LIKE expresie2 (putem utiliza _ si %
- Expresie [NOT] RLIKE regex sau [NOT] REGEXP regex
- Expresie [NOT] IN (val1, val2,...valx), echivalenta cu expr1=val1
InfoAcademy SQL 2015
10
OR expr1=val2....
-

Operatori logici

Exemplul 5.061

- AND sau &&

- SI logic

- OR sau ||

- SAU logic

- XOR
a) and b)
- NOT sau !

- SAU exclusive a XOR b = a AND (NOT b)) OR ((NOT


- negare, inversarea valorii de adevar

InfoAcademy SQL 2015

11

Operatori de evaluare conditionata


5.071

Exemplul

CASE expresie
WHEN expresie1 THEN valoare1
WHEN expresie1 THEN valoare1
....................
[ELSE] valoare_default
END
Exemplul 5.071
CASE
WHEN expresie1 THEN valoare1
WHEN expresie2 THEN valoare2
....................
[ELSE] valoare_default
END
InfoAcademy SQL 2015

12

Operatori de conversie

Exemplul 5.081

Operatorul BYNARY face ca un sir de caractere sa fie tratat ca un


sir de octeti.
Conversii de tip de date implicite

Exemplul 5.091

Atunci cand operanzii unui operator au tip de date diferit MySQL


procedeaza astfel:
- Numerele sunt transformate automat in siruri de caractere si invers,
unde este necesar;
- Datele de tip temporal sunt convertite la numere cand sunt folosite
intr-un context numeric, si invers;
- Valorile coloanelor de tip enumerat sunt automat convertite la string
sau la numr in funcie de context;
InfoAcademy SQL 2015

13

Recapitulare expresii, constante, operatori


Constante: reprezentarea in hexazecimal, notatia stiintifica;
Com sunt tratate constantele ca tip de date (intregi, stiintifice,
fractionare)?
Operatori : %, DIV, XOR, BINARY, CASE;
Calculati momentul de fata plus 1 zi, 15 minute, 30 de secunde;
Vrem sa comparam daca doua valori sunt NULL (ambele). Ce
operator folosim?
Vrem sa facem o selectie care sa includa si inregistrarile cu NULL. Ce
operator folosim?
InfoAcademy SQL 2015

14

EXPRESII SQL
1. Compozitia unei expresii
2. Reprezentarea valorilor constante in instructiuni MySQL
3. Operatori
4. Functii SQL predefinite

InfoAcademy SQL 2015

15

Sintaxa de apelare
- Numele functiei urmat de lista argumentelor intre paranteze
rotunde:
SELECT CONCAT(nume, , prenume);
- Intre numele functiei si paranteza nu trebuie sa existe spatii.
Daca este activata optiunea IGNORE_SPACE spatiile sunt permise;
- Pot primi zero sau mai multe argumente, care trebuie sa
respecte sintaxa corespunzatoare tipului de date.

InfoAcademy SQL 2015

16

Tipuri si categorii de functii


- FUNCTII SIMPLE primesc zero sau mai multe argumente
(constante sau expresii, care pot fi la randul lor alte functii sau
coloane din tabele). Returneaza cate o valoare pentru fiecare
inregistrare.
-

Functii de comparare;
Functii conditionale;
Functii matematice;
Functii pentru siruri de caractere;
Functii pentru operarea cu date de tip temporal;
Alte functii.

- FUNCTII DE AGREGARE actioneaza asupra mai multor randuri


sau asupra tuturor randurilor dintr-o coloana a unei tabele.
InfoAcademy SQL 2015

17

Functii de comparare

Exemplul 5.101

- LEAST(valoare1, valoare2,...) - returneaz cea mai mic dintre


valorile primite ca argument;
- GREATEST(valoare1, valoare2,...) - returneaz cel mai mare
dintre argumente;
- INTERVAL(N, N1, N2,...Nx) - returneaz 0 daca N<N1, 1 daca
N<N2, 2 daca N<N3 etc (toate valorile sunt tratate ca intregi).
- Pentru ca funcia sa opereze corect, este necesar ca
N1<N2<N3<...Nx.
- N este comparat succesiv cu N1, N2,..., Nx.

InfoAcademy SQL 2015

18

Functii matematice
Valoare absoluta
- ABS(valoare) - returneaza valoarea absoluta (modulul);
Trunchieri si rotunjiri
- CEIL(valoare) / CEILING(valoare) - returneaza cel mai apropiat
intreg mai mare sau egal cu valoarea primita ca argument;
- FLOOR(valoare) - returneaza cel mai mare intreg mai mic sau
egal cu valoarea primita ca argument;
- ROUND(valoare) - returneaza intregul cel mai apropiat de
valoarea primita ca argument, prin indepartare de 0;
- TRUNCATE(valoare, nr_zecimale) - trunchiaza valoarea
pstrnd numai numrul de zecimale cerut;

InfoAcademy SQL 2015

19

Functii matematice (continuare)


Ridicare la putere
- POW(baza, exponent) / POWER(baza, exponent) returneaza rezultatul ridicrii bazei la puterea exponent;
- EXP(valoare) - ridicarea lui e la puterea valoare;
Logaritmi
- LOG(valoare), LOG10(valoare), LOG2(valoare) - logaritm
natural; in baza 10; in baza2
Radacina patrata (radical)
- SQRT(valoare) - returneaza un numr fractionar ce reprezint
rezultatul operaiei. Daca valoarea primita ca argument este
negativa, rezultatul returnat va fi NULL;
InfoAcademy SQL 2015

20

Functii matematice (continuare)

Exemplul 5.111

Functii trigonometrice
- PI() - returneaz valoarea numrului
- COS(), SIN(), TAN(), COT(), ACOS(), ASIN(), ATAN() - funciile
trigonometrice;
Generarea de numere aleatoare
- RAND() numere aleatoare intre 0 (inclusiv) si 1 (exclusiv).
Semnul unei expresii
- SIGN() - funcia matematica signum. Returneaza -1 pentru
numere negative, 1 pentru pozitive si 0 pentru numere nule;
Conversie
- CONV(numar, baza_initiala, baza_dorita) - converteste
InfoAcademy SQL 2015
21
numrul din baza de numeratie
iniiala in cea dorita(baze intre
2-

Functii conditionale

Exemplul 5.121

- IF(expresie_evaluata, expresie1, expresie2)


- daca expresie_conditie se evalueaz ca true (nu are valoarea 0
sau NULL) funcia returneaza valoarea lui expresie1, in caz
contrar valoarea lui expresie2;
- IFNULL(expresie1, expresie2)
- daca expresie1 are valoare non-NULL este returnata valoarea
lui expresie1, in caz contrar se returneaza valoarea lui expresie2;
- NULLIF(expresie1, expresie2) - returneaza NULL daca
expresie1 =expresie2; in caz contrar returneaza valoarea lui
expresie1;

InfoAcademy SQL 2015

22

Functii pentru siruri de caractere


Lungimea unui sir
- CHAR_LENGTH(sir) / CHARACTER_LENGTH(sir) - numrul de
caractere din sir;
- LENGTH(sir) / OCTET_LENGTH()- returneaza numrul de octei
ocupai de sir;
Concatenare
- CONCAT(sir1, sir2,..) - returneaza irul rezultat din
concatenarea argumentelor;
- CONCAT_WS(separator, sir1, sir2,...) concatenarea cu
separator. Spre deosebire de CONCAT(), argumentele NULL sunt
ignorate;
Padding (completarea cu caractere a unui sir pentru a ajunge la
InfoAcademy SQL 2015
23
lungimea dorita)

Functii pentru siruri de caractere (continuare)


Eliminarea spatiilor marginale
- LTRIM(sir) - elimina spatii aflate la inceputul irului primit ca
argument;
- RTRIM(sir) - analog, dar pentru spatiile de la sfrit;
- TRIM(sir) - elimina spatiile aflate la inceputul si sfritul irului
primit ca argument (efectul combinat al lui LTRIMO si RTRIM()).
Conversii litere mici/mari
- LCASE(sir) / LOWER(sir) - returneaza irul primit ca argument,
majusculele tranformate in litere mici;
- UCASE(sir) / UPPER(sir)
InfoAcademy
SQL 2015
- conversia
inversa.

24

Functii pentru siruri de caractere (continuare)


Exemplul 5.13
Decuparea unui sir dintr-un sir dat
- SUBSTR(sir, pozitie_inceput) - returneaza subsirul ce se intinde
de la poziia specificata din irul original pana la sfritul acestuia.
Poziiile se numeroteaz de la 1. Daca poziia este negative se
numara de la sfarsit;
- SUBSTR(sir, pozitie_inceput, lungime) - funcioneaz pe
acelai principiu ca mai sus, insa sunt returnate doar lungime
caractere numrate de la poziia de inceput
- LEFT(sir,N) - primele N caractere ale irului (echivalent cu
SUBSTR(sir,1,N));
- RIGHT(sir, N) - ultimele N caractere ale irului ((echivalent cu
SUBSTR(sir,-N));
- MID(sir, poziie, lungime) - echivalent cu SUBSTRING(sir,
InfoAcademy SQL 2015
25
poziie, lungime);

Functii pentru siruri de caractere (continuare)


Exemplul 5.131-2
Modificarea unui sir de caractere
- INSERT(sir, poziie, numar_caractere, nlocuitor) - inlocuieste
un subsir cu altul. Subsirul de inlocuit este specificat prin
argumentele 2 si 3 (poziie de inceput si lungime);
- REPLACE(sir, de_inlocuit, nlocuitor) - inlocuieste toate
apariiile subsirului de inlocuit cu cel inlocuitor.
Conversia setului de caractere
- CONVERT(sir USING charset_nou) - produce, pe baza irului
primit ca prim argument, un nou sir de caractere ce folosete
charset-ul cerut.
InfoAcademy SQL 2015

26

Functii pentru prelucrarea valorilor de tip temporal


Data / ora curenta
- CURDATE() / CURRENT_DATE() / CURRENT_DATE - returneaza
data curenta, in format AAAA-LL-ZZ;
- CURTIME(),CURRENT_TIME(), CURRENT_TIME - raportarea orei
curente, sub forma
HH:MM:SS;
- NOW() / CURRENT_TIMESTAMP() / CURRENT_TIMESTAMP returneaza momentul de timp curent, sub forma
AAAA-LL-ZZ
00:MM:SS.

InfoAcademy SQL 2015

27

Functii pentru prelucrarea valorilor de tip temporal


(continuare)
Extragerea elem component ale unei date / ore
- YEAR(data) - returneaza anul component al datei primite ca
argument;
- MONTH(data) - returneaza luna componenta a datei primite ca
argument, intre 1 si 12;
- DAY(date) / DAYOFMONTH(data) - returneaza ziua din luna a
datei primite a argument, intre 1 si 31;
- DAYOFWEEK(data) - indexul zilei din spatamana, cu
1=Duminica,2=Luni,7=Sambata;
- WEEKDAY(data) - acelai lucru, dar cu 0=Luni, 1=Marti,...,
6=Duminica;
- DAYOFYEAR(data) - returneaza numrul zilei din an (1-366);
- HOUR(timp) - returneaza componenta ora" a argumentului.
2015
28
Pentru ora din zi, acestaInfoAcademy
este inSQLintervalul
0-23, dar pentru

Functii pentru prelucrarea valorilor de tip temporal


(continuare)
Operatii aritmetice cu date si interval de timp
- DATE_ADD(data, INTERVAL expresie unitate_masura) adaug intervalul de timp specificat la data primita ca prim
argument (date sau datetime), returnand noua data rezultata.
Unitatea de msura poate fi HOUR, MINUTE, SECOND, YEAR, DAY
etc.; !!!
- DATE_SUB(data, INTERVAL expresie unitate_masura) analog, dar scade intervalul de timp specificat;
- ADDTIME(data, interval_timp) - adaug intervalul de timp la
data specificata producnd un nou moment de timp. Intervalul de
timp poate fi negativ, rezultatul fiind cel de ateptat - efectuarea
unei scderi. Diferena fata de DATE_ADD()/DATE_SUB() este ca se
pot specifica intervale care nu cuprind numai numere intregi de
29
zile, ore, minute etc.; InfoAcademy SQL 2015

Functii pentru prelucrarea valorilor de tip temporal


(continuare)
Determinarea sau impunerea formatului datelor de tip temporal
- DATE_FORMAT(data,format) - returneaza o reprezentare a datei
primite ca prim argument in formatul dorit. Formatul se specifica sub
forma unui string ce conine secvene de forma %c (unde c este un
caracter). lata cteva dintre secvenele utile:
- %Y - anul, reprezentat pe 4 cifre. Daca se doresc numai doua se
utilizeaz %y
- %m - luna, pe 2 cifre (01-12). Pentru 1-2 cifre in functie de context
se folosete %c
- %d - ziua reprezentata pe 2 cifre. Pentru 1-2 cifre se folosete %e
- %H - ora din zi, 2 cifre. Pentru 1-2 cifre se poate folosi %k
- %i - minutul, 2 cifre (00-59)
- %s sau %S - secunda, 2 cifre (00-59)
InfoAcademy SQL 2015

30

Functii pentru prelucrarea valorilor de tip temporal


(continuare)
- STR_TO_DATE(sir, format) - produce o valoare de tip data
calendaristica pe baza unui sir de caractere ce specifica data, primit
ca prim argument, si a formatului in care se afla aceasta data, sub
forma argumentului secund. Specificarea formatului respecta aceleai
reguli ca in cazul funciei DATE_FORMAT().
Exemplul 5.141

InfoAcademy SQL 2015

31

Alte functii de interes


Informatii despre server si sesiunea curenta
- USER() - raporteaz username-ul folosit pentru a deschide
sesiunea curenta;
- DATABASE() / SCHEMA() - raporteaz baza de date curenta (cea
stabilita cu comanda USE);
- VERSION() - raporteaz versiunea serverului.
ID-ul ultimei inregistrari introduce in sesiunea curenta
- LAST_INSERT_ID() - raporteaz valoarea de AUTO_INCREMENT
generata automat la precedenta operaie INSERT. Este necesara
atunci cand avem de introdus doua inregistrari consecutive care
depind una de alta - id-ul asignat primeia figureaz ca parte a celei
de-a doua.
InfoAcademy SQL 2015

32

Functii de agregare - Conceptul de agregare


- Functiile de agregare realizeaza compunerea valorilor pe verticala;
- Actioneaza asupra unui grup de inregistrari ;
- Returneaza o singura valoare pe grup de inregistrari;
- Functia se apeleaza o singura data, spre deosebire de cele simple,
care se apeleaza pentru fiecare inregistrare;
- Se aplica doar pentru instructiuni SELECT.

InfoAcademy SQL 2015

33

Operatii matematice pe seturi de rezultate


- MIN(expresie) - returneaza valoarea minima a expresiei dintre
toate valorile rezultate prin evaluarea expresiei pentru fiecare
inregistrare in parte;
- MAX(expresie) - returneaza valoarea maxima;
- SUM(expresie) - suma valorilor unei expresii pentru toate
nregistrrile;
- AVG(expresie) - valoarea medie a tuturor valorilor expresiei
calculate pentru toate inregistrarile returnate, sau NULL in cazul in
care nu exista inregistrari.
Exemplul 5.151
InfoAcademy SQL 2015

34

Numararea valorilor din seturi de rezultate


- COUNT(*) - numra rndurile unui set de rezultate;
- COUNT(expresie) - returneaza numrul de valori nenule ale
expresiei, expresia fiind evaluata pe rand pentru fiecare
inregistrare din setul de rezultate;
- COUNT(DISTINCT expresie) - numrul de valori nenule unice.
Atunci cand valorile sunt de tip string, egalitatea valorilor depinde de
character set-ul si collation-ul ataate.
Exemplul 5.161
InfoAcademy SQL 2015

35

Functii de agregare pentru siruri de caractere


- GRUP_CONCAT()
Sintaxa generala:
GRUP_CONCAT( [DISTINCT] expresie1 [, expresie2,...]
[ORDER BY]
[SEPARATOR])
- Poate primi ca argument una sau mai multe expresii;
- Valorile sunt evaluate pentru toate inregistrarile, val NULL sunt
ignorate;
- DISTINCT apare imediat dupa paranteza rotunda, inaintea
argumentelor functiilor);
InfoAcademy SQL 2015

36

Clauza GROUP BY
- Limiteaza aplicarea functiilor de agregare la o parte din
inregistrarile tabelei;
- Poate avea ca argument una sau mai multe expresii, despartite
prin virgula;
- Se plaseaza imediat dupa clauza WHERE sau FROM, daca nu exista
WHERE si inainte de ORDER BY;
- Atentie sa nu lipseasca functia de agregare (nu se poate aplica);
- Atentie sa nu selectam si alte coloane, care sa nu poata returna o
singura valoare;
InfoAcademy SQL 2015

37

Clauza HAVING
- Conditiile din clauza WHERE sunt utilizate pentru a filtra rezultatele
obtinute cu SELECT;
- Functiile de agregare actioneaza dupa ce avem deva result-set-ul.
Clauza HAVING actioneaza direct asupra result-set-ului facand
acelasi lucru ca WHERE.
- Etapele unei interogari SELECT cu WHERE, GROUP BY SI HAVING:
- Se aplica clauza WHERE: sunt pastrate inreg care respecta
criteriile WHERE;
- Se aplica clauza GROUP BY, inregistrarile sunt grupate conform
expresiilor din aceasta clauza;
- Se aplica functiile de agregare, care vor produce cate o valoare
pentru fiecare grup creat;
- Se aplica clauza HAVING si se pastreaza inreg care corespund
InfoAcademy SQL 2015
38
criteriilor acesteia