лб2
.docxФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
(СПбГУТ)
Кафедра безопасности информационных систем
ОТЧЁТ
по лабораторной работе на тему:
«Основы языка Oracle-SQL. Функции»
по дисциплине
«Управление данными»
Выполнила студентка группы ИБ-01вп,
Санкт-Петербург, 2022 г.
Цель работы:
Научиться применять функции в запросах к таблицам базы данных на языке SQL в Oracle.
Задачи:
создать свою учетную запись и соединение;
отобразить реляционную модель БД;
выполнить запросы и приложить выводы.
Ход выполнения работы:
3. Написать запросы:
3.1 Математические функции
a) Округлить числа 1234,448 и -32,3519 до 2 знаков после запятой, 1234,448 до целого и -32,3519 до десятков. Вывести результат в 4 столбца, обозначив S1, S2, S3, S4.
select round(1234.448, 2) as S1, round(-32.3519,2) as S2, round(1324.448,0) as S3, round(-32.3519,-1) as S4 from dual;
b) Определить остаток от деления выражения (5+25)/7 на 2, округлив этот остаток до 2 знаков после запятой и обозначив результат как Пример.
select round(mod((5+25)/7,2),2) as Пример from dual;
3.2 Символьные функции
a) Вывести фамилии сотрудников и зарплаты сотрудников, получающих зарплату, меньшую 10000. Фамилии сотрудников вывести заглавными буквами.
select upper(last_name), salary from employees where salary < 10000;
b) Выведите фамилии служащих (первая буква каждой фамилии должна быть строчной, а остальные - заглавными) и длину каждой фамилии для тех служащих, фамилия которых начинается с символа J, A или М. Присвойте соответствующие заголовки столбцам
select initcap(last_name) "Фамилия", LENGTH(LAST_NAME)"Длина фамилии" from employees where regexp_like(last_name, '[AJM]');
c) Вывести фамилии служащих, имеющих номера 110, 100, 103, 107, дополнив их
фамилии слева пятью символами «*»‘
select '*****'||last_name, employee_id from employees where regexp_like(employee_id, '100|110|103|107');
3.3 Функции для работы с датой и временем
a) Выведите фамилию, идентификатор должности и дату начала работы всех служащих, нанятых в период с 20 февраля 1998 по 1 мая 2003 г.
select last_name, job_id, salary from employees where hire_date <= '01-МАЙ-03' AND hire_date >= '20-ФЕВ-98';
b) Создайте запрос для определения срока работы сотрудников в месяцах до текущей
даты. Назовите столбец MONTHS_WORKED. Округлите результат до целого числа.
select round(months_between(CURRENT_DATE, hire_date),0)"MONTHS_WORKED" from employees;
c) Вывести разницу в месяцах между датами приема на работу и окончания работы
сотрудников с номерами 100 и 101 (таблица job_history).
select round(months_between(end_date, start_date),0) from job_history where regexp_like (employee_id, '10[01]');
3.4 Функции преобразования данных
a) Вывести дату и день недели, которые будут через 1000 дней. Информацию вывести в виде: 22-Апрель-2017, Пятница
select to_char(sysdate+1000, 'dd-Mon-yyyy, Day') from dual;
b) Вывести текущую дату со временем в виде Tue 21-Apr-1998 21:18:27 дав название
столбцу Current Time
alter session set NLS_DATE_LANGUAGE = 'AMERICAN';
select to_char(current_date, 'Dy dd-Mon-yyyy hh24:mi:ss')"Current Time" from dual;
c) Выведите фамилии сотрудников, дату и день недели принятия их на работу и дату
следующего вторника, Используйте функцию next_day и обозначения столбцов – Фамилия, Дата приема, Текущ день, След Вторник.
select last_name "Фамилия", to_char(hire_date, 'dd-mm-yy, dy') "Дата приема", current_date "Текущ день", next_day(current_date, 'вторник')"След Вторник" from employees;
3.5 Агрегатные функции
a) Вывести самый высокий, самый низкий и средний оклад по всем служащим, а также сумму всех окладов. Назвать столбцы Maximum, Minimum, Average и Sum. Округлите значения до ближайшего целого.
select max(salary) "Maximum", min(salary) "Minimum", round(AVG(salary),0) "Average", sum(salary) "Sum" from employees;
b) Определите, минимальную дату приема на работу и соответствующий день недели в одном столбце. Назовите Мин Дата Приема.
select to_char(min(hire_date), 'dd-mm-yy, Day')"Мин Дата Приема" from employees;
3.6 Дополнительные функции
a) Вывести список сотрудников, не имеющих менеджера и вывести вместо null значение 0. Дать обозначения столбцам Фамилия и Начальник
select last_name as Фамилия, nvl(manager_id, 0) as Начальник from employees where manager_id is null;
b) Вывести список сотрудников, фамилии которых начинаются на С, их комиссионные и новое значение комиссионных, имеющих значение null. Дать обозначения столбцам Фамилия, Комиссионные и Комиссионные1
select last_name as Фамилия, commission_pct as Комиссионные, nvl(commission_pct, 1) as Комиссионные1 from employees where last_name like 'C%';
c) Вывести для сотрудников, имеющих номера >140 и <150, комиссионные, номер и
первое отличное от null значение из комиссионных и номера
select commission_pct, employee_id, coalesce(commission_pct, employee_id) from employees where employee_id > 140 AND employee_id < 150;
d) Вывести для сотрудников, имеющих номера >195, фамилию, зарплату и комментарий: меньше 1000 (для зарплат <1000), больше 5000 (для зарплат >5000), больше 1000 и меньше 5000 (для зарплат>=1000 и <=5000).
select first_name, salary, case WHEN salary < 1000 THEN 'меньше 1000' WHEN salary > 5000 THEN 'больше 5000' WHEN salary >= 1000 and salary < 5000 THEN 'больше 1000 и меньше 500' END Комментарий from employees;