You are on page 1of 8

COMMON TABLE EXPRESSIONS

CTE: with name [(col1, col2)]

As( select….)

Select (update/insert/delete

[from] CTE NUME;

with x as (

Select employee_id, last_name,

row_number() over (partition by department_id order by department_id)

from employees)

select * from x;

IN CE AN S-AU ANGAJAT CELE MAI MULTE PERS IN ORGANIZATIE:

WITH x AS (

SELECT
to_char(hire_date, 'yyyy') an_ang,

COUNT(*) OVER(

PARTITION BY to_char(hire_date, 'yyyy')

ORDER BY

hire_date DESC

) AS nr_ang

FROM

employees

SELECT DISTINCT

an_ang,

nr_ang

FROM

WHERE

nr_ang = (

SELECT

MAX(nr_ang)

FROM

);
TARILE CU CELE MAI PUTINE DEPARTAMENTE: todo

with x as(

select d.department_id, d.department_name, d.location_id, c.country_name, count(*) over (partition


by c.country_id) nr

from departments d

inner join locations l

on d.location_id = d.location_id

inner join countries c on l.country_id = c.country_id

select * from x

where nr = (select min(nr) from x);

La el apareau 2 dep

ANGAJATII CARE CASTIGA CEL MAI PUTIN:

with x as (

select employee_id, last_name, salary, rank() over (order by salary) nrsal

from employees

select employee_id, salary, last_name from x where nrsal =(select min(nrsal) from x);
DIFERENTA INTRE SAL ANGAJATULUI SI MEDIA SAL DIN DEPARTAMENTUL IN CARE LUCREAZA PERS
RESP:

with x as (select employee_id, salary,

(select round(avg(salary),2) from employees e2 where e2.department_id = e1.department_id)


salariuMediuDep

from employees e1)

select employee_id, salary, salariuMediuDep, salary-salariuMediuDep as diferenta

from x;
TRANZACTII
ACID

Savepoint numesavep (punct de salvare intermediara)

Rollback

 Revenire la f initiala
 Revenire la savepoint

SALVARE :

 COMMIT
 DDL
DELETE FROM ANGAJAT WHERE DEPARTMENT_ID = 50;

SELECT * FROM ANGAJAT;

SAVEPOINT S1;

UPDATE ANGAJAT SET SALARY = 1000;

SELECT * FROM ANGAJAT;

SAVEPOINT S2;

INSERT INTO ANGAJAT (EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY) SELECT


EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY FROM ANGAJAT;

SAVEPOINT S3;

INSERT INTO ANGAJAT (EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY) SELECT


EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY FROM EMPLOYEES;

ROLLBACK TO S3;

commit;

--tranzactie permanenta

AM MAI FACUT CEVA DE CREARE USER SI ACORDARE DREPTURI PE UN TABEL ??

grant select on angajat to hrtest;

AM FACUT DE MAI MULTE ORI OPERATIOA ASTA CA SA INSEREZ DUPLICATE:

INSERT INTO ANGAJAT (EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY) SELECT


EMPLOYEE_ID, LAST_NAME, FIRST_NAME, DEPARTMENT_ID, SALARY FROM EMPLOYEES;

STERG DUPLICATELE:

Pas 1:

with x as (

select employee_id, last_name, salary,

row_number() over(partition by employee_id order by employee_id) rn

from angajat)

select * from x where rn >=2;


Pas 2:

delete from angajat where rowid in(

select rowid from (

select employee_id, last_name, salary,

row_number() over(partition by employee_id order by employee_id) rn

from angajat) x

where rn >=2);

You might also like