Базы данных
и язык SQL

Удаление данных по более сложному условию

Связанные темы
Назад<<<СодержаниеВперёд>>>

Мы рассмотрели примеры, в которых признаки, по которым производится удаление данных, присутствуют в той же таблице, из которой данные предстоит удалять. Но на практике чаще эти признаки отнесены в другую таблицу, которая связана с "оперируемой" ключем. Тогда приходится в запросе на удаление данных использовать соединение таблиц. Именно такие запросы мы сейчас и рассмотрим.

Работаем с базой данных "Недвижимость". Скрипт для создания этой базы данных, её таблиц и заполения таблиц данными - в файле по этой ссылке.

Если вы хотите выполнить запросы к базе данных из этого урока на MS SQL Server, но эта СУБД не установлена на вашем компьютере, то ее можно установить, пользуясь инструкцией по этой ссылке.

Сначала добавим в базу данные, которые мы в примерах будем удалять.

INSERT INTO Owner (Owner_ID, FName, LName, BirthDate) VALUES (13, 'Полина', 'Королева', '1949-10-08');
INSERT INTO Client (Client_ID, FName, LName, BirthDate) VALUES (13, 'Сергей', 'Серов', '1978-03-05');
INSERT INTO Object (Obj_ID, Type, District, Rooms, Space_Total, Space_Living, Space_Kitchen, LogBalc, Owner_ID, Project, Material) VALUES (14, 'flat', 'Пашино', 2, 44, 28, 5, 0, 13, 'хрущевка', 'кирпич'), (15, 'flat', 'Центр', 3, 82, 52, 12, 1, 3, 'сталинка', 'кирпич');
INSERT INTO Deal (Deal_ID, Type, Object_ID, Client_ID, Cost, Manager_ID, Date) VALUES (13, 'sale', 15, 13, 78500, 1, '2019-08-18');

Пример 6. Требуется удалить из таблицы Object запись об объекте, собственником является лицо по фамилии Королева. Данные о собственниках объектов недвижимости хранятся в таблице Owner. Эти таблицы связаны ключом Owner_ID.

Пишем следующий запрос, в котором используется подзапрос (на MS SQL Server - с предваряющей конструкцией USE realestate;):

DELETE FROM Object WHERE Owner_ID IN (SELECT Owner_ID FROM Owner WHERE LName='Королева')

Пример 7. Условие то же, что и в предыдущем примере. Эту задачу можно выполнить другим способом - использованием соединения таблиц при помощи JOIN. Пишем следующий запрос (на MS SQL Server - с предваряющей конструкцией USE realestate;):

DELETE FROM Object Ob JOIN Owner Ow ON Ob.Owner_ID=Ow.Owner_ID WHERE Ow.LName='Королева'

Написать запрос самостоятельно, а затем посмотреть решение

Пример 8. Требуется удалить данные об объекте, клиентом по сделке с которым является лицо по фамилии Серов. Таблица Object не связана напрямую с таблицей Client. Связь осуществляется посредством таблицы Deal (сделка).

Правильное решение.

Поделиться с друзьями

Назад<<<СодержаниеВперёд>>>