Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП СУБД Ч.2.doc
Скачиваний:
16
Добавлен:
11.06.2015
Размер:
545.79 Кб
Скачать

2.5. Создание таблиц при помощи команды select

Таблицы, создание которых рассматривалось выше, после исполнения соответствующих команд CREATE TABLE не содержат, естественно, строк с данными. Другим вариантом использования этой команды является создание таблиц из данных, взятых из других таблиц. Для этого необходимо при определении таблицы указать SELECT-запрос, который будет вычислен, и его значение – множество строк – образует строки новой таблицы. При этом структура новой таблицы – имена полей и их типы – будет создана в соответствии со структурой выборки запроса. Определения полей в таких командах CREATE TABLE AS SELECT, могут быть опущены, однако, если эти определения присутствуют, они должны соответствовать структуре фактической выборки SELECT-запроса. Ограничения на данные исходных таблиц в новую таблицу не переносятся.

Ниже приведен пример создания таблицы при помощи запроса:

CREATE TABLE "Все заказы(таб)" AS

SELECT "Имя", "Фамилия", "Клиент",

"Дата регистр", "Название", "Количество", "Мера изм", "Дата выполн"

FROM "Клиент", "Товар", "Заказ", "СоставЗак"

WHERE "Клиент"."Код Клиента" = "Заказ"."Клиент"

AND "Заказ"."Код заказа"="СоставЗак"."Код заказа"

AND "Товар"."Код товара"="СоставЗак"."Код товара"

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

Можно так же создавать временные таблицы (CREATE TEMPORARY TABLE), которые, как следует из названия, не хранятся в базе данных постоянно, а существует ограниченное время. Структура и данные временных таблиц так же формируются как значение запроса, извлекающего данные из других таблиц. Ниже приведен пример создания временной таблицы:

CREATE GLOBAL TEMPORARY TABLE "Все заказы(вр)"

ON COMMIT PRESERVE ROWS

AS SELECT "Имя", "Фамилия", "Клиент",

"Дата регистр", "Название", "Количество", "Мера изм", "Дата выполн"

FROM "Клиент", "Товар", "Заказ", "СоставЗак"

WHERE "Клиент"."Код Клиента"="Заказ"."Клиент"

AND "Заказ"."Код заказа"="СоставЗак"."Код заказа"

AND "Товар"."Код товара"="СоставЗак"."Код товара"

Эта таблица по структуре и данным совершенно аналогично рассмотренной выше «постоянной» таблице "Все заказы(таб)", однако эта таблица будет существовать до окончания текущей сессии. Дальнейшие подробности работы с временными таблицами можно найти в системной документации.

2.6. Изменение определения таблицы

Для изменения определения таблицы предназначена команда ALTER TABLE. С ее помощью можно выполнить следующие основные действия:

  • изменение имени таблицы;

  • изменение имени существующего поля;

  • добавление нового поля;

  • удаление существующего поля;

  • изменение типа существующего поля;

  • изменение выражение для виртуального поля;

  • создание нового ограничения;

  • удаление существующего ограничения;

  • изменение имени существующего ограничения;

  • отключение и включение действия ограничений;

  • изменение физических параметров размещения таблицы и т.д.

Работа с командой ALTER TABLE обладает рядом особенностей. Прежде всего, следует иметь в виду, что эти команды могут исполняться после того как таблицы создана и заполнена данными (собственно, для этой цели эта команда и предназначена). Поэтому изменение структуры существующей таблицы влияет на данные в строках. Попытки выполнения команд ALTER TABLE могут привести, прежде всего, к полной или частичной потере существующих данных, а с другой стороны – к невозможности выполнить эти изменения по различным причинам ввиду наличия данных.

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

Create table "Клиент(кп)" as Select * from "Клиент"

  1. Переименование таблицы

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