Sunteți pe pagina 1din 9

Limbajul SQL-Oracle Limbajul SQL-Oracle

Interogarea datelor
Comandă LMD Descriere
SELECT regăseşte date din una sau mai multe tabele Clauze în SELECT Descriere
restricţionează liniile care se returnează pe baza unui
INSERT adaugă o înregistrare nouă într-o tabelă WHERE condiţie criteriu specificat în condiţia de selecţie
UPDATE modifică valori asociate coloanelor unei tabele structurează rezultatul într-o manieră ierarhică
clauze de ordonare ierarhică (asemănător cu o organigramă)
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 de potrivire grupează liniile în scopul identificării valorilor comune
GROUP BY coloane_grupare grupurilor (valori agregate calculate prin funcţii de grup)
DELETE şterge înregistrări dintr-o tabelă
restricţionează grupurile create 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)

1 2

Limbajul SQL-Oracle Limbajul SQL-Oracle


Precedenţa operatorilor Interogarea datelor

Operator Utilizarea pseudocoloanelor (valori atribuite automat de către


sistem fiecărei tabele) în comenzile SQL:
*, /, -,+
= , >= , > , <= , < , <> , != , IS , LIKE , IN  ROWNUM
BETWEEN
NOT SELECT ROWNUM, id_angajat, nume, salariul
AND FROM angajati;
|| , OR
ROWNUM ID_ANGAJAT NUME SALARIUL
---------- ---------- ------------------------- ----------
1 100 King 24000,00
2 101 Kochhar 17000,00
..............
3 4

1
Limbajul SQL-Oracle
Rezolvaţi!
Interogarea datelor

Afişaţi primii 3 angajaţi cu cel mai mic salariu.


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

5 6

Limbajul SQL-Oracle Limbajul SQL-Oracle


Interogarea datelor Interogarea datelor
Utilizarea expresiilor în comenzile SQL: Utilizarea expresiilor în comenzile SQL este permisă în:
 Pe lângă specificarea coloanelor, într-o comandă SELECT pot fi  lista de coloane a unei comenzi SELECT
incluse şi expresii  clauzele WHERE, HAVING şi ORDER BY dintr-o comandă SELECT
 O expresie se poate referi la: literali, operatori, funcţii 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
FROM angajati SELECT id_angajat, nume, salariul, salariul * 1.5
FROM angajati
WHERE comision IS NOT NULL
WHERE comision IS NOT NULL
ORDER BY nume;
AND salariul*1.5>16000
ORDER BY salariul*1.5 desc;
7 8

2
Limbajul SQL-Oracle Limbajul SQL-Oracle
Interogarea datelor Funcţii SQL
Funcţii SQL care manipulează şiruri de caractere
Tabela DUAL Sintaxă Descriere 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, conţinând valoarea x CONCAT (s1,s2) şir de caractere
 utilizată pentru testarea unor comenzi SELECT care nu fac referiri LPAD (s1,n,s2) / RPAD (s1,n,s2) şir de caractere
neapărat la o tabelă dintr-o BD
LTRIM (s1,s2) / RTRIM (s1,s2) şir de caractere
SELECT 1000* 1.5 TRIM (info s1 FROM s2) şir de caractere
FROM dual;
LENGTH (s) număr

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


SELECT SYSDATE
SUBSTR (s,poz,n) şir de caractere
FROM dual;
9 REPLACE (s1,s2,s3) şir de caractere 10

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL

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


SELECT CONCAT('Oracle ' ,'Database'),
FROM dual;
LPAD('Oracle',15,'*'), RTRIM('Oracle****','*'),
UPPER('ORACLE') LOWER('ORACLE') INITCAP('ORACLE') TRIM(BOTH '*' FROM '**Oracle****'), LENGTH('Oracle'),
--------------- --------------- ----------------- INSTR('Oracle Database','a',1,3)
ORACLE oracle Oracle FROM dual;

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


SELECT SUBSTR('oracle database',1,3), SUBSTR('oracle --------------------------- --------------------- -----------------------
Oracle Database *********Oracle Oracle
database',-8,4)
FROM dual; TRIM(BOTH'*'FROM'**ORACLE****' LENGTH('ORACLE')
------------------------------ ----------------
SUBSTR('ORACLEDATABASE',1,3) SUBSTR('ORACLEDATABASE',-8,4) Oracle 6
---------------------------- -----------------------------
ora data INSTR('ORACLEDATABASE','A',1,3
------------------------------
11
11 12

3
Limbajul SQL-Oracle
Ce afişează comanda următoare?
Funcţii SQL

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


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

REPLACE('ORACLEDATABASE','A') REPLACE('ORACLEDATABASE','A',' SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),


----------------------------- ------------------------------
orcle dtbse or*cle d*t*b*se LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;

13 14

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL
Funcţii SQL care manipulează valori numerice
SELECT ROUND(3.148,2), TRUNC(3.148,2), MOD(11,3)
Sintaxă Descriere Rezultat FROM dual;
ROUND (n,i) număr

TRUNC (n,i) număr ROUND(3.148,2) TRUNC(3.148,2) MOD(11,3)


MOD (n1,n2) număr -------------- -------------- ----------
3,15 3,14 2

15 16

4
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
Funcţii SQL care manipulează date calendaristice SELECT SYSDATE, ROUND(SYSDATE,'MM'), ROUND(SYSDATE,'YY'),
TRUNC(SYSDATE,'MM'), TRUNC(SYSDATE,'YY')
Sintaxă Descriere Rezultat FROM dual;
SYSDATE dată calendaristică SYSDATE ROUND(SYSDATE,'MM') ROUND(SYSDATE,'YY')
----------- ------------------- -------------------
ROUND (d,i) dată calendaristică
21.11.2013 01.12.2013 01.01.2014
TRUNC (d,i) dată calendaristică
TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')
NEXT_DAY (d,s) dată calendaristică ------------------- -------------------
01.11.2013 01.01.2013
LAST_DAY (d) dată calendaristică

ADD_MONTHS (d,n) dată calendaristică SELECT EXTRACT (YEAR FROM SYSDATE)


FROM dual;
MONTHS_BETWEEN (d1,d2) număr
EXTRACT (DAY FROM d) EXTRACT(YEARFROMSYSDATE)
EXTRACT (MONTH FROM d) număr ------------------------
EXTRACT (YEAR FROM d) 17 2013 18

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL
Funcţii SQL speciale
SELECT SYSDATE, NEXT_DAY(SYSDATE,'Vineri'),
LAST_DAY(SYSDATE)
FROM dual; Sintaxă Descriere
NVL (e1,e2)
SYSDATE NEXT_DAY(SYSDATE,'VINERI') LAST_DAY(SYSDATE)
----------- -------------------------- ----------------- NULLIF (e1,e2)
21.11.2013 22.11.2013 30.11.2013
DECODE (e,expresii_de_căutare,d)
CASE expr WHEN cond THEN rez ...
SELECT ADD_MONTHS(SYSDATE,4), ELSE rez END
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 20

5
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT nume, salariul+comision "Venit total"
FROM angajati
SELECT 14+NULL-4, NVL(NULL,0), 14-NVL(NULL,0)-4 WHERE comision IS NULL;
FROM dual;
NUME Venit total
14+NULL-4 NVL(NULL,0) 14-NVL(NULL,0)-4 ------------------------- -----------
---------- ----------- ---------------- King
0 10 Kochhar
...

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


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

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL
SELECT denumire_produs,pret_lista,
SELECT pret_lista, pret_min, NULLIF(pret_lista,pret_min) CASE
FROM produse; WHEN pret_lista < 100 THEN 'pret mic '
PRET_LISTA PRET_MIN NULLIF(PRET_LISTA,PRET_MIN)
WHEN pret_lista BETWEEN 100 AND 200 THEN 'pret mediu '
---------- ---------- --------------------------- ELSE 'pret mare'
221,00 180,00 221 END Calificativ
73,00 73,00 FROM produse;
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
.......

23 24

6
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL
SELECT denumire_produs, categorie, pret_lista,
SELECT denumire_produs, categorie, pret_lista,
CASE LOWER(categorie)
DECODE(LOWER(categorie),'hardware4' ,0.2,'hardware2' ,0.15,0)
WHEN 'hardware4' THEN 0.2
* pret_lista Majorare_pret
WHEN 'hardware2' THEN 0.15
FROM produse
ELSE 0
WHERE LOWER(categorie) LIKE 'h%' ;
END * pret_lista Majorare_pret
FROM produse DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET
WHERE LOWER(categorie) LIKE 'h%' ; --------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61
DENUMIRE_PRODUS CATEGORIE PRET_LISTA MAJORARE_PRET DIMM - 16 MB hardware2 124,00 24,8
--------------------- ------------------- ---------- ------------- .......
DIMM - 128 MB hardware4 305,00 61
DIMM - 16 MB hardware2 124,00 24,8
.......

25 26

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL
Funcţii SQL de conversie între tipuri de date
SELECT TO_NUMBER('$17,000.23', '$999,999.99')
FROM dual;
Sintaxă Descriere
TO_NUMBER(s,format) TO_NUMBER('$17,000.23','$999,99.99')
------------------------------------
TO_CHAR (n,format) 17000,23
TO_CHAR (d,format)

TO_DATE (s,format) SELECT TO_CHAR(198, '$999,999.99')


TO_TIMESTAMP (s,format)
FROM dual;

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

27 28

7
Limbajul SQL-Oracle Limbajul SQL-Oracle
Funcţii SQL Funcţii SQL

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


FROM dual; SELECT TO_DATE('23-10-2010','DD-MM-YYYY')
FROM dual;
TO_CHAR(SYSDATE,'DAY,DDMONTHYYYY')
---------------------------------- TO_DATE('23-10-2010','DD-MM-YY
JOI , 21 NOIEMBRIE 2013 ------------------------------
23.10.2010

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 30

Limbajul SQL-Oracle Limbajul SQL-Oracle


Funcţii SQL Funcţii SQL
Funcţii SQL de grup
SELECT COUNT(*) SELECT COUNT(id_angajat)
Sintaxă Descriere FROM angajati; FROM angajati;
COUNT(e) COUNT(*) COUNT(ID_ANGAJAT)
---------- -----------------
SUM(e) 107 107
MIN(e)

MAX(e)
SELECT COUNT(comision)
AVG(e)
FROM angajati;

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

31 32

8
Rezolvaţi! CURSUL 9...
Afişaţi pentru fiecare angajat identificat prin nume numărul total
de comenzi intermediate, precum şi valoarea acestora.
 Limbaje relaţionale pentru definirea şi manipularea
datelor. Limbajul SQL. (continuare)

33

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