Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЛЕЩ.docx
Скачиваний:
47
Добавлен:
13.05.2015
Размер:
3.97 Mб
Скачать

1.8.4. Операторы обновления базы

1.8.4.1. Оператор корректировки данныхUpdate

Оператор UPDATE имеет следующий общий формат:

UPDATE таблица SET поле = выражение [, поле = выражение]…

[WHERE условие];

Все записи в таблице, которые удовлетворяют условию, обновляются в соответствии с присваиваниями «поле = выражение» во фразе SET.

Пример изменения одной записи. Изменить цвет детали Р2 на желтый, увеличить ее вес на 5 и установить значение города «неизвестен» (NULL).

UPDATE P SET ЦВЕТ = 'Желтый', ВЕС = ВЕС + 5, ГОРОД = NULL WHERE НОМЕР_ДЕТАЛИ = 'Р2';

Пример изменения группы записей. Удвоить состояние всех поставщиков, находящихся в Лондоне.UPDATE S SET СОСТОЯНИЕ = 2*СОСТОЯНИЕ WHERE ГОРОД = 'Лондон';

Пример изменения с подзапросом. Установить объем поставок равным нулю для всех поставщиков из Лондона.

UPDATE SP SET КОЛИЧЕСТВО = 0 WHERE 'Лондон' = (SELECT ГОРОД FROM S WHERE S.НОМЕР_ПОСТАВЩИКА = SP.НОМЕР_ПОСТАВЩИКА); Примеробновления нескольких таблиц. Изменить номер поставщика S2 на S9.

UPDATE S SET НОМЕР_ПОСТАВЩИКА = 'S9'

WHERE НОМЕР_ПОСТАВЩИКА = 'S2';

UPDATE SP SET НОМЕР_ПОСТАВЩИКА = 'S9'

WHERE НОМЕР_ПОСТАВЩИКА = 'S2';

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

1.8.4.2. Оператор удаления записейDelete

Оператор DELETE имеет следующий общий формат:

DELETE FROM таблица [WHERE условие];

Удаляются все записи в «таблице», которые удовлетворяют условию. Примерудаления единственной записи. Удалить поставщика S1.DELETE FROM S WHERE НОМЕР_ПОСТАВЩИКА= 'S1’.

Примерудаления группы записи. Удалить всех поставщиков из Лондона.DELETE FROM S WHERE ГОРОД = 'Лондон';

Примерудаления всех записей. Удалить все поставки.

DELETE FROM SP;

Примерудаления с подзапросом. Удалить все поставки для поставщиков из Лондона.

DELETE FROM SP WHERE 'Лондон' = (SELECT ГОРОД FROM S WHERE S. НОМЕР_ПОСТАВЩИКА =SP.НОМЕР_ПОСТАВЩИКА);

1.8.4.3. Оператор включения записей insert

Оператор INSERT имеет следующий общий формат:

INSERT INTO таблица [(поле [,поле]…)] VALUES (константа [,константа…); ИЛИ: INSERT INTO таблица [(поле [,поле] . . .)] подзапрос;

В первом формате в «таблицу» вставляется строка, имеющая заданные значения для указанных полей, причем 1-я константа в списке констант соответствует i-му полю в списке полей.

Во втором формате вычисляется «подзапрос»; копия результата, представляющего собой, вообще говоря, множество строк, вставляется в «таблицу». При этом i-й столбец этого результата соответствуетi-му полю в списке полей. В обоих случаях отсутствие списка полей эквивалентно спецификации списка всех полей в таблице.

Пример вставки единственной записи. Добавить в таблицу Р деталь Р7 (город 'Атенс', вес – 2, название и цвет в настоящее время неизвестны).

INSERT INTO Р (НОМЕР_ДЕТАЛИ, ГОРОД, BEC) VALUES ('Р7', 'Атенс', 2);

Порядок слева – направо, в котором поля указаны в предложении INSERT, не обязательно должен совпадать с порядком слева – направо, в записи таблицы.

Пример вставки единственной записи без указания имен полей. Добавить деталь Р8 в таблицу Р, при этом: название - 'Звездочка', цвет - 'Розовый', вес – 14, город – 'Ницца'.

INSERT INTO P VALUES ('Р8', 'Звездочка', 'Розовый', 14, 'Ницца');

Отсутствие списка полей эквивалентно спецификации списка всех полей в таблице в порядке слева – направо, как они были определены в записи таблицы.

Пример вставки группы записи. Для каждой поставляемой детали получить ее номер и общий объем поставок, сохранить результат в базе данных.CREATE TABLE ВРЕМЕННАЯ (НОМЕР_ДЕТАЛИ CHAR (6), ОБЪЕМ_ПОСТАВКИ INTEGER); INSERT INTO ВРЕМЕННАЯ (НОМЕР_ДЕТАЛИ, ОБЪЕМ_ПОСТАВКИ) SELECT НОМЕР_ДЕТАЛИ, SUM (КОЛИЧЕСТВО) FROM SP GROUP BY НОМЕР_ДЕТАЛИ;

Здесь предложение SELECT выполняется точно так же, как обычно, но результат не возвращается пользователю, а копируется в таблицу ВРЕМЕННАЯ. В конечном счете таблицу ВРЕМЕННАЯ можно будет уничтожить, когда она больше не будет нужна:

DROP TABLE ВРЕМЕННАЯ;

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