Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Для УМК БД.doc
Скачиваний:
77
Добавлен:
19.08.2019
Размер:
1.35 Mб
Скачать

Тема 11. Внесение изменений в бд. Добавление информации в бд, удаление данных, изменение существующих данных.

 

Лекции: 2 часа

 

C.11.1.Внесение изменений в базу данных

При работе с SQL исключительно важно не только уметь выбирать данные, но и пользоваться средствами, которые управляют значениями в таблице. Значения могут быть помещены и удалены из полей тремя командами языка DML (Язык Манипулирования Данными), а именно:

∙ insert - вставить;

∙ update - модифицировать;

∙ delete - удалить.

Добавление информации в базу данных

Все записи в SQL вводятся с использованием команды модификации INSERT. В самой простой форме эта команда имеет -следующий синтаксис:

INSERT INTO <table name>

VALUES ( <value>, <value> . . .) ;

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

INSERT INTO TEACHERS

VALUE S (4006, 'Федченко', 'Светлана', 'Геннадиевна', 01/09/1999);

Команда INSERT не производит никакого вывода, но желательно, чтобы СУБД давала некоторое подтверждение того, что данные были успешно внесены. Кроме того, следует помнить, что имя таблицы, в которую производится вставка, должно быть предварительно определено, а каждое значение в списке вставляемых данных должно совпадать с типом данных столбца, в который оно вставляется. Значения в этом списке вводятся в таблицу в том порядке, в котором они записаны в команде, поэтому первое значение автоматически попадает в первый столбец, второе - во второй столбец и т. д.

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

INSERT INTO TEACHERS

VALUES (NULL, 'Федченко', 'Светлана', 'Геннадиевна', 01/09/1999);

Так как значение NULL - специальное служебное слово, то заключать его в одиночные кавычки не требуется.

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

INSERT INTO TEACHERS (TDATE, TFAM, TIMA) VALUES (01/09/1999, 'Федченко', 'Светлана') ;

позволяет вставить значения в поля таблицы в порядке TDATE, TFAM, TIMA, причем столбцы TNUM и ТОТСН отсутствуют. Это означает, что для этих полей автоматически устанавливается значение по умолчанию. Значение по умолчанию может быть введено заранее или. в противном случае, это будет NULL значение. Если ограничение запрещает использование значения NULL в данном поле, то обязательно надо позаботиться об обеспечении столбца содержательным значением для любой команды INSERT.

Можно использовать команду INSERT для того, чтобы получать или выбирать значения из одной таблицы и помещать их в другую вместе с запросом. Для этого предложение VALUES заменяется на соответствующий запрос:

INSERT INTO EXCELLENT SELECT * FROM USP WHERE OCENKA = 5;

Следовательно, будет сделано следующее: все значения, выданные запросом (информация о студентах, имеющих только отличные  оценки),   помещаются  в  таблицу,  названную EXCELLENT. Для того чтобы не произошло ошибки, таблица EXCELLENT должна уже быть создана командой CREATE TABLE (о ней речь ниже) и иметь пять столбцов, которые совпадают с таблицей USP по типу данных.

Таким образом, будет получена независимая таблица с некоторыми данными из таблицы успеваемости USP. При изменении значений в таблице USP это ни в коем случае не отразится на таблице EXCELLENT.

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

Например, при помощи нижеприведенной команды можно вставить информацию о среднем балле каждого студента:

INSERT INTO AVGRAITING (SNUM, AVGOCENKA) SELECT SNUM, AVG (OCENKA.) FROM USP GROUP BY SNUM;

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

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

Оба запроса в этой команде функционируют так же, как если бы они не являлись частью выражения INSERT. Подзапрос находит все строки для студентов, имеющих отличные оценки, и формирует набор значений SNUM. Внешний запрос выбирает строки из таблицы STUDENTS, где эти значения SNUM найдены. a INSERT вставляет найденные данные в таблицу' STO.

В команде INSERT допускается использовать соотнесенные подзапросы. Предположим, что имеется таблица МАХОCENKA, в которой хранится информация о студенте, имеющем максимальную оценку за определенную дату (скажем, для начисления именной стипендии). Тогда, для отслеживания изменения данных в таблице успеваемости и модификации соответствующей информации о претенденте на именную стипендию, необходимо воспользоваться следующей командой с соотнесенным подзапросом:

INSERT INTO MAXOCENKA (SNUM, OCENKA) SELECT SNUM, OCENKA FROM USP FIRST WHERE OCENKA = (SELECT MAX (OCENKA) FROM USP SECOND

WHERE FIRST.UDATE = SECOND.UDATE);

При этом рассматриваемая команда имеет подзапрос, который базируется на той же самой таблице, что и внешний запрос, но не ссылается на таблицу MAXOCENKA, на которую воздействует команда, поэтому такая конструкция является допустимой.