Собственно вся команда удаляет информацию, аналогично предыдущему примеру. Обратите внимание на то, что часть предиката внутреннего запроса ссылается к таблице STUDENTS. Это означает, что весь подзапрос будет выполняться отдельно для каждой строки данной таблицы.
В целом структура командыDELETEдостаточно проста для внимания, поэтому более подробно на ней останавливаться не будем.
9.3. Изменение существующих данных.Команда UPDATEсодержит предложениеSET,которое определяет вносимые изменения для требуемого поля таблицы.
Синтаксис команды UPDATE:
UPDATE <имя таблицы>
SET<имя поля> = <значение>;
С UPDATEможно использовать предикаты для выбора определенных строк таблицы.
Пример 1. Изменить оценки на пять по предмету с кодом 2003.
UPDATEUSP
SETOCENKA = 5
WHEREPNUM = 2003;
Предложения SET можно назначить для любого числа столбцов.
Пример 2. Заменить преподавателя Викулина на Федченко.
В предложении SET можно использовать выражения, располагая их в списке для того поля, которое необходимо изменить.
Пример 3. Увеличить стипендию в 2 раза.
UPDATESTUDENTS
SETSTIP = STIP*2;
Можно использовать сложные предикаты выбора записи.
Пример 4. Удвоить только стипендию размером 25.50.
UPDATESTUDENTS
SETSTIP = STIP*2
WHERESTIP = 25.50;
Команду UPDATEможетработать с NULL значениями. Т.к. предложениеSETне является предикатом, то можно вводитьNULLзначения так же, как вводятся обыкновенные данные.
Пример 5. Изменить все оценки студентов по учебному процессу с кодом 2003 на NULL.
UPDATE USP
SET OCENKA = NULL
WHERE PNUM = 2003;
Мощным средством модификации данных является использование подзапросов в команде модификацииUPDATE.Нельзя в предложении FROM любого подзапроса модифицировать таблицу, к которым ссылается основная команда.
Запрещены ссылки во вложенных запросах к таблице, которая модифицируется командойUPDATE. Внутри необязательного предиката этой командой можно использовать соотнесенные подзапросы, аналогично тому, как делает это DELETE.
Пример 6. Увеличить размер стипендии в 2 раза студентам, у которых имеются оценки, по крайней мере, по двум учебным предметам.
UPDATESTUDENTS
SETSTIP = STIP*2
WHERE 2<=
(SELECT COUNT(SNUM)
FROMUSP
WHERE STUDENTS.SNUM = USP SNUM);
Пример 7. модифицировать размер стипендии для студентов, имеющих минимальный бал в тот или иной день при помощи соотнесенного подзапроса.
UPDATESTUDENTS
SETSTIP = STIP-1
WHERE SNUM IN
(SELECT SNUM
FROMUSP FIRST
WHERE OCENKA =
(SELECTMIN (OCENKA)
FROMUSP SECOND
WHERE SNUM.UDATE = SECOND.UDATE));
Пример 8. Уменьшить оценку студентов на единицу, у которых оценки ниже средней.