Скачиваний:
65
Добавлен:
15.03.2015
Размер:
2.31 Mб
Скачать

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

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

Факультет «Информационных систем и технологий»

Кафедра «Безопасности информационных систем»

Дисциплина «Управление данными»

Отчет

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