Sunteți pe pagina 1din 34

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI

FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

BAZE DE DATE

Limbaje relaţionale pentru


definirea şi manipularea datelor.
Limbajul SQL.
Limbajul SQL-Oracle

Comandă LMD Descriere


SELECT regăseşte date din una sau mai multe tabele

INSERT adaugă o înregistrare nouă într-o tabelă

UPDATE modifică valori asociate coloanelor unei tabele


realizează fie modificări ale datelor, fie adăugări de înregistrări
MERGE dintr-o altă tabelă, în funcţie de o condiţie
DELETE şterge înregistrări dintr-o tabelă

2
Limbajul SQL-Oracle
Interogarea datelor

Clauze în SELECT Descriere


restricţionează liniile care se returnează pe baza unui
WHERE condiţie criteriu specificat în condiţia de selecţie
structurează rezultatul într-o manieră ierarhică
clauze de ordonare ierarhică (asemănător cu o organigramă)
grupează liniile în scopul identificării valorilor comune
GROUP BY coloane_grupare grupurilor (valori agregate calculate prin funcţii de grup)
restricţionează grupurile formate prin clauza GROUP BY
HAVING condiţie pe baza unei condiţii asupra funcţiilor de grup
ORDER BY coloane_ordonare sortează liniile (implicit ascendent)

3
Limbajul SQL-Oracle
Precedenţa operatorilor

Operator
*, /, -,+
= , >= , > , <= , < , <> , != , IS , LIKE , IN
BETWEEN
NOT
AND
|| , OR

4
Limbajul SQL-Oracle
Interogarea datelor

Utilizarea pseudocoloanelor în comenzile SQL:


 ROWNUM, ROWID, CONNECT_BY_ISLEAF,
CONNECT_BY_ISCYCLE

SELECT ROWNUM, id_angajat, nume, salariul


FROM angajati;

ROWNUM ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ----------
1 100 King 24000,00
2 101 Kochhar 17000,00
..............
5
Limbajul SQL-Oracle
Interogarea datelor

SELECT ROWNUM, id_angajat, nume, salariul


FROM angajati
ORDER BY salariul;

ROWNUM ID_ANGAJAT NUME SALARIUL


---------- ---------- ------------------------- ----------
33 132 Olson 2100,00
29 128 Markle 2200,00
.............

6
Limbajul SQL-Oracle
Interogarea datelor

Utilizarea expresiilor în comenzile SQL:


 Pe lângă specificarea coloanelor, într-o comandă SELECT pot fi incluse
şi expresii

 O expresie poate contine operatori, funcţii SQL

SELECT id_angajat, nume, salariul, salariul * 1.5


FROM angajati
WHERE comision IS NOT NULL
ORDER BY nume;

7
Limbajul SQL-Oracle
Interogarea datelor

Utilizarea expresiilor în comenzile SQL este permisă în:


 lista de coloane a unei comenzi SELECT
 clauzele WHERE, HAVING şi ORDER BY dintr-o comandă SELECT
 clauza VALUES a unei comenzi INSERT
 clauzele SET şi WHERE ale unei comenzi UPDATE
 clauza WHERE a unei comenzi DELETE

SELECT id_angajat, nume, salariul, salariul * 1.5


FROM angajati
WHERE comision IS NOT NULL
AND salariul*1.5>16000
ORDER BY salariul*1.5 desc;

8
Limbajul SQL-Oracle
Interogarea datelor

Tabela DUAL
 tabelă existentă în orice BD Oracle
 are o singură coloană: DUMMY de tip VARCHAR2(1)
 are o singură linie, conţinând valoarea x
 utilizată pentru testarea unor comenzi SELECT care nu fac referiri
neapărat la o tabelă dintr-o BD

SELECT 1000* 1.5


FROM dual;

SELECT SYSDATE
FROM dual;
9
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care manipulează şiruri de caractere
Sintaxă Rezultat
UPPER (s) / LOWER (s) şir de caractere

INITCAP (s) şir de caractere

CONCAT (s1,s2) şir de caractere

LPAD (s1,n,s2) / RPAD (s1,n,s2) şir de caractere

LTRIM (s1,s2) / RTRIM (s1,s2) şir de caractere


TRIM (leading/trailing s1 FROM
şir de caractere
s2)
LENGTH (s) număr

INSTR (s1,s2, poz,n) număr

SUBSTR (s,poz,n) şir de caractere


10
REPLACE (s1,s2,s3) şir de caractere
Limbajul SQL-Oracle
Funcţii SQL

SELECT UPPER('oracle'), LOWER('oracle'), INITCAP('oracle')


FROM dual;

UPPER('ORACLE') LOWER('ORACLE') INITCAP('ORACLE')


--------------- --------------- -----------------
ORACLE oracle Oracle

SELECT SUBSTR('oracle database',1,3), SUBSTR('oracle


database',-8,4)
FROM dual;

SUBSTR('ORACLEDATABASE',1,3) SUBSTR('ORACLEDATABASE',-8,4)
---------------------------- -----------------------------
ora data

11
Limbajul SQL-Oracle
Funcţii SQL

SELECT CONCAT('Oracle ' ,'Database'),


LPAD('Oracle',15,'*'), RTRIM('Oracle****','*'),
TRIM(BOTH '*' FROM '**Oracle****'), LENGTH('Oracle'),
INSTR('Oracle Database','a',1,3)
FROM dual;
CONCAT('ORACLE','DATABASE') LPAD('ORACLE',15,'*') RTRIM('ORACLE****','*')
--------------------------- --------------------- -----------------------
Oracle Database *********Oracle Oracle

TRIM(BOTH'*'FROM'**ORACLE****' LENGTH('ORACLE')
------------------------------ ----------------
Oracle 6

INSTR('ORACLEDATABASE','A',1,3
------------------------------
11
12
Limbajul SQL-Oracle
Funcţii SQL

SELECT REPLACE('oracle database','a'),


REPLACE('oracle database','a','*')
FROM dual;

REPLACE('ORACLEDATABASE','A') REPLACE('ORACLEDATABASE','A','
----------------------------- ------------------------------
orcle dtbse or*cle d*t*b*se

13
Ce afişează comanda următoare?

SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),


LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;

14
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care utilizeaza valori numerice

Sintaxă Rezultat
ROUND (n,i) număr

TRUNC (n,i) număr

MOD (n1,n2) număr

SQRT(n) număr

ABS(n) număr

POWER(n,m) număr

15
Limbajul SQL-Oracle
Funcţii SQL

SELECT ROUND(3.148,2), TRUNC(3.148,2), MOD(11,3)


FROM dual;

ROUND(3.148,2) TRUNC(3.148,2) MOD(11,3)


-------------- -------------- ----------
3,15 3,14 2

16
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL care utilizeaza date calendaristice
Sintaxă Rezultat
SYSDATE dată calendaristică

ROUND (d,i) dată calendaristică

TRUNC (d,i) dată calendaristică

NEXT_DAY (d,s) dată calendaristică

LAST_DAY (d) dată calendaristică

ADD_MONTHS (d,n) dată calendaristică

MONTHS_BETWEEN (d1,d2) număr


EXTRACT (DAY FROM d)
EXTRACT (MONTH FROM d) număr
EXTRACT (YEAR FROM d)
17
Limbajul SQL-Oracle
Funcţii SQL

SELECT SYSDATE, ROUND(SYSDATE,'MM'), ROUND(SYSDATE,'YY'), TRUNC(SYSDATE,'MM'),


TRUNC(SYSDATE,'YY')
FROM dual;

SYSDATE ROUND(SYSDATE,'MM') ROUND(SYSDATE,'YY')


----------- ------------------- -------------------
21.11.2013 01.12.2013 01.01.2014

TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')
------------------- -------------------
01.11.2013 01.01.2013

SELECT EXTRACT (YEAR FROM SYSDATE)


FROM dual;

EXTRACT(YEARFROMSYSDATE)
------------------------
2013

18
Limbajul SQL-Oracle
Funcţii SQL

SELECT SYSDATE, NEXT_DAY(SYSDATE,'Vineri'),


LAST_DAY(SYSDATE)
FROM dual;

SYSDATE NEXT_DAY(SYSDATE,'VINERI') LAST_DAY(SYSDATE)


----------- -------------------------- -----------------
21.11.2013 22.11.2013 30.11.2013

SELECT ADD_MONTHS(SYSDATE,4),
MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,4),SYSDATE)
FROM dual;

ADD_MONTHS(SYSDATE,4) MONTHS_BETWEEN(ADD_MONTHS(SYSD
--------------------- ------------------------------
21.03.2014 02:19:10 4

19
Limbajul SQL-Oracle
Funcţii SQL

Sintaxă
NVL (e1,e2)

NULLIF (e1,e2)

DECODE (e,expresii_de_căutare,d)

CASE expr WHEN cond THEN rez ... ELSE rez END

20
Limbajul SQL-Oracle
Funcţii SQL

SELECT 14+NULL-4, NVL(NULL,0), 14-NVL(NULL,0)-4


FROM dual;

14+NULL-4 NVL(NULL,0) 14-NVL(NULL,0)-4


---------- ----------- ----------------
0 10

21
Limbajul SQL-Oracle
Funcţii SQL

SELECT nume, salariul+comision "Venit total"


FROM angajati
WHERE comision IS NULL;

NUME Venit total


------------------------- -----------
King
Kochhar
...

SELECT nume, salariul+NVL(comision,0) "Venit total"


FROM angajati
WHERE comision IS NULL;
NUME Venit total
------------------------- -----------
King 24000
Kochhar 17000
...

22
Limbajul SQL-Oracle
Funcţii SQL

SELECT pret_lista, pret_min, NULLIF(pret_lista,pret_min)


FROM produse;

PRET_LISTA PRET_MIN NULLIF(PRET_LISTA,PRET_MIN)


---------- ---------- ---------------------------
221,00 180,00 221
73,00 73,00
299,00 244,00 299
399,00 355,00 399

23
Limbajul SQL-Oracle
Funcţii SQL

SELECT denumire_produs,pret_lista,
CASE
WHEN pret_lista < 100 THEN 'pret mic '
WHEN pret_lista BETWEEN 100 AND 200 THEN 'pret mediu '
ELSE 'pret mare'
END Calificativ
FROM produse;

DENUMIRE_PRODUS PRET_LISTA CALIFICATIV


------------------------------------------------- ---------- -----------
DIMM - 128 MB 305,00 pret mare
DIMM - 16 MB 124,00 pret mediu
DIMM - 1GB 599,00 pret mare
Battery - EL 44,00 pret mic
.......

24
Limbajul SQL-Oracle
Funcţii SQL

SELECT denumire_produs, categorie, pret_lista,


(CASE LOWER(categorie)
WHEN 'hardware4' THEN 0.2
WHEN 'hardware2' THEN 0.15
ELSE 0
END) * pret_lista Majorare_pret
FROM produse
WHERE LOWER(categorie) LIKE 'h%' ;

DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET


--------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8
.......

25
Limbajul SQL-Oracle
Funcţii SQL

SELECT denumire_produs, categorie, pret_lista,


DECODE(LOWER(categorie),'hardware4' ,0.2,'hardware2' ,0.15,0)
* pret_lista Majorare_pret
FROM produse
WHERE LOWER(categorie) LIKE 'h%' ;

DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET


--------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8
.......

26
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL de conversie între tipuri de date

Sintaxă
TO_NUMBER(s,format)

TO_CHAR (n,format)

TO_CHAR (d,format)

TO_DATE (s,format)

TO_TIMESTAMP (s,format)

27
Limbajul SQL-Oracle
Funcţii SQL

SELECT TO_NUMBER('$17,000.23', '$999,999.99')


FROM dual;

TO_NUMBER('$17,000.23','$999,99.99')
------------------------------------
17000,23

SELECT TO_CHAR(198, '$999,999.99')


FROM dual;

TO_CHAR(198,'$999,999.99')
--------------------------
$198.00

28
Limbajul SQL-Oracle
Funcţii SQL

SELECT TO_CHAR(SYSDATE,'DAY, DD MONTH YYYY')


FROM dual;

TO_CHAR(SYSDATE,'DAY,DDMONTHYYYY')
----------------------------------
JOI , 21 NOIEMBRIE 2013

SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY HH:MI:SS')


FROM dual;

TO_CHAR(SYSDATE,'DD-MON-YYYYHH
------------------------------
21-NOI-2013 01:11:02

29
Limbajul SQL-Oracle
Funcţii SQL

SELECT TO_DATE('23-10-2010','DD-MM-YYYY')
FROM dual;

TO_DATE('23-10-2010','DD-MM-YY’)
---------------------------------
23.10.2010

30
Limbajul SQL-Oracle
Funcţii SQL
Funcţii SQL de grup

Sintaxă
COUNT(e)

SUM(e)

MIN(e)

MAX(e)

AVG(e)

31
Limbajul SQL-Oracle
Funcţii SQL

SELECT COUNT(*) SELECT COUNT(id_angajat)


FROM angajati; FROM angajati;

COUNT(*) COUNT(ID_ANGAJAT)
---------- -----------------
107 107

SELECT COUNT(comision) SELECT COUNT(distinct comision)


FROM angajati; FROM angajati;

COUNT(COMISION)
COUNT(distinct COMISION)
---------------
---------------
35
7

32
Rezolvaţi!
Afişaţi pentru fiecare angajat identificat prin nume numărul total
de comenzi intermediate, precum şi valoarea acestora.

33
CURSUL 9...

 Limbaje relaţionale pentru definirea şi manipularea


datelor. Limbajul SQL. (continuare)

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