Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. create table departamente
  2. (
  3. cod_departament NUMBER(2),
  4. denumire_departament VARCHAR(30),
  5. CONSTRAINT pk_departamente PRIMARY KEY (cod_departament)
  6. );
  7.  
  8. create table angajati
  9. (
  10. id_angajat NUMBER(2),
  11. nume VARCHAR2(30),
  12. functie VARCHAR2(30),
  13. salariu NUMBER(7,2),
  14. id_superior NUMBER(2),
  15. cod_departament NUMBER(2),
  16. CONSTRAINT pk_angajati PRIMARY KEY (id_angajat),
  17. CONSTRAINT fk_angajati FOREIGN KEY (cod_departament) REFERENCES departamente (cod_departament),
  18. CONSTRAINT fk_superior FOREIGN KEY (id_superior) REFERENCES angajati (id_angajat)
  19. );
  20.  
  21. create table plafoane_salariu
  22. (
  23. denumire_plafon VARCHAR2(30),
  24. salariu_minim NUMBER(7,2),
  25. salariu_maxim NUMBER(7,2)
  26. );
  27.  
  28.  
  29. insert into departamente values(1, 'manager');
  30. insert into departamente values(2, 'IT');
  31. insert into departamente values(3, 'HR');
  32.  
  33. insert into angajati values (1, 'Popescu Maria', 'manager', 50000, NULL, 1);
  34. insert into angajati values (2, 'Ionescu Gheorghe', 'tester', 50001, 1, 2);
  35. insert into angajati values (3, 'Vasile George', 'developer', 10000, 1, 2);
  36. insert into angajati values (4, 'Pop Ion', 'manager', 50002, NULL, 1);
  37. insert into angajati values (5, 'Racovita George', 'tester', 50001, 4, 2);
  38. insert into angajati values (6, 'Marinescu Maria', 'developer', 10000, 1, 2);
  39.  
  40. insert into plafoane_salariu values('mic', 5000, 10000);
  41. insert into plafoane_salariu values('mare', 10001, 50000);
  42.  
  43. alter table angajati
  44. add
  45. (
  46. prima number(7,2)
  47. );
  48.  
  49. update angajati
  50. set prima=0.5*salariu
  51. where mod(id_angajat, 2) = 0;
  52.  
  53. --select * from angajati;
  54.  
  55. --select extract(day from sysdate) from dual;
  56. --select last_day(sysdate) from dual;
  57.  
  58. --tratarea valorilor nule
  59. --nvl(val1, val2)
  60. --lasa val1 neschimbat daca este nenul
  61. --altfel intoarce val2
  62.  
  63. --1. Sa se afiseze nr intreg de zile intre craciunul de anul asta si pastele de anul asta.
  64. --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)
  65. --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.
  66. --4. Creati unul sau mai multe scripturi care folosesc translate, round, next_day, last_day.
  67.  
  68.  
  69. --exercitiul 1
  70. select to_date('25-12-2019', 'DD-MM-YYYY') - to_date('28-04-2019', 'DD-MM-YYYY') as DIFERENTA from dual;
  71.  
  72. --exercitiul 2
  73. select c.nume, d.denumire_departament, c.salariu + nvl(c.prima, 0) as venit
  74. from angajati a join angajati b
  75. on a.id_superior = b.id_angajat
  76. join angajati c
  77. on b.cod_departament = c.cod_departament
  78. join departamente d
  79. on b.cod_departament = d.cod_departament
  80. where a.nume = '&angajat';
  81.  
  82. --exercitiul 3
  83. select a.nume, d.denumire_departament, b.denumire_plafon, a.salariu + nvl(a.prima, 0) as venit
  84. from angajati a join plafoane_salariu b
  85. on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
  86. join departamente d
  87. on a.cod_departament = d.cod_departament
  88. where d.denumire_departament = '&departament';
  89.  
  90. --exercitiul 4
  91. select translate(nume, 'a', 'o') as nume_modificat from angajati;
  92. select round(prima, 1) as prima_rotunjita from angajati;
  93. select next_day('05-07-2019', 'Sambata') from dual;
  94. select last_day('25-12-2019') from dual;
  95.  
  96.  
  97. drop table angajati;
  98. drop table departamente;
  99. drop table plafoane_salariu;
  100.  
  101. --Laborator 5
  102. --conditie de join
  103. --select nume, salariu from angajati a, departamente d
  104. --where a.cod_departament = d.cod_departament and denumire_departament = 'IT';
  105.  
  106. --exista sintaxa speciala pentru join
  107.  
  108. --EQUIJOIN
  109.  
  110. --JOIN ON
  111. --select nume, salariu
  112. --from angajati a join departamente d
  113. --on a.cod_departament = d.cod_departament
  114. --where denumire_departament = 'IT';
  115.  
  116. --NATURAL JOIN
  117. --asa NU (daca sunt coloane ascunse si se numesc la fel)
  118. --select nume, salariu
  119. --from angajati natural join departamente
  120. --where denumire_departament = 'IT';
  121.  
  122. --NONEQUIJOIN
  123. --select a.nume, b.denumire_plafon
  124. --from angajati a join plafoane_salariu b
  125. --on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim;
  126.  
  127. --OUTER JOIN
  128. --punem + in dreptul tabelelor mai sarace in inregistrari
  129. --select a.denumire_departament, b.nume
  130. --from departamente a, angajati b
  131. --where a.cod_departament = b.cod_departament(+);
  132.  
  133.  
  134. --Sa se selecteze:
  135. --1. Toti angajatii dupa nume si salariu care castiga mai mult decat superiorii lor
  136. --join intre angajati si angajati
  137. --2. Sa se transforme scriptul cu outer join intr-un script echivalent utilizand clauza outer join.
  138. --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.
  139. --4. Sa se selecteze pentru fiecare angajat dintr-un departament citit de la tastatura numele si denumirea plafonului sau salarial.
  140.  
  141. --exercitiul 1
  142. --select a.nume, a.salariu, b.nume, b.salariu
  143. --from angajati a join angajati b
  144. --on a.id_superior = b.id_angajat and a.salariu >= b.salariu;
  145.  
  146. --exercitiul 2
  147. --select a.denumire_departament, b.nume
  148. --from departamente a
  149. --left outer join angajati b
  150. --on a.cod_departament = b.cod_departament;
  151.  
  152. --exercitiul 3
  153. --select a.nume, b.denumire_departament, c.nume
  154. --from angajati a join departamente b
  155. -- on a.cod_departament = b.cod_departament
  156. -- join angajati c
  157. -- on a.id_superior = c.id_angajat
  158. --where c.nume = '&nume' and b.denumire_departament = '&departament';
  159.  
  160. --exercitiul 4
  161. --select a.nume, b.denumire_plafon
  162. --from angajati a join plafoane_salariu b
  163. -- on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
  164. -- join departamente d
  165. -- on a.cod_departament = d.cod_departament
  166. --where d.denumire_departament = '&departament';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement