Sunteți pe pagina 1din 2

-- SEMINAR MARTI

SELECT * FROM UTILIZATORI;


SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME='UTILIZATORI';
INSERT INTO UTILIZATORI VALUES
(GET_UTILIZATOR_ID_S.NEXTVAL,'VLAD.DIACONITA',SYSDATE,NULL,'on-line','activ');
commit;
ALTER TABLE UTILIZATORI ADD CONSTRAINT UTILIZATOR_UK UNIQUE(USER_NAME) NOVALIDATE;
DELETE FROM UTILIZATORI WHERE ID_USER=2021;

CREATE SEQUENCE GET_UTILIZATOR_ID_S START WITH 2021 INCREMENT BY 1 NOCACHE;


SA SE CONSTRUIASCA O SECVENTA SI SA SE ADAUGE UN RAND IN UTILIZATORI FOLOSIND
SECVENTA SI TINAND CONT DE RESTRICTII

SELECT * FROM SALARIATI;


-- SA SE ADAUGE O RESTR CARE SA VERIFICE CA SAL AVAND FUNCTIA Director Divizie sa
aiba salariul > 10000

ALTER TABLE SALARIATI ADD CONSTRAINT SAL_VER_SAL_DIRECTOR CHECK (FUNCTIE<>'Director


Divizie' or SALARIUL>10000);

UPDATE SALARIATI SET SALARIUL=9000 WHERE MARCA_SALARIAT=5002;

SELECT * FROM SALARIATI;

-- SA SE ADAUGE O RESTRICTIE/INDEX CARE SA NU PERMITA MAI MULT DE 1 SALARIAT FARA


ID_MANAGER

CREATE UNIQUE INDEX VER_ID_MANAGER ON SALARIATI(CASE WHEN ID_MANAGER IS NULL THEN


'ABC' ELSE NULL END);

UPDATE SALARIATI SET ID_MANAGER=NULL WHERE MARCA_SALARIAT=5003;

SELECT MARCA_SALARIAT,LPAD(' ',LEVEL*2-1)||NUME||' '||PRENUME NUME,LEVEL FROM


SALARIATI
WHERE LEVEL BETWEEN 2 AND 3
CONNECT BY PRIOR MARCA_SALARIAT=ID_MANAGER
START WITH MARCA_SALARIAT=5003;

-- SA SE MICSOREZE CU 5% SALARIUL CELUI MAI BINE PLATIT SALARIAT


UPDATE SALARIATI SET SALARIUL=SALARIUL*0.95 WHERE SALARIUL=(SELECT MAX(SALARIUL)
FROM SALARIATI);

-- SA SE MICSOREZE CU 5% SALARIUL CELUI MAI BINE PLATIT SALARIAT DIN FIECARE DEP
UPDATE SALARIATI A SET SALARIUL=SALARIUL*0.95 WHERE SALARIUL=(SELECT MAX(SALARIUL)
FROM SALARIATI B
WHERE A.ID_DEPARTAMENT=B.ID_DEPARTAMENT);
COMMIT;
ROLLBACK;

SELECT * FROM
(SELECT * FROM SALARIATI ORDER BY SALARIUL DESC) WHERE ROWNUM <= 5
MINUS
SELECT * FROM
(SELECT * FROM SALARIATI ORDER BY SALARIUL DESC) WHERE ROWNUM < 3;

SELECT * FROM SALARIATI WHERE ROWNUM<=5 ORDER BY SALARIUL DESC;

SELECT * FROM
(SELECT NUME,PRENUME,SALARIUL,ROW_NUMBER() OVER (ORDER BY SALARIUL DESC) RANG FROM
SALARIATI)
WHERE RANG<=3;
SELECT NUME,PRENUME,SALARIUL,ROW_NUMBER() OVER (ORDER BY SALARIUL DESC) RANG FROM
SALARIATI;
SELECT NUME,PRENUME,SALARIUL,RANK() OVER (ORDER BY SALARIUL DESC) RANG FROM
SALARIATI;
SELECT NUME,PRENUME,SALARIUL,DENSE_RANK() OVER (ORDER BY SALARIUL DESC) RANG FROM
SALARIATI;

SELECT * FROM (
SELECT NUME,PRENUME,FUNCTIE,
SALARIUL,RANK() OVER (PARTITION BY FUNCTIE ORDER BY SALARIUL DESC) RANG FROM
SALARIATI)
WHERE RANG<=2;

SA SE AFISEZE PENTRU FIECARE FUNCTIE PERSOANELE CARE AU SALARIUL MAI MARE DECAT
MEDIA FUNCTIEI

SELECT * FROM SALARIATI A WHERE SALARIUL > (SELECT AVG(SALARIUL) FROM SALARIATI B
WHERE A.FUNCTIE=B.FUNCTIE);

SELECT FUNCTIE,AVG(SALARIUL) MEDIE FROM SALARIATI GROUP BY FUNCTIE;

SELECT * FROM SALARIATI ORDER BY FUNCTIE;

SA SE AFISEZE FUNCTIILE PENTRU CARE TOTI SALARIATII AU SALARIUL MAI MARE DECAT 4500

SELECT FUNCTIE FROM SALARIATI GROUP BY FUNCTIE HAVING MIN(SALARIUL)>4500;

CREATE OR REPLACE VIEW MIN_MAX_FUNCTII AS


SELECT NUME,PRENUME,FUNCTIE,SALARIUL,
MIN(SALARIUL) KEEP (DENSE_RANK FIRST ORDER BY SALARIUL) OVER (PARTITION BY FUNCTIE)
MIN_FUNCTIE,
MAX(SALARIUL) KEEP (DENSE_RANK LAST ORDER BY SALARIUL) OVER (PARTITION BY FUNCTIE)
MAX_FUNCTIE
FROM SALARIATI;

SELECT * FROM MIN_MAX_FUNCTII;

GRANT SELECT ON MIN_MAX_FUNCTII TO PUBLIC;

SELECT * FROM VLAD_MASTER.MIN_MAX_FUNCTII;

SELECT NUME,PRENUME,ID_DEPARTAMENT FROM SALARIATI;


-- NR DE SAL DIN FIECARE DEP
SELECT DEN_DEPARTAMENT,COUNT(*) NR_SAL,AVG(SALARIUL) MEDIA
FROM SALARIATI A LEFT JOIN DEPARTAMENTE D ON a.id_departament=d.id_departament
GROUP BY DEN_DEPARTAMENT;

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