Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

лб2

.docx
Скачиваний:
7
Добавлен:
23.04.2022
Размер:
1.9 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО СВЯЗИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

(СПбГУТ)

Кафедра безопасности информационных систем

ОТЧЁТ

по лабораторной работе на тему:

«Основы языка 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;

Соседние файлы в предмете Управление данными