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

Санкт-Петербургский Государственный Университет Телекоммуникаций

имени проф. М.А. Бонч-Бруевича

Факультет: Информационных систем и технологий (ИСиТ)

Кафедра: Безопасность информационных систем (БИС)

Отчет

К лабораторной работе №4

ОСНОВЫ ЯЗЫКА SQL-2

По дисциплине: Управление данными

Выполнил: Сущенко В.А.

Группа: ИСТ-15

Преподаватель: Сабинин О.Ю.

Санкт-Петербург

2014

  1. Напишите запрос для вывода самого высокого, самого низкого и среднего оклада по всем служащим, а также суммы всех окладов. Назовите столбцы Maximum, Minimum, Average и Sum. Округлите суммы до ближайшего целого значения.

  1. Напишите запрос для вывода должности и количества служащих, занимающих каждую должность.

  1. Получите количество служащих, имеющих подчинённых, без их перечисления. Назовите столбец Number of Managers.

  1. Напишите запрос для вывода разности между самым высоким и самым низким окладами. Назовите столбец DIFFERENCE

  1. Напишите запрос для, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $6000.

  1. Напишите запрос для вывода фамилии, должности, номера отдела и названия отдела всех служащих, работающих в городе Toronto.

select last_name, job_id, employees.department_id, department_name, locations.city from employees

inner join departments

on departments.department_id=employees.department_id

inner join locations on locations.location_id = departments.location_id

where departments.location_id=(select location_id from locations where city='Toronto');

  1. Выведите фамилии и зарплаты служащих вместе с фамилиями и зарплатами их начальников.

SELECT empl.last_name as Подчиненный, empl.salary as Зарплата,

man.last_name as Начальник, man.salary as Зарплата

FROM employees empl join employees man on man.employee_id=empl.manager_id;

  1. Создайте запрос для вывода фамилий и дат найма всех служащих, нанятых после Davies.

select last_name, hire_date from employees

where hire_date > (select hire_date from employees where last_name = 'Davies');

  1. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы Employee, Emp Hired, Manager и Manager Hired.

select empl.last_name as Employee, empl.hire_date as "Emp Hired",

man.last_name as Manager, man.hire_date as "Manager Hired"

from employees empl join employees man on

empl.manager_id=man.employee_id and

empl.hire_date<man.hire_date;

  1. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников.

select empl.department_id, dep.department_name, dep.location_id,

count (empl.employee_id)

from employees empl left join departments dep

on (empl.department_id=dep.department_id)

group by empl.department_id, dep.department_name, dep.location_id;

  1. Напишите запрос для вывода фамилий, названия отдела и города, в котором он находится, для всех служащих, зарабатывающих комиссионные.

select employees.last_name, departments.department_name, locations.city from employees

join departments on employees.department_id = departments.department_id

join locations on locations.location_id = departments.location_id

where employees.commission_pct is not null;

  1. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с 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';

  1. Создайте запрос для вывода номеров и фамилий всех служащих, оклад которых выше среднего. Отсортируйте данные в порядке увеличения окладов.

select employee_id, last_name from employees

where salary > (select avg(salary) from employees)

order by salary;

  1. Получите список фамилий и окладов всех служащих, подчинённых Кингу.

select empl.last_name, empl.salary from employees empl, employees king

where empl.manager_id = king.employee_id and king.last_name = 'King';

  1. Покажите номер отдела с наивысшей средней заработной платой и наименьший оклад работающего в нём сотрудника.

select department_id as "Макс ЗП", min(salary) as "Мин оклад"

from employees

where salary=(select max(avg(salary)) from employees group by salary)

group by department_id;

  1. Выведите номера, наименования и местоположения отделов, в которых не работают торговые представители (job_id = ‘SA_REP’).

select department_name, employees.department_id, location_id

from departments inner join employees

on departments.department_id=employees.department_id

where job_id not in 'SA_REP';

  1. Выведите идентификаторы и наименования стран, в которых не располагаются отделы компании.

select distinct loc.country_id, cnt.country_name

from locations loc, countries cnt

where loc.location_id not in (select location_id from departments)

and loc.country_id = cnt.country_id;

  1. Напишите запрос для вывода должности и количества служащих, занимающих каждую должность.

select job_title, count(last_name)

from jobs left outer join employees

on employees.job_id=jobs.job_id

group by job_title;

10. Выведите номера, наименования и местоположение всех отделов, а также количество работающих в них сотрудников. Обеспечьте вывод отделов, в которых нет сотрудников.

select empl.department_id, dep.department_name, dep.location_id,

count(empl.employee_id)

from employees empl join departments dep

on (empl.department_id(+)=dep.department_id)

group by empl.department_id, dep.department_name, dep.location_id;

  1. Выведите идентификаторы и наименования стран, в которых не располагаются отделы компании.

select country_id as "идентификатор" , country_name as "наименов стран"

from countries

where country_id not in (select distinct locations. country_id as country

from locations

join departments

on locations.location_id = departments.location_id ) ;

15