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

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

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

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

Дисциплина: Управление Данными (УД)

Отчет к лабораторной работе №4

Тема: «Основы языка SQL»

Выполнил:

студент группы ИСТ-15

Зыбин С. Ю.

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

2014

Цель работы: составить SQL запросы к исходным данным с таблиц hr.

Ход работы:

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

SELECT MAX(salary) Maximum, MIN(salary) Minimum, ROUND(AVG(salary)) Average, SUM(salary) Sum

FROM employees;

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

SELECT COUNT(employees.job_id) ID, job_title TITLE

FROM employees INNER JOIN jobs

ON employees.job_id = jobs.job_id

GROUP BY job_title;

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

SELECT COUNT(distinct(manager_id)) as "Number of Managers"

FROM employees

WHEREmanager_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 sl.last_name AS LAST_NAME_SL, sl.salary AS SALARY_SL, na.last_name AS LAST_NAME_NA, na.salary AS SALARY_NA

FROM employees sl JOIN employees na

ON sl.manager_id=na.manager_id;

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

SELECT e.last_name, e.hire_date

FROM employees e JOIN employees Davies

ON (Davies.last_name='Davies')

WHERE Davies.hire_date<e.hire_date;

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

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 emp.department_id, dep.department_name, dep.location_id, count(emp.employee_id)

FROM employees emp join departments dep

ON (emp.department_id(+)=dep.department_id)

GROUP BY emp.department_id, dep.department_name, dep.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 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 last_name, employee_id

FROM employees

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

ORDER BY salary;

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

SELECT e.last_name, e.salary

FROM employees e, employees n

WHERE e.manager_id = n.employee_id

AND n.last_name = 'King';

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

SELECT department_id, min(salary), round(avg(salary))

FROM employees

GROUP BY 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

WHERE country_id not in (SELECT distinct locations.country_id as country

FROM locations

JOIN departments

ON locations.location_id = departments.location_id );

Вывод: в данной лабораторной работе были изучены и применены основные запросы SLQ на примере таблиц в СУБД Oracle. Полученные практические навыки являются полезными при работе с уже существующей базой данных, так как позволяют легко и быстро получить из неё необходимую информацию.

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