Table of Contents

Laborator 07 - Funcții SQL (II)

Obiective

Materiale ajutătoare

Resurse BD

Funcții de conversie

Aceste funcții fac converia de la un tip de date la un alt tip de date:

Funcție Descriere funcție
TO_CHAR(expr[,format[,’nlsparams’]]) face conversia lui expr (care poate avea tipul fie numeric, fie dată) la VARCHAR2
TO_DATE(expr[,format[,’nlsparams’]]) face conversia lui expr (cu tipul CHAR sau VARCHAR2) în formatul DATE
TO_NUMBER(expr [,format[,’nlsparams’]]) face conversia lui expr la o valoare de tip NUMBER

Parametrul format specifică formatul în care se va face afișarea, dacă lipsește se ia formatul implicit. Pentru TO_NUMBER specifică formatul în care este dat expr. Parametrul ‘nlsparam’ este utilizat pentru a seta parametrii de sistem să evalueze expresia în diferite limbi, formate, etc.

Ex 1. Să se selecteze toți angajații care au venit în firmă în 1982.

Formatul pentru numere (se pot folosi toate cu comanda COLUMN):

Format Seminificație
9 Numere (nr. de 9 determină lungimea de afișare)
0 Afișează 0 de la început
$ Semnul $
. Punct decimal
, Virgulă
MI Semnul minus la dreapta
PR Paranteze pentru numere negative
EEEE Notație științifică
V Înmulțire cu 10 (nr. de 9 de după V specifică de câte ori se face înmulțirea)
B Afișează valori 0 ca blancuri
D Specifică câte zerouri să fie înainte și după delimitatorul decimal

Funcții diverse

GREATEST(exp1[,expr2[,…]]) returnează cel mai mare elemet din listă
LEAST(exp1[,expr2[,…]]) returnează cel mai mic element din listă

DECODE și CASE

Această funcție are efectul unei unei structuri case sau if-then-else.

Ex 2. Să se caluleze o primă pentru angajații din departamentul 20 în funcție de jobul angajatului.

Ex 3. Să se calculeze o primă în funcție de vechime pentru angajații din departamentul 20.

Expresiile CASE pot fi folosite în clauza SELECT sau WHERE. Ele returnează o valoare (a nu se confunda cu instrucțiunea CASE):

Sintaxa 1:

CASE expr
WHEN value1 THEN retval_1
WHEN value2 THEN retval_2
...
[ELSE retval_k]
END

Sintaxa 2:

CASE 
WHEN expr_1 THEN retval_1
WHEN expr_2 THEN retval_2
...
[ELSE retval_k]
END

Valoarea null trebuie obligatoriu convertită la 0 atunci când se fac operații aritmetice. Dacă această conversie nu se face, atunci rezultatul operației aritmetice va fi întotdeauna null.

Funcțiile pot fi imbricate, ordinea de execuție este din interior spre exterior.

Pentru a afla userul curent se folosește funcția user:

SELECT USER FROM dual;

Funcții de grup

Aceste funcții returnează rezultate pe grupuri de înregistrări, nu pe o singură înregistrare, cum au fost cele prezentate până acum. Gruparea se face folosind clauza GROUP BY într-o comandă SELECT și în acest caz toate elementele listei, cu exceptia funcțiilor de grupare, trebuie cuprinse în clauza de grupare. Pentru a se pune condiții folosind funcțiile de grup acestea trebuie să apară în clauza HAVING, nu în clauza WHERE. Se poate folosi operatorul DISTINCT pentru a selecta doar elemente distincte din listă, dar se poate folosi și operatorul ALL pentru a selecta și duplicatele. Funcțiile de grup se mai numesc și funcții de agregare (SQL Aggregate Functions).

Ex 4. Afișați media salariilor pentru toate valorile din tabel, iar apoi doar pentru salariile distincte. Rezultatul este diferit deoarece există salarii duplicate.

Ex 5. Să se calculeze salariul mediu pentru fiecare departament.

Ex 6. Să se calculeze venitul lunar mediu pentru fiecare departament. Afișati id_dep și venitul lunar doar pentru departamentele care au venitul lunar mediu mai mare de 2000. Pentru a aplica o condiție bazată pe funcții de agregare, folosim HAVING în loc de WHERE.

Ex 7. Să se afișeze numărul angajatilor care au primit salariu pentru fiecare departament.

Ex 8. Să se afișeze departamentele care au cel puțin două funcții distincte pentru angajați.

Ex 9. Să se afișeze salariul minim, maxim și suma slariilor pentru fiecare departament.

Ex 10. Să se afișeze varianția standard și deviația standard a salariilor pentru fiecare departament.

Exerciții individuale

Ex 1. Să se facă o listă cu:

Ex 2. Să se facă o listă cu:

Prima se acorda doar pentru angajații care au gradul salarial 2 sau 4 și au venit în firmă în același an cu șeful lor

unde n este vechimea în firmă calculată în luni și c este o valoare introdusă de la tastatură (folosiți 0.15 pentru testare).

Ordonați rezultatele crescător dupa numele angajatului.