7.4.2. Добавление данных – команда INSERT

 

Рассмотрим некоторые возможности заполнения таблиц. Данные в таблицу могут быть внесены различными способами:

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

С помощью команды SELECTINTO. В этом случае на основе результата выборки, возвращаемого запросом, автоматически создается новая таблица (аппарат использования команды рассмотрен выше).

 

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

 

Вставка одной строки

 

В простейшем случае вставка данных с помощью команды INSERT предполагает использование конструкции INSERT-VALUES:

 

INSERT [INTO] <имя_таблицы> [(<список_колонок>)]

 VALUES (<список_значений>)

 

С помощью этой команды можно добавить только одну строку.

Аргумент <имя_таблицы> идентифицирует имя таблицы, в которую необходимо вставить строку данных. Необязательный параметр <список_столбцов> задает имена столбцов, в которые будет производиться добавление данных.

Рассмотрим процесс добавления данных в таблицу «Сводная_ведомость». Каждая строка этой таблицы содержит результат сдачи экзамена (зачета) по отдельной дисциплине отдельным студентом. Если студент, ID_Студент которого равен 10, сдал экзамен по дисциплине со значением 3 в столбце ID_Дисциплина на оценку «5», то команда добавления этих данных в таблицу «Сводная_ведомость» выглядит следующим образом:

 

INSERT     Сводная_ведомость

VALUES (10, 3, 5)

 

Для назначения произвольного порядка и состава столбцов в этом случае можно использовать следующую команду:

 

INSERTINTO Сводная_ведомость

(ID_Дисциплина, ID_Студент)

VALUES (3, 10)

 

Если для столбца Оценка определено значение по умолчанию или разре­шено хранение значений NULL, то значение для этого столбца можно вообще не указывать:

Мы рассматривали вставку строк в таблицу, значения для которых были заданы с помощью констант. Однако вставляемые значения можно идентифицировать и с помощью переменных, функций, а также любых сложных выраже­ний. Единственным требованием является совпадение типов данных столбца и значения, возвращаемого выражением.

 

Вставка результата запроса

 

Приведем упрощенный синтаксис команды INSERT:

 

INSERT [ INTO]

<имя_таблицы>

{ [ (<список_колонок>) ]

{ VALUES

( { DEFAULT | NULL | <выражение> } [, ..., n] )

| <результирующая_таблица>

}

}

| DEFAULTVALUES

 

Рассмотрим назначение каждого из аргументов:

INTO - дополнительное ключевое слово, которое может быть использовано между словом INSERT и именем таблицы для обозначения, что следующий параметр является именем таблицы, в которую будут вставлены данные;

<имя_таблицы> - имя таблицы, в которую необходимо вставить данные;

<список_столбцов> - содержит список столбцов, в которые будет производиться вставка данных. Если он опущен, то данные будут вставляться последовательно во все столбцы, начиная с первого. Значения для столбцов указываются после ключевого слова VALUES. Для каждого столбца должно быть задано выражение, имеющее соответствующий тип дан­ных. Если список столбцов не указан, то количество значений VALUES должно соответствовать количеству столбцов таблицы. Если же список столбцов явно задан, то это определяет порядок зна­чений VALUES (и, соответственно, их типы). Можно не указывать явно значе­ния для столбцов, если для них определено значение по умолчанию или раз­решено хранение значений NULL.

VALUES ( { DEFAULT | NULL | <выражение> } [,..., n]) - определяет набор данных, которые будут вставлены в таблицу. Количество аргументов VALUES определяется количеством столбцов в таблице или количеством столбцов в списке (если таковой имеется). Для каждого столбца таблицы можно указать один из трех возможных вариантов:

DEFAULT - будет вставлено значение по умолчанию, определенное для стол­бца. Если для столбца разрешено хранение значений NULL, а значение по умолчанию не определено, то в столбец будет вставлено значение NULL.

NULL - в столбец будет вставлено значение NULL. Естественно, вставка таких значений будет успешной, если для столбца была разрешена возможность хранения значений NULL. Следует помнить, что для столбцов, входящих в первичный ключ, возможность хранения значе­ний NULL не предусмотрена.

<выражение> - задает значение, которое будет вставлено в стол­бец таблицы. Этот параметр должен иметь тот же тип данных, что и стол­бец, а также удовлетворять ограничениям целостности, определенным для соответствующего столбца.

<результирующая_таблица> - этот параметр подразумевает указание запроса SELECT, с помощью которого будет формироваться набор данных, вставляемых в таблицу. Количество столбцов, порядок их перечисления и их типы данных должны соответствовать столбцам, указанным в списке <список_столбцов>. Если последний отсутствует, то запрос должен возвращать значения для всех столбцов табли­цы.

DEFAULTVALUES - при указании этого параметра строка будет содержать только значения по умолчанию. Если для столбца не установлено значение по умолчанию, но разрешено хранение значений NULL, то в столбец будет вставлено значение NULL. Если же для столбца не разрешено хранение значений NULL, нет значения по умолчанию и в команде INSERT не указано значение для вставки, то будет выдано сообщение об ошибке и выполнение команды прервется.

 

Более сложный случай вставки данных предполагает использование конструк­ции INSERTINTO...SELECT:

 

INSERTINTO <имя_таблицы>

SELECT <выражение_запроса>

 

Аргумент <имя_таблицы> содержит имя таблицы, в которую будут вставляться вы­бранные данные. Таблица должна иметь соответствующую структуру и быть предварительно создана.

<Выражение_запроса> определяет тело запроса SELECT, с помощью которого производится выборка данных из одной или нескольких таблиц. Например, для выборки данных из таблицы «Студенты» обо всех студентах, поступивших в ВУЗ в 2000 году и сохранения их и таблице «Студент_2000» можно использовать такую последовательность инструкций:

 

CREATE TABLE Студент_2000

(ID_Студент_2000        INTEGER NOT NULL,

 Фамилия                      CHAR(30) NOT NULL,

 Имя                              CHAR(15) NOT NULL,

 Отчество                      CHAR(20) NOT NULL,

 Адрес                           CHAR(30),

 Телефон                      CHAR(8),

 PRIMARY KEY          (ID_Студент_2000))

 

INSERTINTOСтудент_2000

SELECTID_Студент, Фамилия, Имя, Отчество, Адрес, Телефон

FROMСтуденты

WHEREГод_поступления = 2000

 

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

 

SELECTTOP 5 Фамилия, Имя, Отчество

FROM Студент_2000

 

Будет выдан следующий результат:

 

 

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

В качестве еще одного примера рассмотрим помещение в новую таблицу «Преполаватель_дисциплина» информации о том, какой преподаватель какую дисциплину ведет.

Для этого мы будем работать с тремя таблицами: «Кадровый_состав», «Учебный_план» и «Дисциплины». В первой таблице содержится список преподавателей, тогда как в третьей — список дисциплин. С помощью таблицы «Учебный_план» устанавливается связь «многие ко многим» между таблицами «Кадровый_состав» и «Дисциплины».

Прежде чем приступать к вставке данных, необходимо создать таблицу, которая будет содержать интересующие нас данные. Помимо столбцов для хранения информации об имени и фамилии преподавателя и названии дисциплины предусмотрим столбцы для хранения идентификационных номеров преподавателей и дисциплин:

 

CREATETABLE Преподаватель_дисциплина

(ID_Дисциплина           INTEGERNOTNULL,

 ID_Преподаватель       INTEGER NOT NULL,

 Наименование             CHAR(20) NOT NULL,

Фамилия                       CHAR(30) NOT NULL,

 Имя                              CHAR(15) NOT NULL,

 Отчество                     CHAR(20) NOT NULL,

 Должность                            CHAR(20) NOTNULL)

 

Теперь вставим в созданную таблицу нужные нам данные, выполнив для этого следующий запрос:

 

INSERTINTO Преподаватель_дисциплина

SELECTDISTINCT Дисциплины.ID_Дисциплина,

Кадровый_состав.ID_Преподаватель, Наименование,

Фамилия, Имя, Отчество,Должность

FROMКадровый_состав, Учебный_план, Дисциплины

WHEREКадровый_состав.ID_Преподаватель = Учебный_план.ID_Преподаватель

 ANDДисциплины.ID_Дисциплина = Учебный_план.ID_Дисциплина

 

В результате в таблицу будет вставлено 54 строки.

Проиллюстрируем результат запроса по новой таблице:

 

SELECTTOP 4 *

FROM Преподаватель_дисциплина

 

 

К оглавлению

Назад к разделу "7.4. Управление данными"

Вперед к разделу "7.4.3. Изменение данных – команда UPDATE"