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

Использование подзапросов при вставке данных

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

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

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

Таблица Object содержит данные об объектах. В этой таблице нам понадобятся значения столбца Type, содержащего данные о типе объекта - квартира или дом (flat, house).

Допустим, в базе данных уже создана таблица Object_House, в которую нужно поместить данные обо всех объектах типа "Дом", то есть соответствующих условию type = 'house'. Если в обеих таблицах (Object и Object_House) присутствуют одни и те же столбцы и порядок их следования также одинаков, то можем написать следующий запрос.

INSERT INTO Object_House SELECT * FROM Object WHERE type = 'house'

Таким образом, при использовании оператора "звёздочка" в подзапросе из таблицы Object излекаются значения всех столбцов, а, поскольку в основном запросе (на вставку данных) никакие столбцы не указываются, то данные вставляются в таблицу Object_House в том же порядке, в каком они следуют в таблице Object.

А если порядок следования столбцов в таблицах различается? Тогда задачу можно решить двумя способами. Первый: указать в основном запросе (на вставку данных) столбцы в том порядке, в каком они следуют таблице Object_House. Запрос будет следующим.

INSERT INTO Object_House (Obj_ID, Type, District, Rooms, Space_Total, Space_Living, Space_Kitchen, Project, Material, LogBalc, Owner_ID) SELECT * FROM Object WHERE type = 'house'

Равноценным по результату будет запрос, в котором нужный порядок следования столбцов будет указан в подзапросе:

INSERT INTO Object_House SELECT Obj_ID, Type, District, Rooms, Space_Total, Space_Living, Space_Kitchen, Project, Material, LogBalc, Owner_ID FROM Object WHERE type = 'house'

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

INSERT INTO Object_House (Obj_ID, District, Rooms, Space_Total, Material, Owner_ID) SELECT Obj_ID, District, Rooms, Space_Total, Material, Owner_ID FROM Object WHERE type = 'house'

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

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