
- •Дана символьная строка, в которой отдельные слова разделены любым количеством пробелов.
- •//Условие задачи:
- •Определить список последовательностей подчиненности от преподавателей, не имеющих начальника, до преподавателей, не имеющих подчиненных. Результат представить в виде:
- •Посчитать кол-во 29.02 между двумя заданными датами
- •Показать накопленную сумму сотрудников по их отделам.
- •Вывести все даты за 2011 год и соответствующие дни недели без использования иерархических запросов и Model.
- •В произвольной строке, состоящей из символьных элементов, разделенных запятыми, отсортировать элементы по алфавиту. Например, символьную строку
- •Определить временной интервал между заданной и текущей датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.
- •Вывести фамилии сотрудников, начальники которых работают в другой стране.В результат вывести:
- •Для таблиц схемы, имеющих индексы вывести:
- •Определить дату начала ближайшего к заданной дате Уимблдонского турнира, который начинается за шесть недель до первого понедельника августа
- •Для каждой таблицы схемы вывести:
- •Определить сколько лет, месяцев и дней осталось до президентских выборов в сша, которые проводятся по високосным годам в первый понедельник после первого вторника ноября.
- •Дана таблица из двух столбцов: 1 - строка, 2 – число. Требуется написать запрос, в результате
- •Написать запрос, выдающий отчёт о суммарных выплатах сотрудникам, непосредственно
- •Определить временной интервал между датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.
- •Вывести фамилии всех сотрудников через запятую столько раз сколько символов в их фамилии
- •Для каждой таблицы схемы вывести:
- •Создать запрос для определения сумм зарплат сотрудников от сотрудников, не имеющих менеджеров, до сотрудников, не имеющих подчиненных.
- •Выборы президента сша
- •Плотный ранг
- •Для всех связей между таблицами схемы вывести:
- •Из заданных наборов символов исключить те наборы символов, которые отличаются только порядком. Например, заданы наборы:
- •В названии отдела вывести только второе слово, если название состоит из двух и более слов, иначе вывести первое слово.
- •Создать запрос для определения списка городов, в которых расположены департаменты, суммарная заработная плата в которых выше средней суммарной заработной платы в департаментах этого города.
- •Имеется таблица:
- •Определить сумму цифр в произвольной символьной строке.
- •Для каждой таблицы схемы вывести:
- •Для каждой таблицы схемы вывести:
- •Сформировать отчёт, содержащий номер отдела, название отдела, имена и фамилии сотрудников, а также их зарплату в виде:
- •Условия нет
- •Условия нет
- •Вывести фамилии сотрудников, получающих зарплату выше средней в отделе, в котором они работают.
- •Не помню задание, похоже на костяна, мишаню и лену
- •Для всех таблиц схемы вывести:
- •Задания нет
- •Сумма цифр в строке
- •Создать запрос для вывода фамилий, последних должностей и дат приема на работу сотрудников, информация о работе
- •"Определить ближайший к заданной дате год, когда 29 февраля придется на воскресенье. "
- •В таблицу записана информация об удачных и неудачных попытках подключения к базе данных.
В названии отдела вывести только второе слово, если название состоит из двух и более слов, иначе вывести первое слово.
SELECT department_name
FROM Departments;
SELECT CASE
WHEN INSTR(Dep_name,' ')>0
THEN SUBSTR(Dep_name, 1, INSTR(Dep_name,' ')-1)
ELSE Dep_name
END CASE
FROM (SELECT SUBSTR(department_name, INSTR(department_name, ' ' )+1) Dep_name
FROM Departments);
Создать запрос для определения списка городов, в которых расположены департаменты, суммарная заработная плата в которых выше средней суммарной заработной платы в департаментах этого города.
В результатах вывести:
название города
название департамента
средняя суммарная заработная плата в городе
суммарная зарплата в департаменте
SELECT town, summsal, avgsumsal, dep FROM
(SELECT town, AVG(sal) avgsumsal FROM
(SELECT d.department_name depn, l.city town, SUM(e.salary) sal
FROM employees e
INNER JOIN (departments d
INNER JOIN locations l
ON (d.location_id=l.location_id))
ON e.department_id=d.department_id
GROUP BY d.department_name, l.city)
GROUP BY town) s1
JOIN
(SELECT l.city city, d.department_name dep, SUM(e.salary) summsal
FROM employees e
INNER JOIN (departments d
INNER JOIN locations l
ON (d.location_id=l.location_id))
ON e.department_id = d.department_id
GROUP BY l.city, d.department_name) s2
ON s1.town = s2.city
WHERE summsal > avgsumsal;
Отобразить все связи по внешнему ключу между таблицами схемы наряду с количеством пользователей, имеющих привилегии на удаление строк из главной таблицы, и правило удаления строк из дочерней таблицы при удалении строк главной.
Результат должен содержать 4 столбца:
название дочерней таблицы, соединенное через точку с названием столбца внешнего ключа дочерней таблицы;
название главной таблицы, соединенное через точку с названием столбца первичного ключа главной таблицы;
количество пользователей, имеющих привилегии на удаление строк из главной таблицы;
правило удаления строк.
SELECT ch_cons.TABLE_NAME || '.' || ch_detail.column_name AS "Child Table Name",
ch_cons.delete_rule AS "Delete Rule",
pr_cons.TABLE_NAME || '.' || pr_detail.column_name AS "Parent Table Name", COUNT(grantee), privilege
FROM user_constraints ch_cons JOIN user_cons_columns ch_detail ON ch_cons.constraint_name = ch_detail.constraint_name
AND ch_cons.TABLE_NAME = ch_detail.TABLE_NAME JOIN user_constraints pr_cons ON pr_cons.constraint_name = ch_cons.r_constraint_name
JOIN user_cons_columns pr_detail ON pr_detail.constraint_name = pr_cons.constraint_name
AND pr_detail.TABLE_NAME = pr_cons.TABLE_NAME JOIN user_tab_privs us_privs ON us_privs.TABLE_NAME = pr_detail.TABLE_NAME
WHERE privilege = 'DELETE'
GROUP BY ch_cons.TABLE_NAME || '.' || ch_detail.column_name, ch_cons.delete_rule, pr_cons.TABLE_NAME || '.' || pr_detail.column_name, privilege;
Написать запрос, выдающий отчёт о суммарных выплатах сотрудникам, непосредственно подчиняющихся заданному руководителю по идентификаторам должностей (поле Job_id). Непосредственное подчинение предполагает подчинение на первом уровне. Номер руководителя может встречаться в отчете лишь дважды.
Номер руководителя |
Должность |
Кол-во сотрудников |
Выплаты |
Вид выплаты |
100 |
AD_VP |
2 |
34000 |
Зарплата сотрудников в должности AD_VP |
|
MK_MAN |
1 |
13000 |
Зарплата сотрудников в должности MK_MAN |
|
PU_MAN |
1 |
11000 |
Зарплата сотрудников в должности PU_MAN |
|
SA_MAN |
5 |
79650 |
Зарплата сотрудников в должности SA_MAN |
|
ST_MAN |
5 |
36400 . |
Зарплата сотрудников в должности ST_MAN |
100 |
|
14 |
174050 |
Суммарная зарплата у руководителя 100 |
101 |
AC_MGR |
1 |
12000 |
Зарплата сотрудников в должности AC_MGR |
|
FI_MGR |
1 |
12000 |
Зарплата сотрудников в должности FI_MGR |
|
HR_REP |
1 |
6500 |
Зарплата сотрудников в должности HR_REP |
|
PR_REP |
1 |
10000 |
Зарплата сотрудников в должности PR_REP |
|
AD_ASST |
1 |
4400 |
Зарплата сотрудников в должности AD_ASST |
101 |
|
5 |
44900 |
Суммарная зарплата у руководителя 100 |
|
|
34 |
301250 |
Общий итог |
WITH report AS
-- Выводим все нужные столбцы и два grouping столбца для определения итоговых строк
(SELECT manager_id, job_id, emp_count, sum_sal, mng_group, job_group, ROWNUM rn
FROM (SELECT manager_id, job_id, COUNT(*) emp_count, SUM(salary) sum_sal,
GROUPING(manager_id) mng_group, GROUPING(job_id) job_group
FROM employees
GROUP BY ROLLUP(manager_id, job_id)
ORDER BY manager_id)),
-- Определяем номер первой строки вхождения для каждого менеджера
-- (менеджер и первый ROWNUM, который ему соответствует)
mng_row1 AS (SELECT manager_id, MIN(rn) min_rn
FROM report
GROUP BY manager_id)
-- Выводим номера руководителей только в первой и в итоговой строке
SELECT
CASE job_group WHEN 1 THEN TO_CHAR(manager_id) ELSE
CASE rn WHEN min_rn THEN TO_CHAR(manager_id) ELSE ' '
END END AS "Номер руководителя",
NVL(job_id, ' ') "Должность",
emp_count "Количество сотрудников",
sum_sal "Выплаты",
-- Выводим столбец "Вид выплаты" в зависимости от значения GROUPING
CASE mng_group WHEN 1 THEN 'Общий итог' ELSE
CASE job_group WHEN 1 THEN 'Суммарная зарплата у руководителя ' || manager_id
ELSE 'Зарплата сотрудников в должности ' || job_id
END END AS "Вид выплаты"
FROM report LEFT JOIN mng_row1 USING(manager_id)
ORDER BY manager_id, job_id;