Скачиваний:
72
Добавлен:
15.03.2015
Размер:
416.85 Кб
Скачать

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

Факультет Информационных систем и технологий

Отчет

К лабораторной работе №3

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

Выполнил: Данилова А.В.

Группа ИСТ-12

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

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

2014

  1. Подключение к СУБД Oracle

Запустить SQL Developer

Создать новое соединение:

Connection Name: Фамилия

Username: hr

Password: hr

Hostname: localhost

Port: 1521

SID: xe

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

Описание схемы HR

В записях о штате сотрудников каждый сотрудник имеет идентификационный номер, адрес электронной почты, идентификатор должности, оклад и (идентификатор) руководителя. Некоторые сотрудники дополнительно к окладу зарабатывают комиссионные.

Также компания хранит информацию о должностях в рамках организации. У каждой должности есть идентификатор, название и диапазон ("вилка") окладов.

Некоторые сотрудники долгое время работают в компании и занимали в ней разные должности. При уходе сотрудника с должности записываются сведения о продолжительности его работы в данной должности, её идентификатор и подразделение, в котором работал сотрудник.

Компания из данного примера работает в нескольких регионах, поэтому хранятся сведения о местах расположения её складов и подразделений. Каждый сотрудник приписан к одному подразделению, а каждое подразделение идентифицируется уникальным номером. Каждое подразделение связано (находится во взаимно однозначном соответствии) с одним местоположением, а для каждого местоположения хранится полный адрес, содержащий название улицы, почтовый индекс, город, штат или область и код страны.

Для местоположений подразделений и складов хранится детализированная информация: название страны и географический регион, где расположена страна.

  1. Синтаксис команды SELECT:

SELECT * | список столбцов

FROM имена таблиц

WHERE условие отбора строк

GROUP BY список столбцов для группировки

HAVING условие отбора сгруппированных строк

ORDER BY список столбцов для сортировки

  1. Написать запросы, позволяющие:

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

select *

from employees;

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

select upper(last_name), salary

from employees;

where salary >=10000;

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

select last_name

from employees;

where last_name like 'K_n%';

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

select last_name || ' ' || substr(first_name,1,1) as Фамилия, salary || '$' as Зарплата

from employees

order by salary desc;

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

select sum(salary), avg(salary), count(last_name)

from employees;

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

select current_date

from dual;

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

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

select to_char(sysdate+1000, 'DD-Month-YYYY, Day')

from dual;

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

select (to_date(sysdate,'DD-MM-YYYY')-to_date('03.04.1994'))*24

from dual;

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

select to_char(sysdate+1000, 'Day')

from dual;

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

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);

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

SELECT substr (street_address, instr (street_address,' ')+1,(instr (street_address||' ',' ',1,2)-instr (street_address,' '))) FROM locations

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

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);

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

select last_name "Фамилия", hire_date "Дата приема", salary "Зарплата"

from employees

where to_char(hire_date, 'YY') = '04';

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

select employee_id, last_name

from employees

where lower(last_name) like '%a%a%a%' and commission_pct is null;

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

select replace(replace(replace(str, ' ', ' _'), '_ '),'_') "Строка"

from(select 'Test line there' str from dual);

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

select lpad(last_name||' ', length(last_name||’..’)*length(last_name)-1, last_name||’, ‘)as last_name

from employees;