
Управление данными УД / Управление данными_ИСТ-11-12-15 / ИСТ-15 / 4-Основы SQL 2 / Козлов Артем 4 8
.docxМинистерство образования и науки Российской Федерации
ФГОБУ ВПО «Санкт-Петербургский государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»
Кафедра Информационных Управляющих Систем
ОТЧЁТ
по лабораторной работе №4 на тему: «Основы языка SQL - 2»
по дисциплине «Управление Данными»
Выполнил: Козлов А.С.
Группа ИСТ-15
Проверил: Сабинин О. Ю.
Санкт-Петербург
2014 г.
1. Напишите запрос для вывода самого высокого, самого низкого и среднего оклада по всем служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и Sum. Округлите суммы до ближайшего целого значения.
SELECT trunc(min(salary)) as Minimum, trunc(max(salary)) as Maximum, trunc(avg(salary)) as Average, trunc(sum(salary)) as Sum
FROM Employees
2. Напишите запрос для вывода должности и количества служащих, занимающих каждую должность.
SELECT job_id, count(job_id)
FROM employees
GROUP BY job_id
3. Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers.
SELECT count(distinct(manager_id)) as “Number Of Managers”
FROM employees
4. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE.
SELECT (max(salary)-min(salary)) as DIFFERENS
FROM employees;
5. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000.
SELECT e.employee_id, min(s.salary)
FROM employees e
JOIN employees s on e.employee_id=s.manager_id
WHERE e.manager_id is not null
GROUP BY e.employee_id
HAVING min(s.salary) > 6000
6. Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.
SELECT Employees.last_name, Employees.job_id, Employees.department_id,
Departments.department_name
FROM employees
INNER JOIN departments
ON employees.department_id=departments.department_id
Where departments.location_id = (SELECT location_id from locations where locations.city = 'Toronto')
7. Выведите фамилии и зарплаты служащих вместе с фамилиями и зарплатами их начальников.
SELECT e.last_name as Подчиненный, e.salary as Зарплата, m.last_name as Начальник,
m.salary as Зарплата
FROM employees e join employees m on e.manager_id=m.employee_id
8. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies.
SELECT last_name, hire_date
FROM employees
WHERE hire_date > (SELECT hire_date FROM employees WHERE last_name = 'Davies')
9. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и Manager Hired.
SELECT e.last_name as Employee, e.hire_date as "Emp Hired", m.last_name as Manager, m.hire_date as "Manager Hired"
FROM employees e join employees m on e.manager_id=m.employee_id AND e.hire_date<m.hire_date
.
10. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников.
SELECT departments.department_id,departments.department_name,locations.city,
count(employees.employee_id)
FROM employees RIGHT OUTER JOIN departments on employees.department_id = departments.department_id
LEFT OUTER JOIN locations on locations.location_id = departments.location_id
GROUP BY departments.department_id,departments.department_name,
locations.city
11. Напишите запрос для вывода фамилий, названия отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.
SELECT departments.department_id,departments.department_name,locations.city,
count(employees.employee_id)
FROM employees
RIGHT OUTER JOIN departments on employees.department_id = departments.department_id
LEFT OUTER JOIN locations on locations.location_id = departments.location_id
GROUP BY departments.department_id,departments.department_name,
locations.city
12. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных.
SELECT last_name, hire_date
FROM employees
WHERE department_id = (select department_id from employees where last_name = 'Zlotkey')
AND not last_name = 'Zlotkey'
13. Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов.
SELECT employee_id, last_name
FROM employees
WHERE salary > (select avg(salary) from employees)
ORDER BY salary;
14. Получите список фамилий и окладов всех служащих, подчинённых King.
SELECT employees.last_name, salary
FROM employees join (SELECT employee_id, last_name from employees) Кинг
ON employees.manager_id = кинг.employee_id
WHERE кинг.last_name = 'King';
15. Показать номер отдела с наивысшей средней заработной платой и наименьший оклад работающего в нём сотрудника.
SELECT department_id, min(salary), round(avg(salary))
FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees GROUP BY department_id );
16. Выведите номера, наименования и местоположения отделов, в которых не работают торговые представители (job_id = ‘SA_REP’).
SELECT departments.department_id, departments.department_name, locations.city
FROM departments
JOIN locations ON departments.location_id = locations.location_id
left outer JOIN (SELECT department_id, job_id
FROM employees
GROUP BY department_id, job_id
HAVING job_id = 'SA_REP') j ON departments.department_id = j.department_id
WHERE j.job_id is null;
17. Выведите идентификаторы и наименования стран, в которых не располагаются отделы компании.
SELECT countries.country_id, countries.country_name
FROM countries left outer JOIN (SELECT distinct country_id
FROM locations
JOIN (SELECT distinct location_id FROM departments)d
on locations.location_id = d.location_id
)l on countries.country_id=l.country_id
WHERE l.country_id is null;
Вывод: в ходе данной работы были изучены, и затем использованы, простейшие и базовые навыки в формировании SQL запросов в СУБД Oracle.