Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие по SQL.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
960 Кб
Скачать

Добавление данных. Команда insert

Команда INSERT предназначена для добавления данных в базу. С ее помощью можно добавить в указанную таблицу или представление одну или сразу несколько строк.

Добавление отдельной строки

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

Рассмотрим добавление строки в таблицу CITY.liii

INSERT INTO CITY (CT_CODE, CT_NAME) VALUES (11, 'Челябинск');

В данном случае вводимые значения задавались как константы, но вместо них могут стоять и любые допустимые в SQL выражения, возвращающие единственное значение, в том числе и конструкции SELECT. Покажем как добавить новый аэропорт для города 'Челябинск', при этом код города получим как результат запроса: liv

INSERT INTO AIRPORT (AP_CODE, AP_NAME, AP_CT_CODE)

VALUES (17, икменево',

(SELECT CT_CODE FROM CITY WHERE CT_NAME = 'Челябинск'))

Добавление группы строк

Одной командой INSERT можно добавить в таблицу и несколько строк. Перечень добавляемых строк в этом случае задается конструкцией SELECT.

В качестве примера рассмотрим добавление в таблицу EQUIPAGE нескольких строк – назначим на рейс авиалинии (AIRLINE) № 901 от '16.02.2008' тех же самых бортпроводников, которые были назначены '14.02.2008'. Для этого нам потребуется при помощи запроса получить коды бортпроводников входивших в экипаж выполнявший 14 февраля 2008г. рейс на линии № 901.

Получаем следующий запрос на вставку строк: lv

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 EQUIPAGE EQ INNER JOIN RANK R

ON R.RNK_CODE = EQ.EQ_RNK_CODE

WHERE R.RNK_NAME = 'Бортпроводник'

AND EQ.EQ_FL_NUM = '901' AND EQ.EQ_FL_DATE = '14.02.2008'

В результате выполнения внутреннего SELECT находим коды личностей членов экипажа (EQ_PR_CODE) и код (EQ_RNK_CODE) соответствующий коду бортпроводника, поля «Дата вылета» (EQ_FL_DATE) и «Номер маршрута» (EQ_FL_NUM) будут заданы как константы. Таким образом, команда INSERT вставит в таблицу EQUIPAGE столько строк, сколько возвращает внутренний запрос.

Если студент был внимателен, он должен был заметить что в списке столбцов добавляемых в таблицу EQUIPAGE отсутствует первичный ключ – код члена экипажа (EQ_ CODE). В самом деле, мы не можем вставлять его для набора строк, так как для каждой строки он должен быть уникален. Мы можем выполнить приведенный запрос благодаря использованию триггеров, о чем будет рассказано в дальнейшем.

Обновление уже имеющихся данных. Команда update

Уже существующие в таблице данные можно изменить с помощью команды UPDATE. Команда UPDATE не добавляет новых записей в таблицу и не удаляет их, а только дает возможность изменить данные. С помощью одной такой команды можно изменить данные только одной таблицы, но одновременно можно менять данные нескольких столбцов. Одним таким оператором можно изменить и одну строку данных и целый набор строк.

Рассмотрим синтаксис подходящего оператора.

UPDATE имя_таблицы

SET столбец! = 'значение'

[, столбецЗ = 'значение']

[, столбецЗ = 'значение'] [WHERE условие];

Обратите внимание на использование ключевого слова SET' оно одно, а описаний столбцов — несколько. Описания столбцов разделяются запятыми. К этому моменту вы, должно быть, уже почувствовали логику SQL. В операторах SQL запятая обычно используется для разделения различного типа аргументов.

Изменим фамилию у одной из женщин из таблицы PERSON, запрос на изменение будет иметь вид: lvi

UPDATE PERSON SET PR_NAME = 'Смирнова'

WHERE PR_NAME ='Оборина'

AND PR_NAME2 = 'Юлия'

AND PR_NAME3 = 'Витальевна'

AND PR_BIRTHDAY = '02.10.1984'

При использовании оператора UPDATE без ключевого слова WHERE нужно быть исключительно внимательным При отсутствии заданных ключевым словом WHERE условий данные в соответствующем столбце будут обновлены для всех строк данных. В нашем случае это бы означало, что фамилии всех людей станут «Смирнова». Оператор UPDATE без ключевого слова WHERE используется очень редко.