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

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

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

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

Отчет

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

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

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

Выполнила: Григорьева А.Т

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

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

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

2014

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

select round(max(salary)) as "Maximum", round(avg(salary)) as "Average", round(min(salary)) as "Minimum", round(sum(salary)) as "sum"

from employees;

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

select job_title, count(last_name)

from jobs left outer join employees

on employees.job_id=jobs.job_id

group by job_title;

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

select count(distinct(manager_id)) as "Nubre of Managers"

from employees

where manager_id is not null;

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

SELECT max(salary) - min(salary) as DIFFERENS

FROM employees;

  1. Напишите запрос для вывода номера каждого менеджера, имеющего подчинённых, и заработную плату самого низкооплачиваемого из его подчинённых. Исключите менеджеров для которых неизвестны их менеджеры. Исключите все группы, где минимальный оклад составляет менее $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;

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

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

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;

  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 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, d.department_name, D.Location_id,

count (E.Employee_id)

From Employees E left 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, 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 e.last_name, e.salary

from employees e, employees em

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

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

select department_id, min(salary)

from employees

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

group by department_id;

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

select employees.department_id, department_name, location_id

from departments inner join employees

on employees.department_id=departments.department_id

where job_id not in 'SA_REP';

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

Select distinct l.country_id, cn.country_name from locations l, countries cn

where l.location_id not in (select location_id from departments) and l.country_id = cn.country_id;

Соседние файлы в папке 4-Основы SQL 2