Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

Лабораторнаяработа №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

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 будет отклонена

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

CREATE OR REPLACE VIEW ned_in AS

SELECT kp, data, kolichestvo from zh_orders

WHERE data BETWEEN sysdate -7 and sysdate;

В данном смешанном представлении скрыты от пользователя столбцы, обязательные для заполнения, что не дает использовать через него DML команды.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]