БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра систем управления
ОТЧЕТ ПО ЛАБОРАТОРНЫМ РАБОТАМ
По предмету: ИОСУ
Разработка БД
2 вариант
Проверила: Крупская М.А
Выполнил: студент группы 322402
Жарский Д.А
Минск 2016
Лабораторная работа №1
1. Создать собственную базу данных по полученному варианту. Варианты заданий приведены в Приложении 1 при этом:
- создать таблицы;
- создать ограничения;
- создать индексы, синонимы, последовательности;
- внести данные в таблицы, где необходимо в качестве первичных ключей использовать псевдостолбцы созданных последовательностей.
Последовательности:
CREATE SEQUENCE seqWorkers
INCREMENT BY 1
START WITH 1;
CREATE SEQUENCE seqClients
INCREMENT BY 1
START WITH 1;
CREATE SEQUENCE seqProviders
INCREMENT BY 1
START WITH 1;
CREATE SEQUENCE seqFuels
INCREMENT BY 1
START WITH 1;
CREATE SEQUENCE seqInvoices
INCREMENT BY 1
START WITH 1;
CREATE SEQUENCE seqSales
INCREMENT BY 1
START WITH 1;
Таблицы
CREATE TABLE zh_orders (kz INTEGER not null,
customer VARCHAR(22) not null,
kp integer not null,
data date not null unique,
primary key (kz)
);
CREATE TABLE zh_creator (nc INTEGER not null,
adress VARCHAR(22) not null,
tel_no integer not null,
primary key (nc)
);
CREATE TABLE zh_materials (km INTEGER not null,
nazv_ma VARCHAR2(22) not null,
cvet VARCHAR2(15) not null check(cvet ='black' or cvet ='blue' or cvet ='yellow' or cvet ='green' or cvet ='grey' or cvet ='white' or cvet ='brown'),
primary key (km)
);
CREATE TABLE zh_catolog(
kp INTEGER not null,
km INTEGER not null,
name VARCHAR(22) not null,
nc INTEGER not null,
cost integer not null,
amount integer,
primary key (kp)
);
ALTER TABLE zh_orders add constraint c1 foreign key (kp) references zh_catolog;
ALTER TABLE zh_catolog add constraint c2 foreign key (km) references zh_materials;
ALTER TABLE zh_catolog add constraint c3 foreign key (nc) references zh_creator;
АВТОИНКРИМЕНТ ЗАКАЗОВ
create sequence orders_kz
start with 1
increment by 1
nomaxvalue;
create or replace trigger kz_in
before insert on zh_orders
for each row
begin
if:new.kz is null then
select orders_kz.nextval into:new.kz from dual;
end if;
end;
/
АВТОИНКРИМЕНТ МАТЕРИАЛОВ
create sequence materials_inc
start with 1
increment by 1
nomaxvalue;
create or replace trigger km_in
before insert on zh_materials
for each row
begin
if:new.km is null then
select materials_inc.nextval into:new.km from dual;
end if;
end;
/
ЗАПОЛНЕНИЕ
insert into zh_materials values (null, 'pork skin', 'black');
insert into zh_creator values (1, 'per. gagarina12-10', 1313133);
insert into zh_catolog values (1, 1, 'sumka la normale', 1, 9.99, 8);
insert into zh_orders values (null, 'petrov', 1, 12-06-2010);
доделано:
alter table zh_orders add kolichestvo integer;
create public synonym zakazy for zh_orders;
create index index_cvet on zh_materials (cvet);
Лабораторнаяработа №2
Цель работы – изучить синтаксис и назначение инструкции SELECT,научиться создавать условные, многотабличные, итоговые, параметрические запросы, запросы на объединение и вложенные запросы.
. Самостоятельно придумать и реализовать следующие запросы:
1) с внутренним соединением таблиц, используя стандартный синтаксис SQL (JOIN…ON, JOIN…USINGили NATURALJOIN);
– Соединить таблицы при помощи INNER JOIN. Innerjoin необходим для получения только тех строк, для которых существует соответствие записей главной таблицы и присоединяемой.
2) с внешним соединением таблиц используя FULLJOIN, LEFTJOINилиRIGHTJOIN. Теперь в запросе 1) изменим innerjoin на leftjoin.(
Как видим, добавились строки с информацией о производителях, товары которых не продавались и не имеются в каталоге.
3)с использованием предиката IN с подзапросом.
Информация о товарах, которых покупали не по одному.
4) с использованием ANY/ALL с подзапросом
– Вывести информацию о товарах, которых больше чем сделанных из выбранного материала.
select Ca.kp, Ca.name, Ca.cost, Ma.nazv_ma, Ma.cvet, Cr.nc
from zh_catolog Ca, zh_materials Ma, zh_creator Cr
where Ca.Amount > any (select max(amount) from zh_catolog where km ='&NOMER_MATERIALA') and
(Ca.idc = Cr.idc) and (Ma.km = Ca.km)
;
ALL — сравнение будет производиться со всеми записями, которые возвращает подзапрос (или просто со всеми значениями в набор). True вернется только в том случае, если все записи, которые возвращает подзапрос, будут удовлетворять указанному вами условию. Кроме того, в Oracle значение True вернется в ситуации, когда подзапрос не вернет ни одной записи.
В данном случае разницы между ANY/ALL нет, тк в подзапросе только одна запись
5) с использованием предиката EXISTS/NOTEXISTS с подзапросом
– Показать количество оставшегося товара, если за сегодня не было совершено покупок
Показать товары, которые не продавались
Лабораторная работа №3
1. В своей индивидуальной БД создать:
2. (Горизонтальное обновляемое представление) Выбрать заказы, совершенные за последнюю неделю.
CREATE OR REPLACE VIEW ned_in AS
SELECT * from zh_orders