Advertisement
Guest User

Untitled

a guest
Mar 25th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.02 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', 'manager', 50000.65, NULL, 1);
  34. insert into angajati values (2, 'Ionescu', 'tester', 50001.34, 1, 2);
  35. insert into angajati values (3, 'Vasile', 'developer', 10000.29, 1, 2);
  36. insert into angajati values (4, 'Pop', 'manager', 40000, NULL, 1);
  37. insert into angajati values (5, 'Ion', 'tester', 40001, 1, 2);
  38. insert into angajati values (6, 'Dancila', 'developer', 20000, 1, 2);
  39.  
  40. insert into plafoane_salariu values('mic', 500, 1000);
  41. insert into plafoane_salariu values('mediu', 1001, 10000);
  42. insert into plafoane_salariu values('mare', 10001, 50000);
  43.  
  44.  
  45. --conditie de join
  46. --select nume, salariu from angajati a, departamente d
  47. --where a.cod_departament = d.cod_departament and denumire_departament = 'IT';
  48.  
  49. --exista sintaxa speciala pentru join
  50.  
  51. --EQUIJOIN
  52.  
  53. --JOIN ON
  54. --select nume, salariu
  55. --from angajati a join departamente d
  56. --on a.cod_departament = d.cod_departament
  57. --where denumire_departament = 'IT';
  58.  
  59. --NATURAL JOIN
  60. --asa NU (daca sunt coloane ascunse si se numesc la fel)
  61. --select nume, salariu
  62. --from angajati natural join departamente
  63. --where denumire_departament = 'IT';
  64.  
  65. --NONEQUIJOIN
  66. --select a.nume, b.denumire_plafon
  67. --from angajati a join plafoane_salariu b
  68. --on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim;
  69.  
  70. --OUTER JOIN
  71. --punem + in dreptul tabelelor mai sarace in inregistrari
  72. --select a.denumire_departament, b.nume
  73. --from departamente a, angajati b
  74. --where a.cod_departament = b.cod_departament(+);
  75.  
  76.  
  77. --Sa se selecteze:
  78. --1. Toti angajatii dupa nume si salariu care castiga mai mult decat superiorii lor
  79. --join intre angajati si angajati
  80. --2. Sa se transforme scriptul cu outer join intr-un script echivalent utilizand clauza outer join.
  81. --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.
  82. --4. Sa se selecteze pentru fiecare angajat dintr-un departament citit de la tastatura numele si denumirea plafonului sau salarial.
  83.  
  84. --exercitiul 1
  85. --select a.nume, a.salariu, b.nume, b.salariu
  86. --from angajati a join angajati b
  87. --on a.id_superior = b.id_angajat and a.salariu >= b.salariu;
  88.  
  89. --exercitiul 2
  90. --select a.denumire_departament, b.nume
  91. --from departamente a
  92. --left outer join angajati b
  93. --on a.cod_departament = b.cod_departament;
  94.  
  95. --exercitiul 3
  96. --select a.nume, b.denumire_departament, c.nume
  97. --from angajati a join departamente b
  98. -- on a.cod_departament = b.cod_departament
  99. --join angajati c
  100. --on a.id_superior = c.id_angajat
  101. --where c.nume = '&nume' and b.denumire_departament = '&departament';
  102.  
  103. --exercitiul 4
  104. --select a.nume, b.denumire_plafon
  105. --from angajati a join plafoane_salariu b
  106. --on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
  107. --join departamente d
  108. --on a.cod_departament = d.cod_departament
  109. --where d.denumire_departament = '&departament';
  110.  
  111. alter table angajati
  112. add
  113. (
  114. prima number(7, 2)
  115. );
  116.  
  117. update angajati
  118. set prima = 0.5 * salariu
  119. where mod(id_angajat, 2) = 0;
  120.  
  121. --selct * from angajati;
  122.  
  123. select extract(DAY FROM SYSDATE) from dual;
  124. select last_day(sysdate) from dual;
  125.  
  126. --ex1
  127. select to_date('25-12-2019', 'DD-MM-YYYY') - to_date('28-04-2019', 'DD-MM-YY') as DIFERENTA from dual;
  128.  
  129. --ex2
  130. select c.nume, d.denumire_departament, c.salariu + nvl(b.prima, 0) as venit
  131. from angajati a join angajati b on a.id_superior = b.id_angajat
  132. join angajati c on b.cod_departament = c.cod_departament
  133. join departamente d on b.cod_departament = d.cod_departament
  134. where a.nume = '&angajat';
  135.  
  136. --ex3
  137. select a.nume, b.denumire_plafon, d.denumire_departament, a.salariu + nvl(a.prima, 0) as venit
  138. from angajati a join plafoane_salariu b
  139. on a.salariu >= b.salariu_minim and a.salariu <= b.salariu_maxim
  140. join departamente d
  141. on a.cod_departament = d.cod_departament
  142. where d.denumire_departament = '&departament';
  143.  
  144. --ex4
  145. SELECT translate('Maria', 'a', 'e') from DUAL;
  146. SELECt round(salariu, 1) as salariu_rotunjit from angajati;
  147. select last_day(to_date('25-03-2019','DD-MM-YYYY')) from DUAL;
  148. SELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;
  149.  
  150. --SELECT LAST_DAY()
  151.  
  152. drop table angajati;
  153. drop table departamente;
  154. drop table plafoane_salariu;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement