
Управление данными УД / Управление данными_ИСТ-11-12-15 / ИСТ-15 / 4-Основы SQL 2 / Иванов Д.П
..docxМинистерство образования и науки Российской Федерации
ФГОБУ ВПО «Санкт-Петербургский государственный университет телекоммуникации им. проф. М.А. Бонч-Бруевича»
Факультет «Информационных систем и технологий»
Кафедра «Безопасности информационных систем»
Дисциплина «Управление данными»
Отчет
к лабораторной работе №4
на тему: «Основы языка SQL»
Группа: ИСТ-15
Выполнила: Иванов Д.П.
Проверил: Сабинин О.Ю.
Санкт-Петербург
2014 г
Цель работы: Изучение и реализация на примере стандартной таблицы hr СУБД Oracle основных запросов SQL.
Ход работы:
Задания и их решения:
1. Напишите запрос для вывода самого высокого, самого низкого и среднего оклада по всем служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и Sum. Округлите суммы до ближайшего целого значения.
select MAX(salary) maximum, MIN(salary) minimum, round (avg(salary)) average, sum(salary)
from employees;
2.Напишите запрос для вывода должности и количества служащих, занимающих каждую должность.
select job_id as "должность", count (job_id)as "количество"
from employees
group by job_id;
3.Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers.
select count(distinct(manager_id)) as "number of managers"
from employees
where manager_id is not null;
4. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE
select (MAX(salary)-MIN(salary)) DIFFERENCE
from employees;
5. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000.
select manager_id, MIN(salary)
from employees
where manager_id is not null
group by manager_id
having MIN(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 s.last_name AS last_name_s, s.salary AS salary_s, n.last_name AS last_name_n, n.salary AS salary_n
from employees s join employees n
on s.manager_id=n.manager_id;
8. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies.
select employees.last_name, employees.hire_date
from employees, employees davies
where davies.last_name = 'Davies'
and davies.hire_date < employees.hire_date;
9. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и Manager Hired.
select m.last_name, m.hire_date, n.last_name, n.hire_date
from employees m, employees n
where m.manager_id = n.manager_id
and m.hire_date < n.hire_date;
10. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников.
select employees.department_id, departments.department_name, departments.location_id, count(employees.employee_id)
from employees left outer join departments
on employees.department_id = departments.department_id
group by employees.department_id, departments.department_name, departments.location_id;
11. Напишите запрос для вывода фамилий, названия отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.
select e.last_name, d.department_name, l.city
from employees e, departments d, locations l
where e.department_id = d.department_id
and d.location_id = l.location_id
and e.commission_pct is not null;
12. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных.
SELECT employees.last_name, departments.department_name, locations.city
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id
INNER JOIN locations ON locations.location_id = departments.location_id
WHERE employees.commission_pct IS NOT NULL;
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. Получите список фамилий и окладов всех служащих, подчинённых Кингу.
SELECT e.last_name, e.salary
FROM employees e, employees m
WHERE e.manager_id = m.EMPLOYEE_ID and m.last_name = 'King';
15.Покажите номер отдела с наивысшей средней заработной платой и наименьший оклад работающего в нём сотрудника.
SELECT e.department_id, MIN(salary)
FROM employees e
GROUP BY e.department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id);
16. Выведите номера, наименования и местоположения отделов, в которых не работают торговые представители (job_id = ‘SA_REP’).
SELECT distinct e.department_id, d.department_name, l.street_address, l.city
FROM employees e, departments d, locations l
WHERE e.job_id != 'SA_REP' AND e.department_id = d.department_id AND d.location_id = l.location_id;
17. Выведите идентификаторы и наименования стран, в которых не располагаются отделы компании.
SELECT country_id, country_name FROM countries
MINUS
SELECT locations.country_id, countries.country_name FROM locations, countries
WHERE locations.country_id = countries.country_id;
Вывод: В ходе данной лабораторной работы были изучены и реализованы основные запросы SQL на примере стандартной таблицы hr СУБД Oracle.