Advertisement
Guest User

Untitled

a guest
Nov 11th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. -- 1. Найти имена сотрудников, получивших за годы начисления зарплаты
  2. -- минимальную зарплату.
  3. select distinct(emp.empname) from emp natural join salary where salary.salvalue = (select min(salvalue) from salary);
  4. -- 2. Найти имена сотрудников, работавших или работающих в тех же отделах, в
  5. -- которых работал или работает сотрудник с именем RICHARD MARTIN.
  6. select emp.empname from emp natural join career where career.deptno in (select career.deptno from career natural join emp where emp.empname = 'RICHARD MARTIN') and emp.empname != 'RICHARD MARTIN';
  7. -- 3. Найти имена сотрудников, работавших или работающих в тех же отделах и
  8. -- должностях, что и сотрудник RICHARD MARTIN
  9. select emp.empname from emp natural join career where (career.deptno, career.jobno) in (select career.deptno, career.jobno from career natural join emp natural join job where emp.empname = 'RICHARD MARTIN') and emp.empname != 'RICHARD MARTIN';
  10. -- 4. Найти сведения о номерах сотрудников, получивших за какой-либо месяц зарплату
  11. -- большую, чем средняя зарплата за 2007 г. или большую чем средняя зарплата за 2008г.
  12. select distinct(empno) from salary where salvalue > any(select avg(salvalue) from salary where year in ('2007', '2008') group by year);
  13. -- 5. Найти сведения о номерах сотрудников, получивших зарплату за какой-либо месяц
  14. -- большую, чем средние зарплаты за все годы начислений.
  15. select distinct(empno) from salary where salvalue > all(select avg(salvalue) from salary group by year);
  16. -- 6. Определить годы, в которые начисленная средняя зарплата была больше средней
  17. -- зарплаты за все годы начислений.
  18. select year from salary group by year having avg(salvalue) > (select avg(salvalue) from salary);
  19. -- 7. Определить номера отделов, в которых работали или работают сотрудники,
  20. -- имеющие начисления зарплаты.
  21. select distinct(deptno) from career c where empno in (select empno from salary where empno = c.empno);
  22. -- 8. Определить номера отделов, в которых работали или работают сотрудники,
  23. -- имеющие начисления зарплаты.
  24. select distinct(deptno) from emp e inner join career c on e.empno = c.empno where exists(select empno from salary s where s.empno = e.empno);
  25. -- 9. Определить номера отделов, для сотрудников которых не начислялась зарплата.
  26. select distinct(deptno) from emp e inner join career c on e.empno = c.empno where not exists(select empno from salary s where s.empno = e.empno);
  27. -- 10. Вывести сведения о карьере сотрудников с указанием названий и адресов отделов
  28. -- вместо номеров отделов.
  29. select jobno, empno, (select deptname||' '|| deptaddr from dept where deptno = c.deptno) as deptname, startdate, enddate from career c;
  30. -- 11. Определить целую часть средних зарплат, по годам начисления.
  31. select year, cast(avg(salvalue) as integer) as avg_sal from salary group by year;
  32. -- 12. Разделите сотрудников на возрастные группы: A) возраст 20-30 лет; B) 31-40 лет;
  33. -- C) 41-50; D) 51-60 или возраст не определён.
  34. select emp.*,
  35. case
  36. when EXTRACT(YEAR FROM (SYSDATE - birthdate) YEAR TO MONTH) between 20 and 30 then 'A'
  37. when EXTRACT(YEAR FROM (SYSDATE - birthdate) YEAR TO MONTH) between 30 and 40 then 'B'
  38. when EXTRACT(YEAR FROM (SYSDATE - birthdate) YEAR TO MONTH) between 40 and 50 then 'C'
  39. when EXTRACT(YEAR FROM (SYSDATE - birthdate) YEAR TO MONTH) between 50 and 60 then 'D'
  40. else 'D'
  41. end as category
  42. from emp;
  43. -- 13. Перекодируйте номера отделов, добавив перед номером отдела буквы BI для
  44. -- номеров <=20, буквы LN для номеров >=30.
  45. select dept.*,
  46. case
  47. when deptno <= 20 then concat('BI',to_char(deptno))
  48. when deptno >= 30 then concat('LN',to_char(deptno))
  49. end coded_name
  50. from dept;
  51. -- 14. Выдать информацию о сотрудниках из таблицы EMP, заменив отсутствие данного
  52. -- о дате рождения датой 01-01-1000.
  53. select empno, empname,
  54. coalesce(birthdate, to_date('01/01/1000', 'DD/MM/YYYY')) as birthdate
  55. from emp;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement