(SELECT *
FROM USP
WHERE OCENKA = 3
AND STUDENTS.SNUM = USP.SNUM);
Собственно вся команда удаляет информацию, аналогично предыдущему примеру. Обратите внимание на то, что часть предиката внутреннего запроса ссылается к таблице STUDENTS. Это означает, что весь подзапрос будет выполняться отдельно для каждой строки данной таблицы.
В целом структура команды DELETE достаточно проста для внимания, поэтому более подробно на ней останавливаться не будем.
9.3. Изменение существующих данных. Команда UPDATE содержит предложение SET, которое определяет вносимые изменения для требуемого поля таблицы.
Синтаксис команды UPDATE:
UPDATE < имя таблицы>
SET< имя поля > = < значение >;
С UPDATE можно использовать предикаты для выбора определенных строк таблицы.
Пример 1. Изменить оценки на пять по предмету с кодом 2003.
UPDATE USP
SET OCENKA = 5
WHERE PNUM = 2003;
Предложения SET можно назначить для любого числа столбцов.
Пример 2. Заменить преподавателя Викулина на Федченко.
UPDATE TEACHERS
SET TFAM = “Федченко”, TNAME = “Светлана”, TOTCH = “Геннадиевна”, TDATE = 01/09/1999
WHERE TNUM = 4001;
В предложении SET можно использовать выражения, располагая их в списке для того поля, которое необходимо изменить.
Пример 3. Увеличить стипендию в 2 раза.
UPDATE STUDENTS
SET STIP = STIP*2;
Можно использовать сложные предикаты выбора записи.
Пример 4. Удвоить только стипендию размером 25.50.
UPDATE STUDENTS
SET STIP = STIP*2
WHERE STIP = 25.50;
Команду UPDATE можетработать с NULL значениями. Т.к. предложение SET не является предикатом, то можно вводить NULL значения так же, как вводятся обыкновенные данные.
Пример 5. Изменить все оценки студентов по учебному процессу с кодом 2003 на NULL.
UPDATE USP
SET OCENKA = NULL
WHERE PNUM = 2003;
Мощным средством модификации данных является использование подзапросов в команде модификации UPDATE. Нельзя в предложении FROM любого подзапроса модифицировать таблицу, к которым ссылается основная команда.
Запрещены ссылки во вложенных запросах к таблице, которая модифицируется командой UPDATE. Внутри необязательного предиката этой командой можно использовать соотнесенные подзапросы, аналогично тому, как делает это DELETE.
Пример 6. Увеличить размер стипендии в 2 раза студентам, у которых имеются оценки, по крайней мере, по двум учебным предметам.
UPDATE STUDENTS
SET STIP = STIP*2
WHERE 2<=
(SELECT COUNT (SNUM)
FROM USP
WHERE STUDENTS.SNUM = USP SNUM);
Пример 7. модифицировать размер стипендии для студентов, имеющих минимальный бал в тот или иной день при помощи соотнесенного подзапроса.
UPDATE STUDENTS
SET STIP = STIP-1
WHERE SNUM IN
(SELECT SNUM
FROM USP FIRST
WHERE OCENKA =
(SELECT MIN (OCENKA)
FROM USP SECOND
WHERE SNUM.UDATE = SECOND.UDATE));
Пример 8. Уменьшить оценку студентов на единицу, у которых оценки ниже средней.
Для этого сначала выполним поиск средней оценки.
SELECT AVG (OCENKA)
FROM USP;
Теперь используем запрос:
UPDATE USP
SET OCENKA = OCENKA – 1
WHERE ocenka <4.2;