Одной командой INSERT можно добавить в таблицу и несколько строк. Перечень добавляемых строк в этом случае задается конструкцией SELECT.
В качестве примера рассмотрим добавление в таблицу EQUIPAGE нескольких строк – назначим на рейс авиалинии (AIRLINE) № 901 от '16.02.2008' тех же самых бортпроводников, которые были назначены '14.02.2008'. Для этого нам потребуется при помощи запроса получить коды бортпроводников входивших в экипаж выполнявший 14 февраля 2008г. рейс на линии № 901.
Получаем следующий запрос на вставку строк: [55]
INSERT INTO EQUIPAGE
(EQ_PR_CODE,EQ_FL_DATE,EQ_RNK_CODE,EQ_FL_NUM)
SELECT EQ_PR_CODE,'16.02.2008',EQ_RNK_CODE,'901'
FROM EQUIPAGEEQINNER JOINRANKR
ON R.RNK_CODE=EQ.EQ_RNK_CODE
WHERE R.RNK_NAME='Бортпроводник'
AND EQ.EQ_FL_NUM='901'ANDEQ.EQ_FL_DATE='14.02.2008'
В результате выполнения внутреннего SELECT находим коды личностей членов экипажа (EQ_PR_CODE) и код (EQ_RNK_CODE) соответствующий коду бортпроводника, поля «Дата вылета» (EQ_FL_DATE) и «Номер маршрута» (EQ_FL_NUM) будут заданы как константы. Таким образом, команда INSERT вставит в таблицу EQUIPAGE столько строк, сколько возвращает внутренний запрос.
Если студент был внимателен, он должен был заметить что в списке столбцов добавляемых в таблицу EQUIPAGE отсутствует первичный ключ – код члена экипажа (EQ_ CODE). В самом деле, мы не можем вставлять его для набора строк, так как для каждой строки он должен быть уникален. Мы можем выполнить приведенный запрос благодаря использованию триггеров, о чем будет рассказано в дальнейшем.