ОПЕРАТОР DELETE

Удаление существующих данных

Удаление существующей строки из реляционной базы данных происходит тогда, когда объект, представляемый этой строкой, исчезает из "внешнего мира". На примере учебной базы данных это выглядит следующим образом:

• если клиент отменяет заказ, необходимо удалить соответствующую строку из таблицы ORDERS;

• если служащий увольняется из компании, должна быть удалена соответствующая строка из таблицы salesreps;

• если ликвидируется офис, необходимо удалить соответствующую строку из таблицы offices; в случае, когда служащие этого офиса увольняются, их строки в таблице salesreps также должны быть удалены; если служащие переводятся в другой офис, то соответствующие значения в столбце office необходимо обновить.

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

Оператор delete удаляет выбранные строки данных из одной таблицы. В предложении from указывается таблица, содержащая строки, которые требуется удалить. В предложении where указываются строки, которые должны быть

Предположим, что недавно принятый на работу Генри Якобсен решил уволиться из компании. Вот оператор delete, удаляющий относящуюся к служащему строку из таблицы sale sre ps :

В приведенном выше примере в предложении where определена одна строка таблицы salesreps, которая будет удалена из этой таблицы. Предложение where имеет знакомый вид — действительно, это то же самое предложение where, которое необходимо включить в оператор select для чтения из таблицы этой же строки. Условия поиска, которые можно задать в предложении where оператора delete, полностью совпадают с условиями поиска, доступными в предложении where оператора select.

Вспомним, что в предложении where оператора select условия поиска могут определять как одну строку, так и набор строк — в зависимости от конкретного условия. То же самое справедливо и для предложения where оператора delete. Предположим, например, что клиент служащего Якобсена, компания InterCorp (идентификатор клиента 2126), отменила все свои заказы. Вот оператор delete, удаляющий заказы из таблицы orders:

В данном примере предложение where выбирает несколько строк таблицы orders, которые затем удаляются из нее. Все строки таблицы orders последовательно проверяются на соответствие условию поиска. Строки, в которых условие поиска имеет значение true, удаляются, а строки, в которых условие поиска имеет значения false или null, сохраняются. Поскольку этот тип оператора delete осуществляет в таблице поиск удаляемых строк, его иногда называют поисковым, в отличие от другого типа оператора delete, всегда удаляющего одну строку и называемого позиционным. Позиционный оператор delete применяется только в программном SQL.