Sunteți pe pagina 1din 5

BAZE DE DATE – SEMINAR 6

___________________________________________________________________________

UTILIZAREA FUNCTIILOR PREDEFINITE IN INTEROGARI

 Funcţii de tip single-row (sau scalare). O funcţie single-row întoarce un singur rezultat
pentru fiecare rând al tabelei interogate sau view
 Funcţii de grup (sau agregate). O funcţie de grup întoarce un singur rezultat pentru un
grup de rânduri interogate. Funcţiile de grup pot apare în clauza HAVING.

FUNCTII SINGLE-ROW

Funcţii de tip caracter

Functia LOWER() , UPPER(), INITCAP()

1. Sa se afiseze cu litere mari denumirea departamentelor din locatia 1700:

…………………………

2. Sa se afiseze salariatii al caror nume incepe cu litera s

…………………………

3. Sa se afiseze toti angajatii cu numele Smith utilizand functiile INITCAP, UPPER,


LOWER

…………………………

Operatorul de concatenare (||)

4. Să se afişeze denumirea produsului şi stocul disponibil

SELECT 'Produsul: ' || INITCAP(denumire_produs) || ' are pretul_minim ' || pret_min


produs_pret_minim
FROM produse;

Funcţia CONCAT() , funcţia LENGTH() , funcţia SUBSTR()

5. Să se afişeze id_client, numele clientilor concatenată cu sexul acestora şi lungimea


prenumelui, nivel_venituri numai pentru clientii cu venituri in categoria F: 110000 -
129999
SELECT id_client, CONCAT(nume_client,sex), LENGTH(prenume_client), nivel_venituri
FROM clienti
WHERE SUBSTR(nivel_venituri,1,1)='F';
INSTR(), REPLACE(), REVERSE()

1
BAZE DE DATE – SEMINAR 6
___________________________________________________________________________

Funcţii de tip numeric

Funcţia ROUND(), TRUNC()

6. Să se afişeze numărul 45,923 rotunjit la două zecimale si rotunjit la numar intreg.


Sa se aplice si functia TRUNC.

SELECT ROUND(45.923,2), ROUND(45.923,0) FROM DUAL;


SELECT TRUNC(45.923,2), TRUNC(45.923,0) FROM DUAL;

SIGN(), POWER(), MOD(), SQRT(),CORR(),STDDEV()


Funcţii de tip dată calendaristică

Funcţia SYSDATE

7. Să se afişeze perioada de timp corespunzătoare (în săptămâni) între data încheierii


comenzii şi data curentă:

SELECT nr_comanda, (SYSDATE-data)/7 saptamani


FROM comenzi;

8. Afisati data curenta (se selecteaza data din tabela DUAL):

SELECT SYSDATE data_curenta FROM DUAL;

Funcţiile MONTHS_BETWEEN() , ADD_MONTHS() , NEXT_DAY() , LAST_DAY()

9. Să se afişeze comenzile, data încheierii comenzilor, numărul de luni între data curentă
şi data încheierii, următoarea zi de vineri după data încheierii, ultima zi din luna din
care face parte data încheierii, precum şi data corespunzătoare după 2 luni de la data
încheierii comenzii

…………………………

10. Să se afişeze comenzile incheiate in luna trecuta:

SELECT nr_comanda, data FROM comenzi


WHERE round(MONTHS_BETWEEN(sysdate, data))=1;

Funcţia ROUND(), TRUNC()

11. Să se afişeze comenzile incheiate in 2000. Se va rotunji data încheierii la prima zi din
luna corespunzătoare dacă data încheierii este în prima jumatate a lunii sau la prima zi din
luna următoare:

SELECT nr_comanda, data, ? (data, 'MONTH') FROM comenzi


WHERE data LIKE '%-00%';

2
BAZE DE DATE – SEMINAR 6
___________________________________________________________________________

Funcţii de conversie

Funcţia TO_CHAR

12. Să se afişeze comenzile si data încheierii in formatul initial si in format “MM/YY”

SELECT nr_comanda, data, TO_CHAR(data, 'MM/YY') data_incheierii_comenzii


FROM comenzi;

Funcţia TO_DATE

13. Să se afişeze comenzile incheiate intre 15 ianuarie si 15 decembrie 1999.

SELECT nr_comanda, data


FROM comenzi
WHERE data BETWEEN TO_DATE( 'January 15, 1999', 'Month dd,YYYY') AND
TO_DATE( 'December 15, 1999', 'Month dd,YYYY');

Funcţia EXTRACT()

14. Sa se afiseze comenzile incheiate in anii 1997 si 1998.

SELECT nr_comanda, data


FROM comenzi
WHERE EXTRACT(YEAR FROM data) IN (1997, 1998);
15. Sa se afiseze comenzile incheiate in lunile iulie si august.

SELECT nr_comanda, data


FROM comenzi

3
BAZE DE DATE – SEMINAR 6
___________________________________________________________________________

WHERE EXTRACT(MONTH FROM data) IN (7,8);

Functiile NVL, NVL2, NULLIF, COALESCE


NVL
NVL(comision,0)
NVL(data_angajarii,'01-JAN-97')
NVL(id_functia,'Nu_exista_functia')

16. Sa se calculeze veniturile anuale ale angajatilor


SELECT nume, salariul*12 + salariul*12*NVL(comision,0) venit_anual
FROM angajati;

NVL2
17. Sa se afiseze angajatii care au comision (1) si pe cei care nu au comision (0).
SELECT nume, NVL2(comision, 1, 0)
FROM angajati;

NULLIF
18. Sa se afiseze lungimea numelui, lungimea prenumelui, daca acestea sunt egale sa se
returneze nul ca rezultat, iar daca nu sunt egale se va returna lungimea numelui.
SELECT nume, LENGTH(nume), prenume, LENGTH(prenume),
NULLIF(LENGTH(nume), LENGTH(prenume)) rezultat
FROM angajati;

COALESCE
19. Sa se afiseze id-ul managerului fircarui angajat, daca acesta este nul, se va afisa
comisionul, iar daca si acesta este nul se va afisa -1.
SELECT nume, prenume, COALESCE(id_manager,commission,-1)
FROM angajati;

FUNCŢII DE GRUP

AVG([DISTINCT|ALL] n) – calculeaza media aritmetica a valorilor


COUNT(* | [DISTINCT|ALL] expr) – intoarce numarul total al valorilor
MAX([DISTINCT|ALL] expr) – intoarce valoarea maxima
MIN([DISTINCT|ALL] expr) – intoarce valoarea minima
SUM([DISTINCT|ALL] n) – calculeaza suma valorilor

Se utilizeaza urmatoarele clauze:


GROUP BY – grupeaza datele in functie de un anumit camp;
ORDER BY – ordoneaza datele in functie de un anumit camp;
HAVING – permite stabilirea unor criterii de selectie asupra functiilor de grup;

4
BAZE DE DATE – SEMINAR 6
___________________________________________________________________________

Exemple:
1. Să se afişeze valoarea maximă, valoarea medie, valoarea minimă şi valoarea totală a
produselor comandate:

…………………………

2. Să se afişeze data primei comenzi încheiate şi data celei mai vechi comenzi încheiate:

…………………………
3. Să se afişeze numărul de produse al căror pret_min>350:

…………………………

4. Sa se afiseze numarul de salarii (distincte) din tabela angajati.

…………………………

5. Să se afişeze numărul total de comenzi incheiate:

…………………………

6. Să se afişeze în cate comenzi apare produsul cu codul 3124:

…………………………

7. Să se afişeze cantitatea medie vândută din fiecare produs. Sa se ordoneze după


cantitate (se utilizeaza functia AVG() si clauza GROUP BY pentru gruparea datelor in
functie de id_ul produsului, iar ordonarea se realizeaza cu ajutorul functiei ORDER
BY).

…………………………

8. Să se afişeze produsele şi cantitatea medie vândută numai pentru acele produse a căror
cantitate medie este mai mare de 25 (conditia se specifica in clauza HAVING si nu in
clauza WHERE deoarece este utilizata functia de grup AVG si conditia este
AVG(cantitate)>25).

…………………………

9. Sa se calculeze valoarea totala a fiecarei comenzi si sa se sorteze descrescator in


functie de valoare:

…………………………

10. Sa se afiseze numai comenzile care au valoarea cuprinsa intre 1000 si 3000 (conditia
va fi mentionata in clauza HAVING deoarece se utilizeaza functia de grup SUM):

…………………………

S-ar putea să vă placă și