ДОБАВЛЕНИЕ ДАННЫХ (инструкция INSERT)
Наименьшей единицей информации, которую можно добавить в реляционную базу данных, является одна строка. В реляционной СУБД существует три способа добавления новых строк в базу данных:
- однострочная инструкция INSERT позволяет добавить в таблицу одну новую строку. Она широко используется в повседневных приложениях, например в программах ввода данных.
- многострочная инструкция INSERT обеспечивает извлечение строк из одной части базы данных и добавление их в другую таблицу. Она обычно используется, когда “старые” строки таблицы пересылаются в неиспользуемую таблицу для сохранения.
Однострочная инструкция INSERT. Однострочная инструкция INSERT, добавляет в таблицу новую строку.
INSERT INTO имя_таблицы [(список_столбцов)]
VALUES (список_значений_данных);
В предложении INTO указывается имя таблицы или представления, в которые добавляется новая строка, а в предложении VALUES содержатся значения данных для новой строки. Список столбцов определяет, какие значения, в какой столбец заносятся.
На практике данные почти всегда добавляются в базу с помощью программ ввода данных, использующих специальные формы. После окончания ввода данных в форму, приложение добавляет новую строку данных в базу с помощью программного SQL. Однако инструкцию INSERT можно использовать и в интерактивном режиме. Независимо от того, какой SQL используется, интерактивный или программный, инструкция INSERT имеет один и тот же вид.
Как правило, в инструкции INSERT указывается простое имя таблицы, определяющее вашу собственную таблицу. Чтобы вставить данные в таблицу, созданную другим пользователем, необходимо указать ее полное имя. Помимо этого, необходимо иметь разрешение на ввод данных в эту таблицу, иначе выполнение инструкции закончится неудачей.
Список столбцов в инструкции INSERT – необязательный параметр, он служит для того, чтобы установить соответствие между значениями данных, содержащимися в предложении VALUES, и столбцами, для которых эти данные предназначены. Списки значений и столбцов должны содержать одинаковое число элементов, а тип данных каждого значения должен быть совместимым с типом соответствующего столбца. Если списка столбцов нет, то используются все столбцы в том порядке, в котором они перечислены в CREATE TABLE.
Добавление значений NULL. При добавлении в таблицу новой строки всем столбцам, имена которых отсутствуют в списке столбцов инструкции INSERT, автоматически присваивается значение NULL.
Значение NULL можно присвоить и явным образом, включив эти столбцы в список, а в списке значений задав для них ключевое слово NULL:
insert inTO staff (sno, fname, lname, address, tel_no, position, sex, salary, dob, bno)
values (‘s122’, ‘Иван’, ‘Иванов’, ‘…’, ‘…’, NULL, ‘m’, NULL, ’03.05.92’, 2);
Добавление всех столбцов.Для удобства в SQL разрешается не включать список столбцов в инструкцию INSERT. Если список столбцов опущен, он генерируется автоматически и в нем слева направо перечисляются все столбцы таблицы. При выполнении инструкции SELECT * генерируется такой же список столбцов. Пользуясь этой сокращенной формой записи, предыдущую инструкцию можно переписать таким образом:
insert into staff
values (‘s122’, ‘Иван’, ‘Иванов’, ‘…’, ‘…’, NULL, ‘m’, NULL, ’03.05.92’, 2);
Как видно, если список столбцов опущен, то в списке значений явно указаны значения NULL, а последовательность значений данных в точности соответствует порядку столбцов в таблице.
Многострочная инструкция INSERT. Многострочная инструкция INSERT добавляет в таблицу несколько строк путем копирования множества строк одной таблицы в другую таблицу.
INSERT INTO имя_таблицы [(список_столбцов)]
SELECT запрос;
В этой разновидности инструкции INSERT значения для новых строк явно не задаются. Источником новых строк служит запрос на выборку (SELECT), содержащийся внутри инструкции.
На запрос, содержащийся внутри многострочной инструкции INSERT, накладывается несколько ограничений:
- в запрос нельзя включать предложение ORDER BY. He имеет смысла сортировать таблицу результатов запроса, поскольку она добавляется в таблицу, которая, как и все остальные, не упорядочена;
- таблица результатов запроса должна содержать количество столбцов, равное длине списка столбцов в инструкции INSERT (или полностью повторять список столбцов таблицы, если список столбцов отсутствует), а типы данных соответствующих столбцов таблицы результатов запроса и целевой таблицы должны быть совместимыми;
- имя таблицы, указанное в инструкции INSERT не может присутствовать в предложении FROM запроса на выборку или любого запроса, вложенного в него. Тем самым запрещается добавление таблицы самой к себе.
Пример:
Пусть существует таблица staff_prop_count (sno, fname, lname, prop_count), которая содержит имена работников компании и их учетные номера, а также количество объектов аренды, за которые они отвечают.
INSERT INTO staff_prop_count
(SELECT sno, fname, lname, COUNT(*)
FROM staff s, property_for_rent p
WHERE s.sno=p.sno
GROUP BY s.sno, fname, lname)
UNION
(SELECT sno, fname, lname, 0)
FROM staff
WHERE s.sno NOT IN (SELECT DISTINCT sno
FROM property_for_rent));
Отметим, что инструкция UNION в таком применении поддерживается не во всех диалектах SQL.
Дата добавления: 2015-08-26; просмотров: 1452;