Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Допы 2012.docx
Скачиваний:
13
Добавлен:
24.09.2019
Размер:
125 Кб
Скачать
☆
  1. Задания нет

with tEmp as

(SELECT ddept_id ddept_idEmp, d.department_name dept_nameEmp, COUNT(*) countEmp , e.last_name || ' ' || e.first_name last_NameEmp,

d.department_id dep_id, grouping(ddept_id) dept_grEmp, grouping(e.last_name || ' ' || e.first_name) name_grEmp

FROM(SELECT department_id ddept_id

FROM employees

GROUP BY department_id) JOIN departments d ON ddept_id = d.department_id

JOIN employees e ON e.department_id = d.department_id JOIN jobs USING (job_id)

GROUP BY rollup((ddept_id, d.department_name),(e.last_name || ' ' || e.first_name, d.department_id))

ORDER BY dept_nameEmp, last_NameEmp)

select rn as "Номер", DECODE(dept_grEmp, 1,'Общее кол-во сотрудников',decode(last_N, NULL, 'Кол-во сотрудников в отделе', ddept_idEmp)) as "Номер отдела",

dept_nameEmp as "Название", DECODE(last_N, NULL, to_char(countEmp) , last_N) as "Сотрудник"

from tEmp left join

(select rownum rn, ddept_idEmp ddept_id, dept_nameEmp dept_name,countEmp col,last_NameEmp last_N,dept_grEmp dept_gr,name_grEmp name_gr

from tEmp

where dep_id is not null) tbl on tEmp.last_NameEmp = tbl.last_N

order by dept_nameEmp,last_N

  1. Сумма цифр в строке

SELECT street_address "String",  9* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '9', '')), 0)) + 8* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '8', '')), 0)) + 7* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '7', '')), 0)) + 6* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '6', '')), 0)) + 5* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '5', '')), 0)) + 4* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '4', '')), 0)) + 3* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '3', '')), 0)) + 2* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '2', '')), 0)) + 1* (LENGTH(street_address) - nvl(LENGTH(REPLACE(street_address, '1', '')), 0)) "Sum of digit" FROM locations

  1. Создать запрос для вывода фамилий, последних должностей и дат приема на работу сотрудников, информация о работе

которых в некоторые временные интервалы отсутствует

SELECT employees.last_name, job_history.job_id, employees.hire_date

FROM job_history

JOIN employees ON job_history.employee_id = employees.employee_id

WHERE job_history.employee_id IN (

-------

SELECT employees.employee_id

FROM job_history t1

JOIN employees ON employees.employee_id = t1.employee_id

CROSS JOIN job_history t2

WHERE t1.employee_id = t2.employee_id

AND t1.end_date < t2.start_date - 1

------

UNION --second

(

SELECT DISTINCT job_history.employee_id

FROM job_history

MINUS --first

SELECT employees.employee_id

FROM job_history

JOIN employees ON job_history.employee_id = employees.employee_id

WHERE job_history.start_date = employees.hire_date

OR job_history.start_date + 1 = employees.hire_date

)

)

AND job_history.end_date IN

(

SELECT MAX(t1.end_date)

FROM job_history t1

GROUP BY t1.employee_id

)

  1. "Одной командой SELECT вывести сведения обо всех столбцах таблиц текущей схемы,

которые используются во внешних ключах. В результат вывести пять столбцов:

1. Имя ссылочного ограничения целостности (внешнего ключа)

2. Имя таблицы, которой принадлежит данное ссылочное ограничение целостности (внешний ключ)

3. Имя столбца таблицы, который входит во внешний ключ (foreign key)

4. Имя таблицы, на которую ссылается данный внешний ключ

5. Имя столбца таблицы, на которую ссылается данный внешний ключ,

которому соответствует столбец, указанный в п.3

Результат отсортировать по возрастанию по столбцам 1, 2 и 3, перечисленным выше. "

SELECT uc.constraint_name, ucc1.table_name, ucc1.column_name, ucc2.table_name, ucc2.column_name

FROM user_constraints uc, user_cons_columns ucc1, user_cons_columns ucc2

WHERE uc.constraint_name = ucc1.constraint_name

AND uc.r_constraint_name = ucc2.constraint_name

AND ucc1.position = ucc2.position

AND uc.constraint_type = 'R'

order by 1, 2, 3;

  1. Сформировать отчёт, содержащий номер отдела, название отдела, имена и фамилии сотрудников и общее кол-во сотрудников в каждом отделе. Сортировка – по названию отдела и имени и фамилии сотрудника. Также в отчёте должен присутствовать столбец со сквозной нумерацией сотрудников, при этом строки, содержащие общее кол-во сотрудников (в т.ч. по отделам) нумероваться не должны.

Результат:

…

SELECT r num,  DECODE(gr, 1, 'Общее кол-во сотрудников в отделах',  DECODE(TRIM(TRANSLATE(nv, '0123456789','          ')), null, 'Кол-во сотрудников в отделе', department_id)) department_id, department_name, nv employee FROM ( SELECT GROUPING(department_name) gr, department_id, department_name, NVL(nam, COUNT(*)) nv, r    -- там, где имени нет - сумма FROM ( SELECT  department_id, department_name, rownum r, nam FROM ( SELECT departments.department_id, department_name, employees.first_name || ' ' || employees.last_name nam FROM employees INNER JOIN departments ON employees.department_id = departments.department_id ORDER BY department_name ) ) GROUP BY ROLLUP (department_id, department_name, nam, r) HAVING department_name IS NOT NULL OR department_id IS NULL  --убрать лишние значения в выводе ORDER BY department_name, r ) WHERE r is NOT null OR  ( r IS null AND TRIM(TRANSLATE(nv, '0123456789','          ')) IS null )    -- decode используется для удаления лишних записей в итоговой таблице. Работает он так: Если в строке есть номер сотрудника или номера нет, но есть число в колонке nv, отвечающее за количество сотрудников, то строку оставляем. Проверка на наличие числа осуществляется функцией translate (если в ячейке число - она станет равна null)