Скачиваний:
64
Добавлен:
15.03.2015
Размер:
595.85 Кб
Скачать

Министерство образования и науки Российской Федерации

ФГОБУ ВПО «Санкт-Петербургский государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»

Кафедра Информационных Управляющих Систем

ОТЧЁТ

по лабораторной работе №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.