Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Подготовка к ПР_2.4.rtf
Скачиваний:
4
Добавлен:
01.05.2025
Размер:
7.36 Mб
Скачать

1.3. Изменение данных

Для изменения значений столбцов таблицы применяется опера­тор UPDATE (изменить, обновить). Чтобы изменить значения в одном столбце таблицы в тех записях, которые удовлетворяют некоторому условию, следует выполнить такой запрос:

UPDATE имяТаблицы SET имяСтолбца = значение WHERE условие;

За ключевым словом SET (установить) следует выражение равен­ства, в левой части которого указывается имя столбца, а в пра­вой - выражение, значение которого следует сделать значением данного столбца. Эти установки будут выполнены в тех записях, которые удовлетворяют условию в операторе WHERE. Чтобы одним оператором UPDATE установить новые значения сра­зу для нескольких столбцов, вслед за ключевым словом SET запи­сываются соответствующие выражения равенства, разделенные запятыми:

UPDATE имяТаблицы

SET имяСтолбца1 = значение1,

имяСтолбца2 = значение2,

... ,

имяСтолбцаN = значениеN

WHERE условие;

Например, следующий запрос изменяет значения столбцов Телефон и Сумма_заказа в таблице Клиенты для тех записей, в которых столбец Имя имеет значение 'Иванов':

UPDATE Клиенты

SET Телефон = '333-1234', Сумма_заказа = 2570

WHERE Имя = 'Иванов';

Использование оператора WHERE в операторе UPDATE не обяза­тельно. Если он отсутствует, то указанные в SET изменения будут произведены для всех записей таблицы.

Операция изменения записей, как и их удаление, связана с рис­ком необратимых потерь данных в случае семантических ошибок при формулировке SQL-выражения. Например, стоит только за­быть написать оператор WHERE, и будут обновлены значения во всех записях таблицы. Чтобы избежать подобных неприятностей, перед обновлением записей рекомендуется выполнить соответст­вующий запрос на выборку, чтобы просмотреть, какие записи будут изменены. Например, перед выполнением приведенного ранее запроса на обновление данных не помешает выполнить со­ответствующий запрос на выборку данных:

SELECT * FROM Клиенты WHERE Имя = 'Иванов';

Таблица может иметь ограничения (см.пункт 2.1). Если устанав­ливаемые значения столбцов не удовлетворяют условиям этих ограничений, то запрос на обновление данных выполнен не будет.

Условие в операторе WHERE может содержать подзапросы, в том числе и связанные. Пусть в базе данных имеется таблица Продажи (ID_товара, Сумма_заказа, ID_клиента), содержащая сведения о продажах товаров клиентам. Предположим, что требуется сде­лать 5% скидку тем клиентам, которые приобрели товары на сум­му, большую 1000. Для этого следует изменить значения столбца Сумма_заказа, просто умножить их на 0,95. Однако эти изменения должны быть выполнены, только если сумма значений этого поля для данного клиента превышает 1000. Таким образом, запрос на изменение данных должен содержать связанный подзапрос:

UPDATE Продажи Т1

SET Сумма_заказа = Сумма_заказа*0.95

WHERE 1000 <

(SELECT SUM(Т2.Сумма_заказа) FROM Продажи Т2

WHERE Т1.ID_клиента = Т2.ID_клиента);

Здесь запрос на изменение данных из таблицы продажи содержит связанный (коррелированный) подзапрос, вычисляющий сумму значений столбца Cумма_заказа. Обратите внимание на использо­вание двух различных псевдонимов для одной и той же таблицы. При выполнении данного запроса происходит последовательный просмотр записей в таблице продажи. Для каждой записи проверя­ется условие оператора WHERE, а именно выполняется подзапрос, вычисляющий сумму значений столбца Сумма_заказа для всех записей, в которых идентификатор клиента равен текущему значе­нию этого идентификатора. Если вычисленное значение превыша­ет 1000, то условие оператора WHERE выполняется и происходит изменение данных в соответствии с выражением SET, в противном случае изменения не вносятся. Далее происходит переход к следующей записи, рассматриваемой в качестве текущей, и описан­ные действия повторяются снова.

Нередко требуется обновить значения столбцов в зависимости от их текущих значений. В SQL:2003 для этого можно использовать оператор CASE, возвращающий значения.

При изменении значений в столбцах таблицы необходимо сле­дить, чтобы типы значений соответствовали типам столбцов. При необходимости можно воспользоваться функцией преобразова­ния типов CAST ().