Иллюстрированный самоучитель по SQL для начинающих

Манипуляции данными из базы

Теперь таблица CUSTOMER выглядит так, как показано в табл. 6.3.

Таблица 6.3. Таблица CUSTOMER после обновления нескольких строк оператором update.

Name City Area-Code Telephone
Abe Abelson Kankakee (714) 666-6666
Bill Bailey Decatur (714) 555-2222
Chuck Wood Philo (619) 555-3333
Don Stetson Philo (619) 555-4444
Dolph Stetson Philo (619) 555-5555

Обновить в таблице все строки даже легче, чем только некоторые из них. Ведь в таком случае не надо использовать ограничивающее предложение WHERE. Представьте, что город Рантул значительно увеличился в размерах и в его состав вошли не только Канкаки, Декейтер и Файло, но и все остальные города и городки, упомянутые в базе данных. Тогда все строки можно сразу изменить с помощью одного оператора:

UPDATE CUSTOMER
SET City = 'Rantoul';

Результат показан в табл. 6.4.

Таблица 6.4. Таблица CUSTOMER после обновления всех строк оператором update.

Name City Area-Code Telephone
Abe Abelson Rantoul (714) 666-6666
Bill Bailey Rantoul (714) 555-2222
Chuck Wood Rantoul (619) 555-3333
Don Stetson Rantoul (619) 555-4444
Dolph Stetson Rantoul (619) 555-5555

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

Предположим, что вы оптовый продавец и в вашей базе данных находится таблица VENDOR (поставщик) с названиями всех фирм-производителей, у которых вы покупаете товары. У вас также есть таблица PRODUCT (товар) с названиями всех продаваемых вами товаров и ценами, которые вы за них назначаете. В таблице VENDOR имеются столбцы VendorlD (идентификатор поставщика), VendorName (название поставщика), Street (улица), City (город), State (штаг) и Zip (почтовый код). А в таблице PRODUCT имеются столбцы ProductID (идентификатор товара), ProductName (название товара), VendorlD (идентификатор поставщика) и SalePrice (цена при продаже).

Предположим, поставщик Cumulonimbus Corporation принял решение поднять цены на все виды товаров на 10%. И для того чтобы поддержать планку своей прибыли, вам также придется поднять на 10% цены продажи продуктов, получаемых от этого поставщика. Это можно сделать с помощью следующего оператора UPDATE:

UPDATE PRODUCT
SET SalePrice = (SalePrice * 1.1)
WHERE VendorlD IN
(SELECT VendorlD FROM VENDOR
WHERE VendorName = 'Cumulonimbus Corporation');

Подстрока находит то значение из столбца VendorlD, которое соответствует Cumulonimbus Corporation. Затем полученное значение можно использовать для поиска в таблице PRODUCT тех строк, которые следует обновить. Цены всех товаров, полученных от Cumulonimbus Corporation, повышаются на 10%, а цены остальных остаются прежними. О подвыборках более подробно рассказывается в главе 11.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.