Пусть филиал университета в Нью-Васюках ликвидирован, и требуется удалить из таблицы STUDENT записи о студентах, которые там учились. Эту операцию можно выполнить с помощью запроса
DELETE
FROM STUDENT
WHERE UNIV_ID IN
(SELECT UNIV_ID
FROM UNIVERSITY
WHERE CITY = ‘Нью-Васюки ’);
В предикате предложения FROM (подзапроса) нельзя ссылаться на таблицу, из которой осуществляется удаление. Однако можно ссылаться на текущую строку из таблицы, являющуюся кандидатом на удаление, то есть на строку, которая в настоящее время проверяется в основном предикате.
DELETE
FROM STUDENT
WHERE EXISTS
(SELECT *
FROM UNIVERSITY
WHERE RATING = 401 AND STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID);
Часть AND предиката внутреннего запроса ссылается на таблицу STUDENT. Команда удаляет данные о студентах, которые учатся в университетах с рейтингом равным 401. Существуют и другие способы решения этой задачи.
DELETE
FROM STUDENT
WHERE 401 IN
(SELECT RATING
FROM UNIVERSITY
WHERE STUDENT.UNIV_ID = UNIVERSITY.UNIV_ID);
Пусть нужно найти наименьшее значение оценки, полученной в каждый день сдачи экзаменов, и удалить из таблицы сведения о студенте, который получил эту оценку. Запрос будет иметь вид
DELETE
FROM STUDENT
WHERE STUDENT_ID IN
(SELECT STUDENT_ID
FROM EXAM_MARKS A
WHERE MARK=
(SELECT MIN(MARK)
FROM EXAM_MARKS B
WHERE A.EXAM_DATE = B.EXAM_DATE));
Так как столбец STUDENT_ID является первичным ключом, то удаляется единственная строка.
Если в какой-то день сдавался только один экзамен (то есть, получена только одна минимальная оценка), и по какой-либо причине запись, в которой находится эта оценка, требуется оставить, то решение будет иметь вид: