Управление данными УД / Управление данными_ИСТ-11-12-15 / ИСТ-12 / 3-Основы языка SQL / Danilova_Alina_l4
.docxСанкт-Петербургский Государственный Университет Телекоммуникаций имени проф. М.А. Бонч-Бруевича
Факультет Информационных систем и технологий
Отчет
К лабораторной работе №3
По дисциплине: Управление данными
Выполнил: Данилова А.В.
Группа ИСТ-12
Преподаватель: Сабинин О.Ю.
Санкт-Петербург
2014
-
Подключение к СУБД Oracle
Запустить SQL Developer
Создать новое соединение:
Connection Name: Фамилия
Username: hr
Password: hr
Hostname: localhost
Port: 1521
SID: xe
-
Используя Data Modeler получить реляционную модель. Изучить структуру и информацию в таблицах

Описание схемы HR
В записях о штате сотрудников каждый сотрудник имеет идентификационный номер, адрес электронной почты, идентификатор должности, оклад и (идентификатор) руководителя. Некоторые сотрудники дополнительно к окладу зарабатывают комиссионные.
Также компания хранит информацию о должностях в рамках организации. У каждой должности есть идентификатор, название и диапазон ("вилка") окладов.
Некоторые сотрудники долгое время работают в компании и занимали в ней разные должности. При уходе сотрудника с должности записываются сведения о продолжительности его работы в данной должности, её идентификатор и подразделение, в котором работал сотрудник.
Компания из данного примера работает в нескольких регионах, поэтому хранятся сведения о местах расположения её складов и подразделений. Каждый сотрудник приписан к одному подразделению, а каждое подразделение идентифицируется уникальным номером. Каждое подразделение связано (находится во взаимно однозначном соответствии) с одним местоположением, а для каждого местоположения хранится полный адрес, содержащий название улицы, почтовый индекс, город, штат или область и код страны.
Для местоположений подразделений и складов хранится детализированная информация: название страны и географический регион, где расположена страна.
-
Синтаксис команды SELECT:
SELECT * | список столбцов
FROM имена таблиц
WHERE условие отбора строк
GROUP BY список столбцов для группировки
HAVING условие отбора сгруппированных строк
ORDER BY список столбцов для сортировки
-
Написать запросы, позволяющие:
-
Вывести всю информацию из таблицы Employees.
select *
from employees;

-
Вывести фамилии сотрудников и зарплаты сотрудников, получающих зарплату, большую 10000. Фамилии сотрудников вывести заглавными буквами.
select upper(last_name), salary
from employees;
where salary >=10000;

-
Вывести фамилии сотрудников с фамилиями, начинающимися на букву K и имеющими букву n на третьем месте.
select last_name
from employees;
where last_name like 'K_n%';

-
Вывести фамилии сотрудников и первые буквы имен (в одном столбце), а также зарплату с добавленным знаком $. Имена столбцов вывести по-русски. Отсортировать в порядке убывания зарплат.
select last_name || ' ' || substr(first_name,1,1) as Фамилия, salary || '$' as Зарплата
from employees
order by salary desc;

-
Определить сумму зарплат, среднюю зарплату и количество сотрудников.
select sum(salary), avg(salary), count(last_name)
from employees;
![]()
-
Вывести текущую дату.
select current_date
from dual;
![]()
-
Вывести дату и день недели, которые будут через 1000 дней. Информацию вывести в виде:
22-Апрель-2017, Пятница
select to_char(sysdate+1000, 'DD-Month-YYYY, Day')
from dual;
![]()
-
Определить количество прожитых Вами часов.
select (to_date(sysdate,'DD-MM-YYYY')-to_date('03.04.1994'))*24
from dual;

-
Определить день недели, который будет через 1000 дней.
select to_char(sysdate+1000, 'Day')
from dual;
![]()
-
Определить полное количество прожитых Вами лет, количество полных месяцев (которые не вошли в полные года) и количество дней. Пример результата:
25 лет. 10 мес. 5 дн.
select TRUNC(months_between(sysdate, d)/12,0) || ' лет, ' ||
TRUNC((months_between(sysdate, d))- ((TRUNC(months_between(sysdate, d)/12, 0))*12),0) || ' мес, ' ||
TRUNC((sysdate-add_months(d , (TRUNC(months_between(sysdate, d),0)))),0) || ' дн. '
from (select to_date('03.04.1994', 'DD.MM.YYYY') d from dual);

-
Выделить второе слово в адресе отдела (Таблица Locations).
SELECT substr (street_address, instr (street_address,' ')+1,(instr (street_address||' ',' ',1,2)-instr (street_address,' '))) FROM locations

-
Определить сумму цифр в произвольном символьном выражении. Например, для выражения
Fg4h55jkl37
результат должен быть: 25.
select (length(s)-length(replace(s,'1')))*1+ (length(s)-length(replace(s,'2')))*2+ (length(s)-length(replace(s,'3')))*3+ (length(s)-length(replace s,'4')))*4+ (length(s)-length(replace(s,'5')))*5+ (length(s)-length(replace(s,'6')))*6+ (length(s)-length(replace(s,'7')))*7+ (length(s)-length(replace(s,'8')))*8+ (length(s)-length(replace(s,'9')))*9 as “Sum” from (select 'Fg4h55jk137' s from dual);
![]()
-
Определить список сотрудников, принятых на работу в 2004-м году, даты приема на работу и зарплаты. Имена столбцов должны быть - Фамилия, Дата приема на работу, Зарплата.
select last_name "Фамилия", hire_date "Дата приема", salary "Зарплата"
from employees
where to_char(hire_date, 'YY') = '04';

-
Вывести список сотрудников, имеющих три буквы a в фамилии (независимо от регистра) и не имеющих комиссионных процентов.
select employee_id, last_name
from employees
where lower(last_name) like '%a%a%a%' and commission_pct is null;
![]()
-
В произвольной символьной строке оставить между словами только по одному пробелу.
select replace(replace(replace(str, ' ', ' _'), '_ '),'_') "Строка"
from(select 'Test line there' str from dual);

-
Написать команду, которая позволит выводить фамилию сотрудника через запятую столько раз, сколько букв в его фамилии.
select lpad(last_name||' ', length(last_name||’..’)*length(last_name)-1, last_name||’, ‘)as last_name
from employees;

