Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table departamente
- (
- cod_departament NUMBER(2),
- denumire_departament VARCHAR(30),
- CONSTRAINT pk_departamente PRIMARY KEY (cod_departament)
- );
- create table angajati
- (
- id_angajat NUMBER(2),
- nume VARCHAR2(30),
- functie VARCHAR2(30),
- salariu NUMBER(7,2),
- id_superior NUMBER(2),
- cod_departament NUMBER(2),
- CONSTRAINT pk_angajati PRIMARY KEY (id_angajat),
- CONSTRAINT fk_angajati FOREIGN KEY (cod_departament) REFERENCES departamente (cod_departament),
- CONSTRAINT fk_superior FOREIGN KEY (id_superior) REFERENCES angajati (id_angajat)
- );
- create table plafoane_salariu
- (
- denumire_plafon VARCHAR2(30),
- salariu_minim NUMBER(7,2),
- salariu_maxim NUMBER(7,2)
- );
- insert into departamente values(1, 'manager');
- insert into departamente values(2, 'IT');
- insert into departamente values(3, 'HR');
- insert into angajati values (1, 'Popescu Maria', 'manager', 50000, NULL, 1);
- insert into angajati values (2, 'Ionescu Gheorghe', 'tester', 50001, 1, 2);
- insert into angajati values (3, 'Vasile George', 'developer', 10000, 1, 2);
- insert into angajati values (4, 'Pop Ion', 'manager', 50002, NULL, 1);
- insert into angajati values (5, 'Racovita George', 'tester', 50001, 4, 2);
- insert into angajati values (6, 'Marinescu Maria', 'developer', 10000, 1, 2);
- insert into plafoane_salariu values('mic', 5000, 10000);
- insert into plafoane_salariu values('mare', 10001, 50000);
- alter table angajati
- add
- (
- prima number(7,2)
- );
- update angajati
- set prima=0.5*salariu
- where mod(id_angajat, 2) = 0;
- --select * from angajati;
- --select extract(day from sysdate) from dual;
- --select last_day(sysdate) from dual;
- --tratarea valorilor nule
- --nvl(val1, val2)
- --lasa val1 neschimbat daca este nenul
- --altfel intoarce val2
- --1. Sa se afiseze nr intreg de zile intre craciunul de anul asta si pastele de anul asta.
- --2. Sa se citeasca de la tastatura un nume de angajat si sa se afiseze toti angajatii care sunt in acelasi departament cu seful lui, afisand nume, den_dep si venit (venit = salariu + prima)
- --3. Sa se citeasca de la tastatura o denumire de departament si sa se afiseze pentru fiecare angajat din acel departament nume, den_dep, den_plafon salarial si venit.
- --4. Creati unul sau mai multe scripturi care folosesc translate, round, next_day, last_day.
- --exercitiul 1
- select to_date('25-12-2019', 'DD-MM-YYYY') - to_date('28-04-2019', 'DD-MM-YYYY') as DIFERENTA from dual;
- --exercitiul 2
- select c.nume, d.denumire_departament, c.salariu + nvl(c.prima, 0) as venit
- from angajati a join angajati b
- on a.id_superior = b.id_angajat
- join angajati c
- on b.cod_departament = c.cod_departament
- join departamente d
- on b.cod_departament = d.cod_departament
- where a.nume = '&angajat';
- --exercitiul 3
- select a.nume, d.denumire_departament, b.denumire_plafon, a.salariu + nvl(a.prima, 0) as venit
- from angajati a join plafoane_salariu b
- on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
- join departamente d
- on a.cod_departament = d.cod_departament
- where d.denumire_departament = '&departament';
- --exercitiul 4
- select translate(nume, 'a', 'o') as nume_modificat from angajati;
- select round(prima, 1) as prima_rotunjita from angajati;
- select next_day('05-07-2019', 'Sambata') from dual;
- select last_day('25-12-2019') from dual;
- drop table angajati;
- drop table departamente;
- drop table plafoane_salariu;
- --Laborator 5
- --conditie de join
- --select nume, salariu from angajati a, departamente d
- --where a.cod_departament = d.cod_departament and denumire_departament = 'IT';
- --exista sintaxa speciala pentru join
- --EQUIJOIN
- --JOIN ON
- --select nume, salariu
- --from angajati a join departamente d
- --on a.cod_departament = d.cod_departament
- --where denumire_departament = 'IT';
- --NATURAL JOIN
- --asa NU (daca sunt coloane ascunse si se numesc la fel)
- --select nume, salariu
- --from angajati natural join departamente
- --where denumire_departament = 'IT';
- --NONEQUIJOIN
- --select a.nume, b.denumire_plafon
- --from angajati a join plafoane_salariu b
- --on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim;
- --OUTER JOIN
- --punem + in dreptul tabelelor mai sarace in inregistrari
- --select a.denumire_departament, b.nume
- --from departamente a, angajati b
- --where a.cod_departament = b.cod_departament(+);
- --Sa se selecteze:
- --1. Toti angajatii dupa nume si salariu care castiga mai mult decat superiorii lor
- --join intre angajati si angajati
- --2. Sa se transforme scriptul cu outer join intr-un script echivalent utilizand clauza outer join.
- --3. Sa se citeasca de la tastatura o denumire de departament si un nume de angajat si sa se afiseze toti angajatii care fac parte din acel departament si sunt direct subordonati acelui angajat.
- --4. Sa se selecteze pentru fiecare angajat dintr-un departament citit de la tastatura numele si denumirea plafonului sau salarial.
- --exercitiul 1
- --select a.nume, a.salariu, b.nume, b.salariu
- --from angajati a join angajati b
- --on a.id_superior = b.id_angajat and a.salariu >= b.salariu;
- --exercitiul 2
- --select a.denumire_departament, b.nume
- --from departamente a
- --left outer join angajati b
- --on a.cod_departament = b.cod_departament;
- --exercitiul 3
- --select a.nume, b.denumire_departament, c.nume
- --from angajati a join departamente b
- -- on a.cod_departament = b.cod_departament
- -- join angajati c
- -- on a.id_superior = c.id_angajat
- --where c.nume = '&nume' and b.denumire_departament = '&departament';
- --exercitiul 4
- --select a.nume, b.denumire_plafon
- --from angajati a join plafoane_salariu b
- -- on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
- -- join departamente d
- -- on a.cod_departament = d.cod_departament
- --where d.denumire_departament = '&departament';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement