Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
материалы к БД по дисциплине.docx
Скачиваний:
19
Добавлен:
21.04.2019
Размер:
1.3 Mб
Скачать

Операторы определения и манипулирования данными.

Существенными свойствами языка запросов SQL являются возможность простого формулирования запросов с соединениями нескольких отношений и использование вложенных подзапросов в предикатах выборки. Вообще говоря, одновременное наличие обоих средств избыточно, но это дает пользователю при формулировании запроса возможность выбора более понятного ему варианта.

Существенной особенностью SQL является возможность указания в запросе потребности группирования отношения-результата по указанным полям с поддержкой условий выборки на всю группу целиком. Такие условия выборки могут содержать агрегатные функции, вычисляемые на группе. Эта возможность SQL главным образом отличает этот язык от языков реляционной алгебры и реляционного исчисления, не содержащих аналогичных средств.

Еще одним отличием SQL является необязательное удаление кортежей-дубликатов в окончательном или промежуточных отношениях-результатах. Строго говоря, результатом оператора выборки в языке SQL является не отношение, а мультимножество кортежей. В тех случаях, когда семантика запроса требует наличия отношения, уничтожение дубликатов производится неявно.

Операторы определения данных. Определение таблицы.

CREATE TABLE <table name> (<table element>)

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

Для определения столбцов таблицы и ограничений целостности используются специальные операторы, которые должны быть вложены в оператор определения таблицы.

Определение столбца

Оператор определения столбца описывается следующими синтаксическими правилами:

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

В разделе значения по умолчанию указывается значение, которое должно быть помещено с строку, заносимую в данную таблицу, если значение данного столбца явно не указано. Значение по умолчанию может быть указано в виде литеральной константы с типом, соответствующим типу столбца; путем задания ключевого слова USER, которому при выполнении оператора занесения строки соответствует символьная строка, содержащая имя текущего пользователя (в этом случае столбец должен иметь тип символьных строк); или путем задания ключевого слова NULL, означающего, что значением по умолчанию является неопределенное значение. Если значение столбца по умолчанию не специфицировано, и в разделе ограничений целостности столбца указано NOT NULL, то попытка занести в таблицу строку с не специфицированным значением данного столбца приведет к ошибке.

Если в разделе ограничений целостности указано ограничение по ссылкам данного столбца (<reference specification>), то порождается соответствующее определение ограничения по ссылкам для таблицы:

FOREIGN KEY(C) <reference specification>.

Наконец, если указано проверочное ограничение столбца, то условие поиска этого ограничения должно ссылаться только на данный столбец, и неявно порождается соответствующее проверочное ограничение для всей таблицы.

Пример использования оператора CREATE TABLE для определение таблиц базы данных на языке SQL.

CREATE TABLE S

(S CHAR (6) NOT NULL,

SNAME CHAR (9) NOT NULL,

STATUS INT,

CITY CHAR (8) NOT NULL

PRIMARY KEY (S));

CREATE TABLE SP

(S CHAR (6) NOT NULL,

P CHAR (6) NOT NULL,

QTY INT,

PRIMARY KEY (S,P),

FOREIGN KEY (S) REFERENCES S /*Определение внешнего ключа*/

ON DELETE CASCADE /*Каскадное удаление*/

ON UPDATE CASCADE,

FOREIGN KEY (P) REFERENCES P

ON DELETE CASCADE

ON UPDATE CASCADE,

CHECK (QTY > 0 AND QTY < 500)); /*Проверочное условие*/