Управление данными УД / Управление данными_ИСТ-11-12-15 / ИСТ-12 / 3-Основы языка SQL / ЛАБ3 Соколов Даниил ИСТ-12
.docxСанкт-Петербургский Государственный Университет Телекоммуникаций имени проф. М.А. Бонч-Бруевича
Факультет Информационных систем и технологий Кафедра Информационных и управляющих систем
Отчет к лабораторной работе №4
«Составление запросов SQL»
По дисциплине: Управление данными
Выполнил: Соколов Д.С.
Группа ИСТ-12
Преподаватель: Сабинин О.Ю.
Санкт-Петербург
2014
Цель работы
Составить запросы на языке SQL по данным заданиям.
Задание
Используя Data Modeler получить реляционную модель базы HR. Изучить структуру и информацию в таблицах.
-
Вывести всю информацию из таблицы Employees.
-
Вывести фамилии сотрудников и зарплаты сотрудников, получающих зарплату, большую 10000. Фамилии сотрудников вывести заглавными буквами.
-
Вывести фамилии сотрудников с фамилиями, начинающимися на букву K и имеющими букву n на третьем месте.
-
Вывести фамилии сотрудников и первые буквы имен (в одном столбце), а также зарплату с добавленным знаком $. Имена столбцов вывести по-русски. Отсортировать в порядке убывания зарплат.
-
Определить сумму зарплат, среднюю зарплату и количество сотрудников.
-
Вывести текущую дату.
-
Вывести дату и день недели, которые будут через 1000 дней. Информацию вывести в виде:
22-Апрель-2017, Пятница
-
Определить количество прожитых Вами часов.
-
Определить день недели, который будет через 1000 дней.
-
Определить полное количество прожитых Вами лет, количество полных месяцев (которые не вошли в полные года) и количество дней. Пример результата:
25 лет. 10 мес. 5 дн.
-
Выделить второе слово в адресе отдела (Таблица Locacions).
-
Определить сумму цифр в произвольном символьном выражении. Например, для выражения
Fg4h55jkl37
результат должен быть: 25.
-
Определить список сотрудников, принятых на работу в 2004-м году, даты приема на работу и зарплаты. Имена столбцов должны быть - Фамилия, Дата приема на работу, Зарплата.
-
Вывести список сотрудников, имеющих три буквы a в фамилии (независимо от регистра) и не имеющих комиссионных процентов.
-
В произвольной символьной строке оставить между словами только по одному пробелу.
-
Написать команду, которая позволит выводить фамилию сотрудника через запятую столько раз, сколько букв в его фамилии.
Ход работы
-
Создадим новое подключение к базе данных HR (Рис.1).

Рисунок 1 – Подключение к Базе Данных HR
-
Получим в Data Modeler реляционную модель БД HR (Рис.2).

Рисунок 2 – Модель Базы Данных HR
-
Выведем всю информацию из таблицы Employees (Рис.3)
Запрос 1:
SELECT *
FROM Employees;
Результат:

Рисунок 3 – Вывод запроса 1из таблицы Employees
-
Выведем фамилии сотрудников и зарплаты сотрудников, получающих зарплату, большую 10000. Фамилии сотрудников выведем заглавными буквами (Рис.4).
Запрос 2:
SELECT UPPER (Last_name), Salary
FROM employees
WHERE salary > 10000;
Результат:

Рисунок 4 – Вывод запроса 2 из таблицы Employees
-
Выведем фамилии сотрудников с фамилиями, начинающимися на букву K и имеющими букву n на третьем месте(Рис.5).
Запрос 3:
SELECT Last_name
FROM employees
WHERE last_name LIKE 'K_n%';
Результат:

Рисунок 5 – Вывод запроса 3 из таблицы Employees
-
Выведем фамилии сотрудников и первые буквы имен (в одном столбце), а также зарплату с добавленным знаком $. Имена столбцов выведем по-русски. Отсортируем в порядке убывания зарплат. (Рис.6)
Запрос 4:
SELECT Last_name ||' '|| substr(first_name,1,1) AS "Фамилия И", Salary ||'$' AS "Зарплата"
FROM employees
ORDER BY salary DESC;
Результат:

Рисунок 6 – Вывод запроса 4 из таблицы Employees
-
Определим сумму зарплат, среднюю зарплату и колличество сотрудников(Рис.7)
Запрос 5 :
SELECT SUM(Salary), AVG(Salary), COUNT(Employee_id)
FROM Employees;
Результат:

Рисунок 7 – Вывод запроса 5 из таблицы Employees
-
Выведем текущую дату(Рис.8)
Запрос 6:
SELECT sysdate
FROM dual;
Результат:

Рисунок 8 – Вывод запроса 6
-
Выведем дату и день недели, которые будут через 1000 дней. (Рис.9)
Информацию выведем в виде: 22-Апрель-2017, Пятница
Запрос 7:
SELECT to_Char (sysdate + 1000, 'DD-Month-YYYY, Day', 'NLS_Date_Language = Russian')
FROM dual;
Результат:

Рисунок 9 – Вывод запроса 7
-
Определим колличество прожитих мною часов (Рис.10)
Запрос 8:
SELECT ROUND((SYSDATE - to_date('08-06-1993', 'DD-MM-YYYY'))*24, 1)
FROM Dual;
Результат:

Рисунок 10 – Вывод запроса 8
-
Определим день недели , который будет через 1000 дней (Рис.11).
Запрос 9:
SELECT to_Char (sysdate + 1000, 'DAY', 'NLS_Date_Language = Russian')
FROM dual;
Результат:

Рисунок 11 – Вывод запроса 9
-
Определим полное количество прожитых мною лет, количество полных месяцев (которые не вошли в полные года) и количество дней(Рис.12). Выведем в форме:
25 лет. 10 мес. 5 дн.
Запрос 10:
SELECT TRUNC(MONTHS_BETWEEN(sysdate, '08.06.1993')/12)|| ' лет '||
TRUNC(MONTHS_BETWEEN (sysdate, ADD_MONTHS('08.06.1993', TRUNC((MONTHS_BETWEEN (sysdate, '08.06.1993')/12),0)*12)), 0) || ' месяцев ' ||
TRUNC(to_char(sysdate - ADD_MONTHS (ADD_MONTHS('08.06.1993',TRUNC((MONTHS_BETWEEN(SYSDATE,'08.06.1993')/12),0)*12), TRUNC(MONTHS_BETWEEN (sysdate, ADD_MONTHS('08.06.1993', TRUNC((MONTHS_BETWEEN (sysdate, '08.06.1993')/12),0)*12)), 0))), 0)
|| ' дней' AS "Я прожил: "
FROM dual;
Результат:

Рисунок 12 – Вывод запроса 10
-
Выделим второе слово в адресе отдела таблицы Locations (Рис.13)
Запрос 11:
SELECT SUBSTR(Street_address,
INSTR(Street_address, ' ', 1)+1, INSTR(Street_address || ' ', ' ', INSTR(Street_address, ' ', 1)+1) - INSTR(Street_address, ' ', 1))
AS "Второе слово"
FROM Locations;
Результат:

Рисунок 13 – Вывод запроса 11 из тблицы Locations
-
Определим сумму цифр в произвольном символьном выражении(Рис.14) Hfti929f3ss1
Запрос 12:
WITH qu AS (SELECT 'Hfti929f3ss1' as str FROM dual)
SELECT 9*(LENGTH(str) - LENGTH(REPLACE(str, '9')))
+8*(LENGTH(str) - LENGTH(REPLACE(str, '8')))
+7*(LENGTH(str) - LENGTH(REPLACE(str, '7')))
+6*(LENGTH(str) - LENGTH(REPLACE(str, '6')))
+5*(LENGTH(str) - LENGTH(REPLACE(str, '5')))
+4*(LENGTH(str) - LENGTH(REPLACE(str, '4')))
+3*(LENGTH(str) - LENGTH(REPLACE(str, '3')))
+2*(LENGTH(str) - LENGTH(REPLACE(str, '2')))
+1*(LENGTH(str) - LENGTH(REPLACE(str, '1')))
AS "Сумма чисел в строке"
FROM qu;
Результат:

Рисунок 14 – Вывод запроса 12
-
Определим список сотрудников принтятых на работу в 2004 году, дату приема и зарплату.Имена столбцов будут : Фамилия, Дата приема и Зарплата, соответственно. (Рис.15)
Запрос 13:
SELECT Last_name AS Фамилия, Hire_date AS "Дата приема", Salary AS Зарплата
FROM Employees
WHERE Hire_date BETWEEN to_Date ('1.01.2004','DD.MM.YYYY') AND to_Date('31.12.2004','DD.MM.YYYY');
Резульат:

Рисунок 15 – Вывод запроса 13 из таблицы employees
-
Выведем список сотрудников, у которых в фамилии 3 буквы «а», независимо от регистра, а также комисионный процент отсутствует(Рис.16)
Запрос 14:
SELECT Last_name AS Фамилия, Commission_pct AS "Комиссионный процент"
FROM Employees
WHERE (LOWER(Last_name) LIKE '%a%a%a%') AND Commission_pct IS NULL;
Результат:

Рисунок 16 – Вывод запроса 14 из таблицы employees
-
В произвольной строке оставим между словами только по одномупробелу. Например строка «ыва ы ыва ыы ыва»
Запрос 15:
WITH qu AS (SELECT 'ыва ы ыва ыы ыва' AS str FROM dual)
SELECT REPLACE(REPLACE(REPLACE(str,' ',' '),' ',' '),' ',' ') as "Без пробелов"
FROM qu;
Результат:

Рисунок 17 – Вывод запроса 15
-
Выведем фамилию сотрудника столько раз, сколько букв в его имени (Рис.18).
Запрос 16:
SELECT LPAD(Last_name, (LENGTH(Last_name)*(LENGTH(Last_name)+2)-2), Last_name||', ')
FROM Employees;
Результат:

Рисунок 18 – Вывод запроса 16 из таблицы employees
Вывод:
По выполнению данной лабораторной работы, мною были изучены некоторые запросы, в частности SELECT, некоторые строковые и другие функции языка SQL. Работа велась на примере базы данных HR.
