Лабораторнаяработа №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
В своей индивидуальной БД создать:
(Горизонтальное обновляемое представление) Выбрать заказы, совершенные за последнюю неделю.
CREATE OR REPLACE VIEW ned_in AS
SELECT * from zh_orders
WHERE data BETWEEN sysdate -7 and sysdate
WITH CHECK OPTION;
Обновляемость представления проверим, используя инструкцию INSERTINTO.
INSERT INTO ned_in
VALUES ( null, 'Nevezhda Nadezhda', 3,'18.11.2016', 1 );
СУБД добавит новую строку в исходную таблицу zh_orders; она будет видна также в представлении ned_in. Однако попытка добавить строку с датой раньше sysdate -7 будет отклонена
(Вертикальное или смешанное необновляемое представление) Создадим похожее представление, но без некоторых столбцов( код заказа и имя покупателя, вовсе не потому что сломан триггер) .
CREATE OR REPLACE VIEW ned_in AS
SELECT kp, data, kolichestvo from zh_orders
WHERE data BETWEEN sysdate -7 and sysdate;
В данном смешанном представлении скрыты от пользователя столбцы, обязательные для заполнения, что не дает использовать через него DML команды.
