Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
work_3.doc
Скачиваний:
11
Добавлен:
09.11.2019
Размер:
215.04 Кб
Скачать

Задания для самостоятельной работы

  1. Создайте таблицу Сотрудники в базе данных BookSHOP. Таблица должна содержать поля: личный_номер (первичный ключ), фамилия_имя, размер_комиссионных (значение по умолчанию  3%), должность («директор», «консультант», «младший продавец», «старший продавец», «закупщик»), дата_приема_на_работу (по умолчанию  текущая дата).

  2. В таблицу Заказы внесите следующие изменения: а) добавьте столбец Оформил_заказ с ограничениями NOT NULL и внешнего ключа со ссылкой на столбец Личный_номер таблицы Сотрудники; б) добавьте столбец Количество с с ограничением NOT NULL и значением по умолчанию  1.

  3. Создайте копию таблицы Поставки, переопределив первичный ключ как Номер_договора типа serial и упорядочив все строки в новой таблице по полям Код_книги и Код_поставщика.

  4. Измените таблицу Сотрудники так, чтобы размер комиссионных по умолчанию был равен 5% и для этого поля не допускались NULL-значения.

  5. В таблице Заказы в состав первичного ключа дополнительно введите поле Код_книги (Указание: для этого следует удалить имеющийся в таблице первичный ключ)

  6. Создайте уникальный кластерный индекс для таблицы Книги. Обоснуйте выбор полей для индексирования.

  7. Создайте представление для вывода трех заказчиков, имеющих наибольшее количество заказов.

  8. Создайте представление для вывода количества оформленных каждым сотрудником заказов и общей стоимости этих заказов.

  9. Создайте представление, которое выводило бы данные о поставках, упорядоченные по наименованию издательства и количеству книг.

  10. Создайте представление, которое выводило бы информацию о неоплаченных заказах.

  1. Инструкции языка манипулирования данными

  1. Инструкция insert

Таблицы создаются инструкцией CREATE TABLE. Эта инструкция создает пустую таблицу – таблицу без строк. Значения вводятся, удаляются или обновляются с помощью инструкций языка манипулирования данными (DML), основными из которых являются инструкции INSERT (вставить), DELETE (удалить), и UPDATE (обновить). Подобно предложению SELECT они могут оперировать как базовыми таблицами, так и представлениями.

Синтаксис инструкции INSERT:

INSERT [INTO] {базовая_таблица | представление} [(столбец [, ...] )]

{ DEFAULT VALUES | VALUES ({ DEFAULT | NULL | выражение } [ , ...] )

| запрос }

[ RETURNING { * | выражение [ [ AS ] имя ] } [, ...] ]

Предложение INTO необязательно и просто улучшает читабельность инструкции.

Предложение RETURNING (не стандартное) позволяет вывести на экран (так же, как и при использовании SELECT) значения выражений, построенных на основе вставляемых данных.

Возможны два варианта использования INSERT: без запроса и с запросом. В первом варианте в указанную таблицу вставляется строка со значениями полей, указанными в перечне предложения VALUES (значения), причем i-е значение должно соответствовать i-му столбцу в списке столбцов (как и в инструкции SELECT, порядок следования столбцов может быть произвольным). Столбцы, не указанные в списке, заполняются NULL-значениями или значениями по умолчанию. Если NULL-значениями для такого столбца не допустимы и не указано значение по умолчанию, то транзакция отменяется и выводится сообщение об ошибке. Если в списке VALUES указаны все столбцы модифицируемой таблицы и порядок их перечисления соответствует порядку столбцов в описании таблицы, то список столбцов после имени таблицы или представления можно опустить.

Во втором варианте использования инструкции INSERT сначала выполняется запрос, т.е. по предложению SELECT в памяти формируется рабочая таблица, а потом строки рабочей таблицы загружаются в INSERT-таблицу. При этом i-й столбец рабочей таблицы (i-й элемент списка SELECT) соответствует i-му столбцу в списке столбцов модифицируемой таблицы. Здесь также при выполнении указанных выше условий может быть опущен список столбцов предложения INTO. Инструкция INSERT с запросом чаще применяется для переноса строк из одной таблицы в другую (возможно через представление, но, очевидно, модифицируемое).

Примеры:

/* вставляем в таблицу Доставка новую строку */

INSERT INTO "Доставка"

VALUES ( 1000, -- Заказ

DEFAULT, -- Курьер

DEFAULT, -- Дата_время

DEFAULT) -- Доставлен

/* вставляем в таблицу Доставка все оплаченные заказы */

INSERT INTO "Доставка" ("Заказ", "Дата_время")

SELECT "Код_заказа", "Дата" + '1 0:0'::interval

FROM "Заказы"

WHERE "Оплачен" LIKE ‘%да%’;

/* создаем правило для представления Просроченные_ доставки_2 на вставку */

CREATE RULE _ins_ AS ON INSERT TO "Просроченные_ доставки_2"

DO INSTEAD

INSERT INTO "Доставка" VALUES (NEW."Заказ", NEW."Дата_время");

/* проверяем, как работает правило _ins_ */

insert into "Заказы" VALUES (DEFAULT, NULL, NULL, NULL,NULL);

insert into "Просроченные_ доставки_2" VALUES ((select max("Код_заказа") from "Заказы"), now()+'1 0:'::interval);

select * from "Просроченные_ доставки_2" ;

select * from “Доставка";

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