This shows you the differences between two versions of the page.
bd:laboratoare:07 [2019/03/31 13:54] maria_luiza.serban |
bd:laboratoare:07 [2022/05/05 16:55] (current) florin.radulescu [Funcții diverse] |
||
---|---|---|---|
Line 1: | Line 1: | ||
===== Laborator 07 - Funcții SQL (II) ===== | ===== Laborator 07 - Funcții SQL (II) ===== | ||
- | **Conținut** | + | |
+ | ===== Obiective ===== | ||
* Funcții de conversie | * Funcții de conversie | ||
* Funcții diverse | * Funcții diverse | ||
* Funcții de grup | * Funcții de grup | ||
+ | | ||
+ | ===== Materiale ajutătoare ===== | ||
+ | |||
+ | [[bd:resurse:tables|Resurse BD]] | ||
+ | |||
==== Funcții de conversie ==== | ==== Funcții de conversie ==== | ||
Line 28: | Line 35: | ||
| 9 | Numere (nr. de 9 determină lungimea de afișare) | | | 9 | Numere (nr. de 9 determină lungimea de afișare) | | ||
| 0 | Afișează 0 de la început | | | 0 | Afișează 0 de la început | | ||
- | | \$ | Semnul $ | | + | | ''$'' | Semnul ''$'' | |
| . | Punct decimal | | | . | Punct decimal | | ||
| , | Virgulă | | | , | Virgulă | | ||
Line 41: | Line 48: | ||
{{:bd:laboratoare:lab07_p3.png?320}} | {{:bd:laboratoare:lab07_p3.png?320}} | ||
- | |{{:bd:laboratoare:lab07_p4.png?350}}|{{:bd:laboratoare:lab07_p5.png?320}}| | + | |{{:bd:laboratoare:lab07_p4.png?380}}|{{:bd:laboratoare:lab07_p5.png?340}}| |
Line 67: | Line 74: | ||
{{:bd:laboratoare:lab07_p7_2.png?520}} | {{:bd:laboratoare:lab07_p7_2.png?520}} | ||
- | * **Instrucțiunea CASE** | + | * **Expresii CASE** |
- | Instrucținea CASE poate fi folosită în clauza SELECT sau WHERE: | + | Expresiile CASE pot fi folosite în clauza SELECT sau WHERE. Ele returnează o valoare (a nu se confunda cu instrucțiunea CASE): |
Sintaxa 1: | Sintaxa 1: | ||
<code sql>CASE expr | <code sql>CASE expr | ||
- | WHEN value1 THEN statements_1; | + | WHEN value1 THEN retval_1 |
- | WHEN value2 THEN statements_2; | + | WHEN value2 THEN retval_2 |
... | ... | ||
- | [ELSE statements_k;] | + | [ELSE retval_k] |
END</code> | END</code> | ||
* **expr** – reprezintă expresia care se va evalua; | * **expr** – reprezintă expresia care se va evalua; | ||
- | * **statements_1** – reprezintă valoarea care se va returna pentru **expr = value1;** | + | * **retval_1** – reprezintă valoarea care se va returna pentru **expr = value1;** |
- | * **statements_2** – reprezintă valoarea care se va returna pentru **expr = value2;** | + | * **retval_2** – reprezintă valoarea care se va returna pentru **expr = value2;** |
- | * **statements_k** – reprezintă valoarea implicită care se va returna pentru **expr <> value1, value2, ...** | + | * **retval_k** – reprezintă valoarea implicită care se va returna pentru **expr <> value1, value2, ...** |
Sintaxa 2: | Sintaxa 2: | ||
<code sql>CASE | <code sql>CASE | ||
- | WHEN expr_1 THEN statements_1; | + | WHEN expr_1 THEN retval_1 |
- | WHEN expr_2 THEN statements_2; | + | WHEN expr_2 THEN retval_2 |
... | ... | ||
- | [ELSE statements_k;] | + | [ELSE retval_k] |
END</code> | END</code> | ||
- | * **expr_i** – reprezintă expresia care se va evalua | + | * **expr_i** – reprezintă expresia **booleana** care se va evalua |
- | * **statements_i** – reprezintă valoarea care se va returna pentru **expr_i** | + | * **retval_i** – reprezintă valoarea care se va returna pentru **expr_i** |
|{{:bd:laboratoare:lab07_p8_1.png?320}}|{{:bd:laboratoare:lab07_p8_2.png?410}}| | |{{:bd:laboratoare:lab07_p8_1.png?320}}|{{:bd:laboratoare:lab07_p8_2.png?410}}| | ||
Line 154: | Line 161: | ||
* **STDDEV([DISTINCT|ALL] expr)** – returnează deviația standard pentru expr, ingnorând valorile null. | * **STDDEV([DISTINCT|ALL] expr)** – returnează deviația standard pentru expr, ingnorând valorile null. | ||
- | <color red>Ex 10. </color> Să se afișeze varianțtia standard și deviația standard a salariilor pentru fiecare departament. | + | <color red>Ex 10. </color> Să se afișeze varianția standard și deviația standard a salariilor pentru fiecare departament. |
{{:bd:laboratoare:lab07_p17.png?500}} | {{:bd:laboratoare:lab07_p17.png?500}} | ||
Line 161: | Line 168: | ||
<color red>Ex 1. </color> Să se facă o listă cu: | <color red>Ex 1. </color> Să se facă o listă cu: | ||
+ | * id-ul sefului | ||
+ | * numele sefului | ||
+ | * numarul de subalterni | ||
+ | * numele departamentului din care face parte seful | ||
+ | * salariu minim/mediu/maxim pt subalterni | ||
+ | |||
+ | <hidden> | ||
+ | <code> | ||
+ | select s.empno "id sef", | ||
+ | s.ename "nume sef", | ||
+ | count(e.empno) "nr angajati", | ||
+ | d.dname "dept", | ||
+ | min (e.sal) "min", | ||
+ | max (e.sal) "max", | ||
+ | avg (e.sal) "avg" | ||
+ | from emp e, emp s, dept d | ||
+ | where e.mgr = s.empno and | ||
+ | s.deptno = d.deptno | ||
+ | group by s.empno, s.ename, d.dname; | ||
+ | |||
+ | id sef nume sef nr angajati dept min max avg | ||
+ | ---------- ---------- ----------- -------------- ---------- ---------- ---------- | ||
+ | 7782 CLARK 1 ACCOUNTING 1300 1300 1300 | ||
+ | 7839 KING 3 ACCOUNTING 2450 2975 2758.33333 | ||
+ | 7566 JONES 2 RESEARCH 3000 3000 3000 | ||
+ | 7788 SCOTT 1 RESEARCH 1100 1100 1100 | ||
+ | 7902 FORD 1 RESEARCH 800 800 800 | ||
+ | 7698 BLAKE 5 SALES 950 1600 1310 | ||
+ | |||
+ | </code> | ||
+ | </hidden> | ||
+ | |||
+ | <color red>Ex 2. </color> Să se facă o listă cu: | ||
* numele angajatului - formatați prima litera mare și restul mici | * numele angajatului - formatați prima litera mare și restul mici | ||
* departamentul în care lucreaza angajatul - formatați cu litere mici | * departamentul în care lucreaza angajatul - formatați cu litere mici | ||
Line 172: | Line 212: | ||
* dacă angajatul are gradul salarial 2: salariu * sqrt(c * log2(n)) | * dacă angajatul are gradul salarial 2: salariu * sqrt(c * log2(n)) | ||
* dacă angajatul are gradul salarial 4: salariu * sqrt(c * log3(n)) | * dacă angajatul are gradul salarial 4: salariu * sqrt(c * log3(n)) | ||
+ | * altfel: 0 | ||
unde n este vechimea în firmă calculată în luni și c este o valoare introdusă de la tastatură (folosiți 0.15 pentru testare). | unde n este vechimea în firmă calculată în luni și c este o valoare introdusă de la tastatură (folosiți 0.15 pentru testare). | ||
Line 184: | Line 225: | ||
lower (d.dname) dep_ang, | lower (d.dname) dep_ang, | ||
to_char (a.hiredate, 'MM-YYYY') data_ang, | to_char (a.hiredate, 'MM-YYYY') data_ang, | ||
- | case g.grade | + | case when to_number (to_char(a.hiredate, 'YYYY')) = to_number (to_char(s.hiredate, 'YYYY')) |
+ | then case g.grade | ||
when 2 then a.sal * sqrt(&c * log(2, months_between(sysdate, a.hiredate))) | when 2 then a.sal * sqrt(&c * log(2, months_between(sysdate, a.hiredate))) | ||
when 4 then a.sal * sqrt(&c * log(3, months_between(sysdate, a.hiredate))) | when 4 then a.sal * sqrt(&c * log(3, months_between(sysdate, a.hiredate))) | ||
+ | else 0 | ||
+ | end | ||
+ | else 0 | ||
end prima, | end prima, | ||
g.grade, | g.grade, | ||
Line 194: | Line 239: | ||
join dept d on a.deptno = d.deptno | join dept d on a.deptno = d.deptno | ||
join salgrade g on a.sal between g.losal and hisal | join salgrade g on a.sal between g.losal and hisal | ||
- | join emp s | + | left outer join emp s |
join dept ds on s.deptno = ds.deptno | join dept ds on s.deptno = ds.deptno | ||
on a.mgr = s.empno | on a.mgr = s.empno | ||
- | where (g.grade = 2 or g.grade = 4) | ||
- | and to_number (to_char(a.hiredate, 'YYYY')) = to_number (to_char(s.hiredate, 'YYYY')) | ||
order by a.ename; | order by a.ename; | ||
</code> | </code> | ||
Line 208: | Line 251: | ||
ANGAJAT DEP_ANG DATA_AN PRIMA GRADE SEF DEP_SEF | ANGAJAT DEP_ANG DATA_AN PRIMA GRADE SEF DEP_SEF | ||
---------- -------------- ------- ---------- ---------- ---------- -------------- | ---------- -------------- ------- ---------- ---------- ---------- -------------- | ||
- | Blake sales 05-1981 2605.27225 4 King accounting | + | Adams research 01-1983 0 1 Scott research |
- | Clark accounting 06-1981 2239.11333 4 King accounting | + | Allen sales 02-1981 0 3 Blake sales |
- | Ford research 12-1981 2738.8836 4 Jones research | + | Blake sales 05-1981 2605.28073 4 King accounting |
- | Jones research 04-1981 2720.0106 4 King accounting | + | Clark accounting 06-1981 2239.13302 4 King accounting |
- | Martin sales 09-1981 1437.29374 2 Blake sales | + | Ford research 12-1981 2738.90805 4 Jones research |
- | Ward sales 02-1981 1439.15756 2 Blake sales | + | James sales 12-1981 0 1 Blake sales |
+ | Jones research 04-1981 2720.03438 4 King accounting | ||
+ | King accounting 11-1981 0 5 | ||
+ | Martin sales 09-1981 1437.3065 2 Blake sales | ||
+ | Miller accounting 01-1982 0 2 Clark accounting | ||
+ | Scott research 12-1982 0 4 Jones research | ||
+ | Smith research 12-1980 0 1 Ford research | ||
+ | Turner sales 09-1981 0 3 Blake sales | ||
+ | Ward sales 02-1981 1439.17011 2 Blake sales | ||
</code> | </code> | ||
</hidden> | </hidden> | ||
- | ====Bibliografie==== | + | |
- | - **Alexandru Boicea** -// Oracle SQL SQL Plus//, Editura Printech | + |