Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции2011.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.86 Mб
Скачать

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

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

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

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

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

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

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

DELETE FROM <имя таблицы> [WHERE <предикат>].

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

DELETE FROM SALESREPS WHERE NAME = Henry Jacobsen'

В приведенном выше примере в предложении where определена одна строка таблицы salesrees, которая будет удалена из этой таблицы.

Хотя предложение where в операторе delete является необязательным, оно присутствует почти всегда. Если же оно отсутствует, то удаляются все строки целевой таблицы. Например:

DELETE FROM ORDERS

Хотя в результате выполнения приведенного оператора delete таблица orders становится пустой, из базы данных она не удаляется. Определение таблицы orders и ее столбцов остается в базе данных. Таблица по-прежнему существует, и в нее по-прежнему можно добавлять новые строки с помощью оператора insert. Чтобы удалить из базы данных определение таблицы, необходимо использовать оператор drop table.

Оператор delete с вложенным запросом

Операторы delete с простыми условиями поиска, рассмотренные в предыдущих примерах, отбирают строки для удаления исключительно на основании содержимого этих строк. Но иногда отбор строк необходимо производить, опираясь на данные из других таблиц. Однако в операторе delete запрещено использовать объединение таблиц. Оператор delete с параллельным удалением из двух таблиц является неправильным.

Вложенные запросы в предложении where могут иметь несколько уровней вложенности. Они могут также содержать внешние ссылки на целевую таблицу оператора DELETE. В этом случае предложение FROM оператора delete играет такую же роль, как и предложение from оператора select. Вот пример запроса на удаление, в котором требуется использовать вложенный запрос, содержащий внешнюю ссылку:

Удалить все данные о клиентах, которые не делали заказов с 10 ноября 1989 года.

DELETE FROM CUSTOMERS WHERE NOT EXISTS (SELECT *FROM ORDERS WHERE COST = CUST_NUM AMD ORDER_DATE > '10-NOV-89')

Приведенный выше оператор DELETE выполняется таким образом: каждая строка таблицы custoMers по очереди проверяется на соответствие условию поиска. Для каждого клиента вложенный запрос отбирает все заказы, размещенные этим клиентом после указанной даты. Ссылка на столбец cust_num во вложенном запросе является внешней ссылкой на идентификатор клиента той строки таблицы customers, которая проверяется оператором delete в настоящий момент. Вложенный запрос в данном примере является связанным вложенным запросом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]