Sunteți pe pagina 1din 7

ACADEMIA DE STUDII ECONOMICE BUCURETI

FACULTATEA DE CIBERNETIC, STATISTIC I INFORMATIC ECONOMIC

Limbajul SQL-Oracle

Limbajul SQL-Oracle
Interogarea datelor

BAZE DE DATE
Limbaje relaionale pentru
definirea i manipularea datelor.
Limbajul SQL.

Comand LMD

Descriere

SELECT

regsete date din una sau mai multe tabele

Clauze n SELECT

Descriere

INSERT

adaug o nregistrare nou ntr-o tabel

WHERE condiie

restricioneaz liniile care se returneaz pe baza unui


criteriu specificat n condiia de selecie

UPDATE

modific valori asociate coloanelor unei tabele


realizeaz fie modificri ale datelor, fie adugri de nregistrri
dintr-o alt tabel, n funcie de o condiie de potrivire

clauze de ordonare ierarhic

MERGE

structureaz rezultatul ntr-o manier ierarhic


(asemntor cu o organigram)

GROUP BY coloane_grupare

DELETE

terge nregistrri dintr-o tabel

grupeaz liniile n scopul identificrii valorilor comune


grupurilor (valori agregate calculate prin funcii de grup)

HAVING condiie

restricioneaz grupurile create prin clauza GROUP BY


pe baza unei condiii asupra funciilor de grup

ORDER BY coloane_ordonare

sorteaz liniile (implicit ascendent)

BUCURETI
2015-2016

Rezolvai!

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Precedena operatorilor

Interogarea datelor

Se consider tabela: PORTS (PORT_ID, PORT_NAME, COUNTRY, CAPACITY), avnd


urmtoarele nregistrri:

PORT_ID

PORT_NAME

COUNTRY

CAPACITY

Operator

1
2
3
4
5
6

Galveston
San Diego
San Francisco
Los Angeles
San Juan
Grand Cayman

USA
USA
USA
USA
USA
UK

4
4
3
4
3
3

*, /, -,+

Utilizarea pseudocoloanelor (valori atribuite automat de ctre


sistem fiecrei tabele) n comenzile SQL:

= , >= , > , <= , < , <> , != , IS , LIKE , IN

ROWNUM

BETWEEN

Ce rezultat va produce urmtoarea interogare SQL:

NOT

SELECT ROWNUM, id_angajat, nume, salariul

AND

FROM angajati;

|| , OR
SELECT *
FROM PORTS
WHERE PORT_NAME LIKE 'San%'
OR PORT_NAME LIKE 'Grand%'
AND CAPACITY = 4;

ROWNUM ID_ANGAJAT NUME


SALARIUL
---------- ---------- ------------------------- ---------1
100 King
24000,00
2
101 Kochhar
17000,00
..............
4

Limbajul SQL-Oracle

Rezolvai!

Interogarea datelor

Rezolvai!
Afiai primii 3 angajai cu cel mai mic salariu.

Afiai primii 3 angajai cu cel mai mic salariu.


SELECT ROWNUM, id_angajat, nume, salariul

SELECT ROWNUM, id_angajat, nume, salariul


FROM angajati
WHERE ROWNUM <= 3
ORDER BY salariul;

FROM angajati
ORDER BY salariul;
ROWNUM ID_ANGAJAT NUME
SALARIUL
---------- ---------- ------------------------- ---------33
132 Olson
2100,00
29
128 Markle
2200,00
.............

ROWNUM ID_ANGAJAT NUME


SALARIUL
---------- ---------- ------------------------- ---------2
101 Kochhar
17000,00
3
102 De Haan
17000,00
1
100 King
24000,00

Rezolvai!
Afiai primii 3 angajai cu cel mai mic salariu.

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Interogarea datelor

Interogarea datelor

Utilizarea expresiilor n comenzile SQL:

Utilizarea expresiilor n comenzile SQL este permis n:

SELECT ROWNUM, id_angajat, nume, salariul


FROM (SELECT id_angajat, nume, salariul
FROM angajati
ORDER BY salariul)
WHERE ROWNUM <= 3;

Pe lng specificarea coloanelor, ntr-o comand SELECT pot fi


incluse i expresii

lista de coloane a unei comenzi SELECT

clauzele WHERE, HAVING i ORDER BY dintr-o comand SELECT

O expresie se poate referi la: literali, operatori, funcii SQL

clauza VALUES a unei comenzi INSERT

clauzele SET i WHERE ale unei comenzi SELECT

clauza WHERE a unei comenzi DELETE

SELECT id_angajat, nume, salariul, salariul * 1.5

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;

FROM angajati

ROWNUM ID_ANGAJAT NUME


SALARIUL
---------- ---------- ------------------------- ---------1
132 Olson
2100,00
2
128 Markle
2200,00
3
136 Philtanker
2200,00

WHERE comision IS NOT NULL


ORDER BY nume;
10

11

12

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Interogarea datelor

Funcii SQL

Funcii SQL care manipuleaz iruri de caractere


Tabela DUAL

Sintax

Descriere

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


FROM dual;

Rezultat

tabel existent n orice BD Oracle

UPPER (s) / LOWER (s)

ir de caractere

are o singur coloan: DUMMY de tip VARCHAR2(1)

INITCAP (s)

ir de caractere

are o singur linie, coninnd valoarea x

CONCAT (s1,s2)

ir de caractere

utilizat pentru testarea unor comenzi SELECT care nu fac referiri


neaprat la o tabel dintr-o BD

LPAD (s1,n,s2) / RPAD (s1,n,s2)

ir de caractere

LTRIM (s1,s2) / RTRIM (s1,s2)

ir de caractere

TRIM (info s1 FROM s2)

ir de caractere

LENGTH (s)

numr

INSTR (s1,s2, poz,n)

numr

SUBSTR (s,poz,n)

ir de caractere

REPLACE (s1,s2,s3)

ir de caractere 14

SELECT 1000* 1.5


FROM dual;
SELECT SYSDATE
FROM dual;
13

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

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


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

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


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

SELECT
SUBSTR('oracle
database',-8,4)
FROM dual;

database',1,3),

SUBSTR('oracle

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

15

Ce afieaz comanda urmtoare?

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


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

CONCAT('ORACLE','DATABASE') LPAD('ORACLE',15,'*') RTRIM('ORACLE****','*')


--------------------------- --------------------- ----------------------Oracle Database
*********Oracle
Oracle

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

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


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

TRIM(BOTH'*'FROM'**ORACLE****' LENGTH('ORACLE')
------------------------------ ---------------Oracle
6
INSTR('ORACLEDATABASE','A',1,3
-----------------------------11
16

17

18

Ce afieaz comanda urmtoare?

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL care manipuleaz valori numerice


SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),
LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;

Sintax

Descriere

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


FROM dual;

Rezultat

ROUND (n,i)

numr

TRUNC (n,i)

numr

MOD (n1,n2)

numr

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


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

CUPRINS
---------------------------------------Capitolul 1 ..................... pag.20

19

20

21

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL

Funcii SQL care manipuleaz date calendaristice


Sintax

Descriere

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


TRUNC(SYSDATE,'MM'), TRUNC(SYSDATE,'YY')
FROM dual;

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)

numr

EXTRACT (DAY FROM d)


EXTRACT (MONTH FROM d)
EXTRACT (YEAR FROM d)

numr
22

SYSDATE
ROUND(SYSDATE,'MM') ROUND(SYSDATE,'YY')
----------- ------------------- ------------------18.11.2015 01.12.2015
01.01.2016

SYSDATE
NEXT_DAY(SYSDATE,'VINERI') LAST_DAY(SYSDATE)
----------- -------------------------- ----------------18.11.2015 20.11.2015
30.11.2015

TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')
------------------- ------------------01.11.2015
01.01.2015

SELECT
EXTRACT
FROM dual;
EXTRACT(YEARFROMSYSDATE)
-----------------------2015

(YEAR

FROM

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


LAST_DAY(SYSDATE)
FROM dual;

SYSDATE)

SELECT ADD_MONTHS(SYSDATE,4),
MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,4),SYSDATE)
FROM dual;
ADD_MONTHS(SYSDATE,4) MONTHS_BETWEEN(ADD_MONTHS(SYSD
--------------------- -----------------------------18.03.2016
4

23

24

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL

Funcii SQL speciale


Sintax

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


FROM dual;

Descriere

NVL (e1,e2)

SELECT 14+NULL-4

NULLIF (e1,e2)

FROM dual;

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


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

DECODE (e,expresii_de_cutare,d)
CASE expr WHEN cond THEN rez ...
ELSE rez END

25

26

27

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL

SELECT nume, salariul+comision "Venit total"


FROM angajati
WHERE comision IS NULL;

SELECT pret_lista, pret_min, NULLIF(pret_lista,pret_min)


FROM produse;

NUME
Venit total
------------------------- ----------King
Kochhar
...

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

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
.......

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


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

28

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;

29

30

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL
Funcii SQL de conversie ntre tipuri de date

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%' ;

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%' ;

31

Descriere

TO_CHAR (n,format)
TO_CHAR (d,format)

DENUMIRE_PRODUS
CATEGORIE
PRET_LISTA MAJORARE_PRET
--------------------- ------------------- ---------- ------------DIMM - 128 MB
hardware4
305,00
61
DIMM - 16 MB
hardware2
124,00
24,8
.......

DENUMIRE_PRODUS
CATEGORIE
PRET_LISTA MAJORARE_PRET
--------------------- ------------------- ---------- ------------DIMM - 128 MB
hardware4
305,00
61
DIMM - 16 MB
hardware2
124,00
24,8
.......

Sintax
TO_NUMBER(s,format)

TO_DATE (s,format)
TO_TIMESTAMP (s,format)

32

33

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Funcii SQL

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


FROM dual;

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


FROM dual;

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

TO_CHAR(SYSDATE,'DAY,DDMONTHYYYY')
---------------------------------MIERCURI, 18 NOIEMBRIE 2015

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


FROM dual;

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


FROM dual;

TO_CHAR(1987,'$999,999.99')
-------------------------$1,987.00

TO_CHAR(SYSDATE,'DD-MON-YYYYHH
-----------------------------18-NOI-2015 01:11:02

34

SELECT TO_DATE('21-10-2010','DD-MM-YYYY')
FROM dual;
TO_DATE('21-10-2010','DD-MM-YY
-----------------------------21.10.2010

35

36

Limbajul SQL-Oracle

Limbajul SQL-Oracle

Funcii SQL

Funcii SQL

Rezolvai!
Afiai pentru fiecare angajat identificat prin nume numrul total
de comenzi intermediate, precum i valoarea acestora.

Funcii SQL de grup


Sintax

Descriere

COUNT(e)
SUM(e)

SELECT COUNT(*)
FROM angajati;

SELECT COUNT(id_angajat)
FROM angajati;

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

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

MIN(e)
MAX(e)

SELECT COUNT(comision)
FROM angajati;

AVG(e)

COUNT(COMISION)
--------------35
37

Rezolvare

38

39

CURSUL 9...

SELECT 'Angajatul '|| a.nume || ' a incheiat ' ||


COUNT(c.nr_comanda)
||
'
comenzi,
in
valoare
totala
de
'
||
TO_CHAR(SUM(r.pret*r.cantitate),'$999,999.99')
"Informatii comenzi"
FROM angajati a, comenzi c, rand_comenzi r
WHERE
a.id_angajat
=
c.id_angajat
AND
c.nr_comanda
=
r.nr_comanda
GROUP BY a.nume
ORDER BY a.nume;

Limbaje relaionale pentru definirea i manipularea


datelor. Limbajul SQL. (continuare)

40

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