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

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

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

INSERT INTO < имя таблицы >

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

INSERT INTO TEACHERS

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

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

INSERT INTO TEACHERS

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

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

INSERT INTO TEACHERS (TDATE, TFAM, TIMA)

VALUES ( 01/09/1999, «Федченко», «Светлана»);

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

Пример 1. Пусть имеется таблица EXCELLENT. Добавить в неё строки из таблицы USP, в которых оценка равна 5.

INSERT INTO EXCELLENT

SELECT *

FROM USP

WHERE OCENKA = 5;

Таблица EXCELLENT

EXCELLENT
UNUM OCENKA UDATE SNUM PNUM
    10/06/1999    
    12/06/1999    

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

Пример 2. В поле SNUM, AVGOCENKA таблицы AVGRAITING вставить значения полей SNUM, OCENKA таблицы USP, расположив их в порядке возрастания.

INSERT INTO AVGRAITING (SNUM, AVGOCENKA)

SELECT SNUM, AVG ( OCENKA)

FROM USP

GROUP BY SNUM;

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

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

Пример 3. В таблицу STO вставить фамилии, имена и отчества студентов, у которых есть хотя бы одна отличная оценка.

INSERT INTO STO (SFAM, SIMA, SOTCH)

SELECT SFAM, SIMA, SOTCH

FROM STUDENTS

WHERE SNUM = ANY

(SELECT SNUM

FROM USP

WHERE OCENKA = 5);

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

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

INSERT INTO MAXOCENKA (SNUM, OCENKA)

SELECT SNUM, OCENKA

FROM USP FIRST

WHERE OCENKA=

(SELECT MAX ( OCENKA)

FROM USP SECOND = SECOND.UDATE);

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

9.2. Удаление данных. Удаление строк из таблицы можно осуще

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

DELETE FROM STUDENTS

WHERE SNUM

(SELECT SNUM

FROM USP

WHERE OCENKA = 3);

В данном случае подзапрос выберет всех студентов, имеющих тройки и таблицы успеваемости, и в предикат основной команды вернёт номера их студенческих билетов.

Допускается в предикате команды DELETE использовать подзапросы. Кроме того, очень эффективно выполнять сначала вторичные действия (проверки и т.п.) после чего выполнять само удаление. Хотя нельзя ссылаться на таблицу, из которой будут удаляться записи, в предложении FROM подзапроса, в предикате допускается ссылка на текущую строку этой таблицы, т.е. можно использовать соотнесенные подзапросы. Например:

DELETE FROM STUDENTS


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: