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

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

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

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

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

Отчет

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

«SQL запросы»

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

Выполнил: Кучейко A.C.

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

Липанова И.А.

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

2014

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

select MAX (salary) miximum , MIN (salary) Minimem ,round (avg(salary)) Average , sum (salary)

from employees;

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

select job_id as "должность" , count ( job_id) as " кол. служащих "

from employees

group by job_id

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

select count (distinct(manager_id)) as "number of managers"

from employees

where manager_id is not null

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

SELECT max(salary) – min(salary) as Difference

FROM employees;

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

select min(s.salary) , e.employee_id

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

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

select employees.last_name as фамилия ,employees.department_id as номер_отдела,

employees.job_id as должность,

departments.department_name as название_отдела

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')

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

select

m.last_name as начальник , m.salary as зарплата_нач,

e.last_name as служащие , e.salary as зарплата_служ

from employees e join employees m on e.manager_id=m.employee_id

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

select last_name as фамилия, hire_date as дата_найма

from employees

where hire_date > (select hire_date

from employees

where last_name = 'Davies')

  1. По всем служащим, нанятым раньше своих менеджеров, выведите фамилии и даты найма самих служащих, а также фамилии и даты найма их менеджеров. Назовите столбцы 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

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

select e.department_id as " id отдела",

d.department_name as "название отдела",

d.location_id as "местоп отдела",

count(e.employee_id)

from employees e join departments d

on (e.department_id(+)=d.department_id)

group by e.department_id, d.department_name, d.location_id;

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

select employees.last_name as фамилия , department_name as назв_отдела ,

locations.city as город

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 из выходных данных.

Zlotkey. Исключите Zlotkey из выходных данных.

SELECT last_name as "Фамилия", hire_date as "дата найма"

FROM employees

WHERE department_id = (select department_id from employees where last_name = 'Zlotkey') AND not last_name = 'Zlotkey'

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

SELECT last_name, employee_id

FROM employees

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

ORDER BY salary;

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

select e.last_name as "Фамилия служ", e.salary as "оклад служ"

from employees e , employees m

where e.manager_id = m.employee_id and m.last_name = 'King';

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

select department_id as "номер отдела" ,

min (salary) as "мин зарплата "

from employees e

group by e.department_id

having avg (salary ) = (select max (avg(salary ))

from employees

group by department_id );

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

select distinct e.department_id as "номера отделов" ,

d.department_name as "наимен отделов" ,

l.street_address, l.city as "местоположение "

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 ;

  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 ) ;