f993-1_FABBV an 2 - Curs 1-3 BD-Normalizarea Bazelor de Date
Curs 8 - BD
-
Upload
beatrice-barbiis -
Category
Documents
-
view
221 -
download
0
Transcript of Curs 8 - BD
-
7/25/2019 Curs 8 - BD
1/7
1
Limbaje relaionale pentrudefinirea i manipularea datelor.
Limbajul SQL.
ACADEMIA DE STUDII ECONOMICE BUCURETIFACULTATEA DE CIBERNETIC, STATISTIC I INFORMATIC ECONOMIC
BAZE DE DATE
BUCURETI2015-2016
2
Comand LMD Descriere
SELECT regsete date din una sau mai multe tabele
INSERT adaugo nregistrare nou ntr-o tabel
UPDATE modific valori asociatecoloanelor unei tabele
MERGErealizeaz fie modificri ale datelor,fie adugri de nregistrridintr-o alt tabel, n funcie de o condiie de potrivire
DELETE terge nregistrri dintr-otabel
Limbajul SQL-Oracle
3
Limbajul SQL-OracleInterogarea datelor
Clauze n SELECT Descriere
WHEREcondiierestricioneaz liniile care se returneaz pe baza unuicriteriu specificat n condiia de selecie
clauze de ordonare ierarhicstructureaz rezultatul ntr-o manier ierarhic(asemntor cu o organigram)
GROUP BY coloane_gruparegrupeaz liniile n scopul identificrii valorilor comunegrupurilor (valori agregate calculate prin funcii de grup)
HAVINGcondiierestricioneaz grupurile create prin clauza GROUP BYpebaza unei condiii asupra funciilor de grup
ORDER BY coloane_ordonare sorteaz liniile (implicit ascendent)
4
Rezolvai! Se considertabela: PORTS(PORT_ID, PORT_NAME, COUNTRY, CAPACITY), avnd
urmtoarelenregistrri:
Ce rezultat va produce urmtoarea interogare SQL:
SELECT *FROM PORTS
WHERE PORT_NAME LIKE 'San%'OR PORT_NAME LIKE 'Grand%'
AND CAPACITY = 4;
P OR T_ ID P OR T_ NAM E C OU NTRY C APA CITY
1 Galveston USA 4
2 San Diego USA 4
3 San Francisco USA 3
4 Los Angeles USA 45 San Juan USA 3
6 Grand Cayman UK 3
5
Limbajul SQL-OraclePrecedena operatorilor
Operator
* , / , - , +
=, >= , >,
-
7/25/2019 Curs 8 - BD
2/7
1
2
7
SELECT ROWNUM, id_angajat, nume, salariul
FROM angajati
ORDER BY salariul;
ROWNUM ID_ANGAJAT NUME SALARIUL---------- ---------- ------ ------------------- ----------
33 132 Olson 2100,0029 128 Markle 2200,00
.............
Limbajul SQL-OracleInterogarea datelor
8
Rezolvai!
Afiaiprimii 3 angajaicu celmai micsalariu.
9
Rezolvai!
Afiai primii 3 angajai cu cel mai mic salariu.
SELECT ROWNUM, id_angajat, nume, salariul
FROM angajati
WHERE ROWNUM
-
7/25/2019 Curs 8 - BD
3/7
3
13
Tabela DUAL
tabelexistentnoriceBD Oracle
areo singurcoloan:DUMMYde tipVARCHAR2(1)
areo singurlinie,coninndvaloareax
util izat pentru testarea unor comenzi SELECT care nu fac referirineapratla o tabeldintr-oBD
SELECT 1000* 1.5
FROM dual;
SELECT SYSDATE
FROM dual;
Limbajul SQL-OracleInterogarea datelor
14
Limbajul SQL-OracleFuncii SQL
Sintax Descriere 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 (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
Funcii SQL care manipuleaz iruride caractere
15
Limbajul SQL-OracleFuncii 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('oracledatabase',-8,4)
FROM dual;
SUBSTR('ORACLEDATABASE',1,3) SUBSTR('ORACLEDATABASE',-8,4)---------------------------- -----------------------------
ora data
16
Limbajul SQL-OracleFuncii 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****','*')
--------------------------- --------------------- -----------------------
O ra cl e D at ab as e * ** ** ** ** Or ac le O ra cl e
TRIM(BOTH'*'FROM'**ORACLE****' LENGTH('ORACLE')
------------------------------ ----------------
Oracle 6
INSTR('ORACLEDATABASE','A',1,3
------------------------------
11
17
Limbajul SQL-OracleFuncii 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
18
Ce afieaz comanda urmtoare?
SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;
-
7/25/2019 Curs 8 - BD
4/7
4
19
Ce afieaz comanda urmtoare?
SELECT CONCAT(RPAD(CONCAT('Capitolul 1',' '),20,'.'),
LPAD(CONCAT(' pag.','20'),20,'.')) Cuprins
FROM dual;
CUPRINS----------------------------------------Capitolul 1 ..................... pag.20
20
Limbajul SQL-OracleFuncii SQL
Sintax Descriere Rezultat
ROUND (n,i) numr
TRUNC (n,i) numr
MOD (n1,n2) numr
Funcii SQL care manipuleaz valorinumerice
21
Limbajul SQL-OracleFuncii 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
22
Limbajul SQL-OracleFuncii SQL
Sintax Descriere 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
Funcii SQL care manipuleazdate calendaristice
23
Limbajul SQL-OracleFuncii SQL
SELECT SYSDATE, ROUND(SYSDATE,'MM'), ROUND(SYSDATE,'YY'),TRUNC(SYSDATE,'MM'), TRUNC(SYSDATE,'YY')
FROM dual;
SYSDATE ROUND(SYSDATE,'MM') ROUND(SYSDATE,'YY')
----------- ------------------- -------------------1 8. 11 .2 01 5 0 1. 12 .2 01 5 0 1. 01 .2 01 6
TRUNC(SYSDATE,'MM') TRUNC(SYSDATE,'YY')------------------- -------------------0 1. 11 .2 01 5 0 1. 01 .2 01 5
SELECT EXTRACT (YEAR FROM SYSDATE)FROM dual;
EXTRACT(YEARFROMSYSDATE)------------------------
2015 24
Limbajul SQL-OracleFuncii SQL
SELECT SYSDATE, NEXT_DAY(SYSDATE,'Vineri'),LAST_DAY(SYSDATE)
FROM dual;
SYSDATE NEXT_DAY(SYSDATE,'VINERI') LAST_DAY(SYSDATE)----------- -------------------------- -----------------1 8. 11 .2 015 2 0. 11 .2 015 3 0. 11 .20 15
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
-
7/25/2019 Curs 8 - BD
5/7
5
25
Limbajul SQL-OracleFuncii SQL
Sintax Descriere
NVL (e1,e2)
NULLIF (e1,e2)
DECODE (e,expresii_de_cutare,d )
CASEexprWHEN cond THEN rez...ELSE rezEND
Funcii SQL speciale
26
Limbajul SQL-OracleFuncii SQL
SELECT 14+NULL-4
FROM dual;
27
Limbajul SQL-OracleFuncii SQL
SELECT 14+NULL-4, NVL(NULL,0), 14-NVL(NULL,0)-4FROM dual;
14+NULL-4 NVL(NULL,0) 14-NVL(NULL,0)-4---------- ----------- ----------------
0 10
28
Limbajul SQL-OracleFuncii SQL
SELECT nume, salariul+comision "Venit total"FROM angajati
WHERE comision IS NULL;
NUME Venit total
------------------------- -----------KingKochhar
...
SELECT nume, salariul+NVL(comision,0) "Venit total"FROM angajati
WHERE comision IS NULL;
NUME Venit total------------------------- -----------King 24000
Kochhar 17000...
29
Limbajul SQL-OracleFuncii 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 22173 ,0 0 7 3, 00
299,00 244,00 299399,00 355,00 399
30
Limbajul SQL-OracleFuncii 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 CalificativFROM produse;
DENUMIRE_PRODUS PRET_LISTA CALIFICATIV------------------------------------------------- --- ------- -----------DIMM - 128 MB 305,00 pret mare
DIMM - 16 MB 124,00 pret mediuDIMM - 1GB 599,00 pret mareBattery - EL 44,00 pret mic.......
-
7/25/2019 Curs 8 - BD
6/7
6
31
Limbajul SQL-OracleFuncii SQL
SELECT denumire_produs, categorie, pret_lista,CASE LOWER(categorie)
WHEN 'hardware4' THEN 0.2WHEN 'hardware2' THEN 0.15ELSE 0END * pret_lista Majorare_pretFROM produse
WHERE LOWER(categorie) LIKE 'h%';
D EN UM IR E_ PR OD US C AT E GO R IE P RE T _L IS TA M AJ OR A RE _P RE T--------------------- ------------------- ---------- -------------DIMM - 128 MB hardware4 305,00 61DIMM - 16 MB hardware2 124,00 24,8.......
32
Limbajul SQL-OracleFuncii SQL
SELECT denumire_produs, categorie, pret_lista,
DECODE(LOWER(categorie),'hardware4' ,0.2,'hardware2' ,0.15,0)* pret_lista Majorare_pretFROM produse
WHERE LOWER(categorie) LIKE 'h%';
D EN UM IR E_ PR OD US C AT EG O RI E P RE T_ L IS TA M AJ O RA RE _P RE T--------------------- ------------------- ---------- -------------
DIMM - 128 MB hardware4 305,00 61DIMM - 16 MB hardware2 124,00 24,8.......
33
Limbajul SQL-OracleFuncii SQL
Sintax Descriere
TO_NUMBER(s,format)
TO_CHAR (n,format)
TO_CHAR (d,format)
TO_DATE (s,format)
TO_TIMESTAMP (s,format)
Funcii SQLde conversientretipuri dedate
34
Limbajul SQL-OracleFuncii 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(1987, '$999,999.99')FROM dual;
TO_CHAR(1987,'$999,999.99')--------------------------
$1,987.00
35
Limbajul SQL-OracleFuncii SQL
SELECT TO_CHAR(SYSDATE,'DAY, DD MONTH YYYY')FROM dual;
TO_CHAR(SYSDATE,'DAY,DDMONTHYYYY')----------------------------------
MIERCURI, 18 NOIEMBRIE 2015
SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY HH:MI:SS')FROM dual;
TO_CHAR(SYSDATE,'DD-MON-YYYYHH------------------------------18-NOI-2015 01:11:02
36
Limbajul SQL-OracleFuncii SQL
SELECT TO_DATE('21-10-2010','DD-MM-YYYY')FROM dual;
TO_DATE('21-10-2010','DD-MM-YY------------------------------21.10.2010
-
7/25/2019 Curs 8 - BD
7/7
7
37
Limbajul SQL-OracleFuncii SQL
Sintax Descriere
COUNT(e)
SUM(e)
MIN(e)
MAX(e)
AVG(e)
Funcii SQLde grup
38
Limbajul SQL-OracleFuncii SQL
SELECT COUNT(*)
FROM angajati;
COUNT(*)----------
107
SELECT COUNT(comision)FROM angajati;
COUNT(COMISION)---------------
35
SELECT COUNT(id_angajat)
FROM angajati;
COUNT(ID_ANGAJAT)-----------------
107
39
Rezolvai!
Afiai pentru fiecare angajat identificat prin nume numrul totaldecomenziintermediate, precum i valoarea acestora.
40
Rezolvare
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_angajatAND c.nr_comanda = r.nr_comandaGROUP BY a.numeORDER BY a.nume;
CURSUL 9...
Limbaje relaionale pentru definirea i manipularea
datelor. Limbajul SQL. (continuare)