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', 'manager', 50000.65, NULL, 1);
- insert into angajati values (2, 'Ionescu', 'tester', 50001.34, 1, 2);
- insert into angajati values (3, 'Vasile', 'developer', 10000.29, 1, 2);
- insert into angajati values (4, 'Pop', 'manager', 40000, NULL, 1);
- insert into angajati values (5, 'Ion', 'tester', 40001, 1, 2);
- insert into angajati values (6, 'Dancila', 'developer', 20000, 1, 2);
- insert into plafoane_salariu values('mic', 500, 1000);
- insert into plafoane_salariu values('mediu', 1001, 10000);
- insert into plafoane_salariu values('mare', 10001, 50000);
- --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';
- alter table angajati
- add
- (
- prima number(7, 2)
- );
- update angajati
- set prima = 0.5 * salariu
- where mod(id_angajat, 2) = 0;
- --selct * from angajati;
- select extract(DAY FROM SYSDATE) from dual;
- select last_day(sysdate) from dual;
- --ex1
- select to_date('25-12-2019', 'DD-MM-YYYY') - to_date('28-04-2019', 'DD-MM-YY') as DIFERENTA from dual;
- --ex2
- select c.nume, d.denumire_departament, c.salariu + nvl(b.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';
- --ex3
- select a.nume, b.denumire_plafon, d.denumire_departament, 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';
- --ex4
- SELECT translate('Maria', 'a', 'e') from DUAL;
- SELECt round(salariu, 1) as salariu_rotunjit from angajati;
- select last_day(to_date('25-03-2019','DD-MM-YYYY')) from DUAL;
- SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
- --SELECT LAST_DAY()
- drop table angajati;
- drop table departamente;
- drop table plafoane_salariu;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement