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

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

Факультет Информационных систем и технологий Кафедра Информационных и управляющих систем

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

«Составление запросов SQL»

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

Выполнил: Соколов Д.С.

Группа ИСТ-12

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

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

2014

Цель работы

Составить запросы на языке SQL по данным заданиям.

Задание

Используя Data Modeler получить реляционную модель базы HR. Изучить структуру и информацию в таблицах.

  1. Вывести всю информацию из таблицы Employees.

  2. Вывести фамилии сотрудников и зарплаты сотрудников, получающих зарплату, большую 10000. Фамилии сотрудников вывести заглавными буквами.

  3. Вывести фамилии сотрудников с фамилиями, начинающимися на букву K и имеющими букву n на третьем месте.

  4. Вывести фамилии сотрудников и первые буквы имен (в одном столбце), а также зарплату с добавленным знаком $. Имена столбцов вывести по-русски. Отсортировать в порядке убывания зарплат.

  5. Определить сумму зарплат, среднюю зарплату и количество сотрудников.

  6. Вывести текущую дату.

  7. Вывести дату и день недели, которые будут через 1000 дней. Информацию вывести в виде:

22-Апрель-2017, Пятница

  1. Определить количество прожитых Вами часов.

  2. Определить день недели, который будет через 1000 дней.

  3. Определить полное количество прожитых Вами лет, количество полных месяцев (которые не вошли в полные года) и количество дней. Пример результата:

25 лет. 10 мес. 5 дн.

  1. Выделить второе слово в адресе отдела (Таблица Locacions).

  2. Определить сумму цифр в произвольном символьном выражении. Например, для выражения

Fg4h55jkl37

результат должен быть: 25.

  1. Определить список сотрудников, принятых на работу в 2004-м году, даты приема на работу и зарплаты. Имена столбцов должны быть - Фамилия, Дата приема на работу, Зарплата.

  2. Вывести список сотрудников, имеющих три буквы a в фамилии (независимо от регистра) и не имеющих комиссионных процентов.

  3. В произвольной символьной строке оставить между словами только по одному пробелу.

  4. Написать команду, которая позволит выводить фамилию сотрудника через запятую столько раз, сколько букв в его фамилии.

Ход работы

  1. Создадим новое подключение к базе данных HR (Рис.1).

Рисунок 1 – Подключение к Базе Данных HR

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

Рисунок 2 – Модель Базы Данных HR

  1. Выведем всю информацию из таблицы Employees (Рис.3)

Запрос 1:

SELECT *

FROM Employees;

Результат:

Рисунок 3 – Вывод запроса 1из таблицы Employees

  1. Выведем фамилии сотрудников и зарплаты сотрудников, получающих зарплату, большую 10000. Фамилии сотрудников выведем заглавными буквами (Рис.4).

Запрос 2:

SELECT UPPER (Last_name), Salary

FROM employees

WHERE salary > 10000;

Результат:

Рисунок 4 – Вывод запроса 2 из таблицы Employees

  1. Выведем фамилии сотрудников с фамилиями, начинающимися на букву K и имеющими букву n на третьем месте(Рис.5).

Запрос 3:

SELECT Last_name

FROM employees

WHERE last_name LIKE 'K_n%';

Результат:

Рисунок 5 – Вывод запроса 3 из таблицы Employees

  1. Выведем фамилии сотрудников и первые буквы имен (в одном столбце), а также зарплату с добавленным знаком $. Имена столбцов выведем по-русски. Отсортируем в порядке убывания зарплат. (Рис.6)

Запрос 4:

SELECT Last_name ||' '|| substr(first_name,1,1) AS "Фамилия И", Salary ||'$' AS "Зарплата"

FROM employees

ORDER BY salary DESC;

Результат:

Рисунок 6 – Вывод запроса 4 из таблицы Employees

  1. Определим сумму зарплат, среднюю зарплату и колличество сотрудников(Рис.7)

Запрос 5 :

SELECT SUM(Salary), AVG(Salary), COUNT(Employee_id)

FROM Employees;

Результат:

Рисунок 7 – Вывод запроса 5 из таблицы Employees

  1. Выведем текущую дату(Рис.8)

Запрос 6:

SELECT sysdate

FROM dual;

Результат:

Рисунок 8 – Вывод запроса 6

  1. Выведем дату и день недели, которые будут через 1000 дней. (Рис.9)

Информацию выведем в виде: 22-Апрель-2017, Пятница

Запрос 7:

SELECT to_Char (sysdate + 1000, 'DD-Month-YYYY, Day', 'NLS_Date_Language = Russian')

FROM dual;

Результат:

Рисунок 9 – Вывод запроса 7

  1. Определим колличество прожитих мною часов (Рис.10)

Запрос 8:

SELECT ROUND((SYSDATE - to_date('08-06-1993', 'DD-MM-YYYY'))*24, 1)

FROM Dual;

Результат:

Рисунок 10 – Вывод запроса 8

  1. Определим день недели , который будет через 1000 дней (Рис.11).

Запрос 9:

SELECT to_Char (sysdate + 1000, 'DAY', 'NLS_Date_Language = Russian')

FROM dual;

Результат:

Рисунок 11 – Вывод запроса 9

  1. Определим полное количество прожитых мною лет, количество полных месяцев (которые не вошли в полные года) и количество дней(Рис.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

  1. Выделим второе слово в адресе отдела таблицы 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

  1. Определим сумму цифр в произвольном символьном выражении(Рис.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

  1. Определим список сотрудников принтятых на работу в 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

  1. Выведем список сотрудников, у которых в фамилии 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

  1. В произвольной строке оставим между словами только по одномупробелу. Например строка «ыва ы ыва ыы ыва»

Запрос 15:

WITH qu AS (SELECT 'ыва ы ыва ыы ыва' AS str FROM dual)

SELECT REPLACE(REPLACE(REPLACE(str,' ',' '),' ',' '),' ',' ') as "Без пробелов"

FROM qu;

Результат:

Рисунок 17 – Вывод запроса 15

  1. Выведем фамилию сотрудника столько раз, сколько букв в его имени (Рис.18).

Запрос 16:

SELECT LPAD(Last_name, (LENGTH(Last_name)*(LENGTH(Last_name)+2)-2), Last_name||', ')

FROM Employees;

Результат:

Рисунок 18 – Вывод запроса 16 из таблицы employees

Вывод:

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