Запросы на изменение данных

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

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

Существует четыре разновидности запросов на изменение:

- запросы на удаление;

- запросы на обновление;

- запросы на добавление;

- запросы на создание таблицы.

При исполнении запроса на удаление за одну операцию осуществляется удаление группы записей из одной или нескольких таблиц. Запросы на удаление реализуются SQL-инструкцией DELETE. К примеру, из таблицы «Клиенты» с помощью запроса на удаление можно за одну операцию удалить всех клиентов, проживающих в районе «Марьина Роща». SQL-инструкция такого запроса может выглядеть следующим образом:

DELETE Kлиенты.*, Клиенты.Район

FRОМ Клиенты

WHERE ((Клиенты.Район) = «Марьина Роща»));

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

Запрос на обновление за одну операцию вносит общие изменения в группу записей одной или нескольких таблиц. Реализуются SQL-инструкцией UPDAТЕ. Запросы на обновления применяются тогда, когда необходимо осуществить глобальные однотипные изменения в каком-либо наборе данных.

В качестве другого примера приведем ситуацию, когда всех работников-совместителей учебного учреждения необходимо перевести в категорию почасовиков:

UPDAТЕ Сотрудники

SET Сотрудники.Стату с= «Почасовик»

WHERE ((Coтpyдники.Cтaтyc) = «Coвмecтитeль»);

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

Запросы на добавление реализуются SQL-инструкцией INSERT INTO, например:

INSERТ INTO НаучныеРаботники

SELECTCтуденты.*

FRОМ Студенты

WHERE ((Студенты.Группа)=«И-405»);

Запросы на создание таблицы за одну операцию создают новую таблицу с заполненными данными на основе всех или части данных из одной или нескольких таблиц. Реализуются SQL-инструкцией SELECT...INTO. Для примера приведем задачу создания специального набора (отчета) данных за месяц, скажем за январь, из таблицы «Заказы» в виде отдельной таблицы (для отдельного хранения или обработки). Вариант соответствующей SQL-инструкции может выглядеть следующим образом:

SELECT Заказы *

INTO Заказы Января

FROM Заказы

WHERE((Заказы.Дата)=BETWEEN#1/01/98#AND#1/02/98#;

Управляющие запросы

В составе языка описания данных DDL имеются ряд SQL-инструкций, на основе которых строятся запросы по созданию/модификации реляционных таблиц или отдельных их элементов. Такие запросы называются управляющими.

Имеется четыре вида управляющих запросов:

- запросы на создание таблицы;

- запросы на добавление в существующую таблицу нового поля или индекса;

- запросы на удаление таблицы или индекса определенного поля таблицы;

- запросы на создание индекса для поля или группы полей таблицы.

Запросы на создание таблицы реализуются SQL-инструкцией CREAТЕ TABLE с ключевыми словами, определяющими типы полей (CHARACTER, INTEGER, DATETIME и т.д.), предложением CONSTRAINT для создания ограничений на значения полей или связей между таблицами, ключевым словом UNIQUE, задающим свойство уникальности (требование на отсутствие совпадений) индекса таблицы, а также ключевого слова PRIMARYKEY, определяющего ключевое поле создаваемой таблицы.

В качестве примера приведем запрос на создание таблицы «Сотрудники» с полями «Фамилия», «Имя», «ДатаРождения», уникальным составным индексом «ИндексСотрудники» для полей «Фамилия», «Имя», «ДатаРождения», с тем же набором полей для составного ключа «КлючСотрудники».*

* В стандартах SQL и в большинстве диалектов SQL символы кириллицы в названиях полей не допускаются.

CREAТЕ TABLE Cотрудники

(Фамилия TEXT, Имя TEXT, ДатаРождения DATETIME,

CONSTRAINT ИндексCотрудники UNIQUE (Имя, Фамилия, ДатаРождения) КлючСотрудники PRIMARY KEY);

Запросы на добавление полей или индексов реализуются SQL-инструкцией ALTER TABLE с использованием зарезервированных слов ADD COLUMN (добавить поле) и ADD CONSTRAINT(добавить индекс). Этим же запросом с помощью зарезервированного слова DROP COLUMN можно удалить поле из существующей таблицы. Как правило, запросы на добавление полей также используются для создания внешних ключей, задающих связи-отношения между таблицами. С этой целью используются зарезервированные слова FOREIGN KEY и REFERENCES.

Для примера приведем запросы по добавлению в таблицу «Сотрудники» нового поля «Оклад», добавлению нового индекса «ОкладСотрудники», удалению поля «Оклад», добавлению внешнего ключа «№_Отдела» и удалению внешнего ключа:

ALTER TABLE Сотрудники ADD COLUMN Оклад CURRENCY;

ALTER TABLE Coтрудники АDD CONSTRAINT OкладCoтрудники Оклад;

ALTER TABLE Сотрудники DROPCOLUMNOклад;

ALTER TABLE Сотрудники ADD CONSTRAINT Работа FOREIGN KEY(№_Отдела)

REFERENCES Подразделения (№_Отдела);

ALTER TABLE Сотрудники DROP CONSTRAINTРабота;

Запросы на удаление таблицы или индекса реализуются SQL-инструкцией DROP TABLE с указанием имени удаляемой таблицы или индекса. Следующий пример иллюстрирует удаление из базы данных таблицы «Сотрудники» и удаление индекса «ОкладСотрудники»:

DROPTABLE Сотрудники;

DROPINDEX ОкладСотрудники ON Сотрудники;

Запросы на создание индекса реализуются SQL-инструкцией CREAТЕINDEX с использованием зарезервированного слова UNIQUE для запрета повтора значений в индексируемом поле и необязательного предложения WITH с параметрами DISALLOW NULL и IGNORE NULL для запрета/разрешения нулевых (пустых) значений в индексируемом поле. Зарезервированное слово PRIMARY позволяет определить создаваемый индекс ключом таблицы (при этом создаваемый индекс по умолчанию является уникальным, т.е. повторы значений не допускаются).

В следующем примере в таблице «Сотрудники» создастся уникальный индекс «ИндексСотрудника» по полю «Таб_№» с запретом пустых значений:

CREAТЕ UNIQUE INDEX ИндексСотрудника

ON Сотрудники (Таб_№)

WITH DISALLOW NULL;

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

Типы таблиц, с которыми вы имели дело до сих пор, назывались - базовыми таблицами. Это - таблицы, которые содержат данные. Однако имеется другой вид таблиц: - представления. Представления - это таблицы чье содержание выбирается или получается из других таблиц. Они работают в запросах и операторах DML точно также как и основные таблицы, но не содержат никаких собственных данных. Представления - подобны окнам, через которые вы просматриваете информацию( как она есть, или в другой форме, как вы потом увидите), которая фактически хранится в базовой таблице. Представление - это фактически запрос, который выполняется всякий раз, когда представление становится темой команды. Вывод запроса при этом в каждый момент становится содержанием представления.

Вы создаете представление командой CREATE VIEW. Она состоит из слов CREATE VIEW (СОЗДАТЬ ПРЕДСТАВЛЕНИЕ), имени представления которое нужно создать, слова AS (КАК), и далее запроса, как в следующем примере:

CREATE VIEW Londonstaff

AS SELECT *

FROM Salespeople

WHERE city = 'London';

Синтаксис удаления представления из базы данных подобен синтаксису удаления базовых таблиц:

DROP VIEW < view name >