Открытая коллекция знаний

OpenU.Ru

Язык запросов SQL. DML.

Внесение изменений в базу данных - INSERT, UPDATE, DELETE

Далее рассмотрены SQL-запросы, позволяющие вносить изменения в записи базы данных — вставка, редактирование и удаление строк.

Запрос SQL на вставку

Вставка в таблицу базы данных осуществляется с помощью запросов такого типа:

INSERT INTO ТАбЛИЦА (ПОЛЕ_1,ПОЛЕ_2,…,ПОЛЕ_N)
VALUES (ЗНАЧЕНИЕ_1, ЗНАЧЕНИЕ_2,…, ЗНАЧЕНИЕ_N)

В скобках после имени таблицы перечисляются поля, в которые нужно вставить данные, а в скобках после предложения VALUES – значения, которые нужно вставить в соответствующие поля таблицы, перечисленные выше. Вставка осуществляется таким образом, что первое из перечисленных значений помещается в поле, перечисленное в списке полей первым, второе – во второе и т.д. Из всего сказанного можно сделать вывод о том, что значения, перечисленные в предложении VALUES должны быть совместимы с полями таблицы, в которую осуществляется вставка.

Например, добавим в таблицу покупателей новую запись. Для этого напишем запрос следующего вида:

INSERT INTO Buyers (BNum, BName, BTown)
VALUES (6, "Маркет", 4)

В результате мы добавили покупателя с номером 6, наименованием «Маркет», с номером города 4.

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

INSERT INTO Buyers (BNum, BName, BTown)
SELECT * FROM otherBuyers

Запрос SQL на изменение данных

Структура запроса внесения изменений в записи таблицы выглядит следующим образом:

UPDATE ТАБЛИЦА
SET
ПОЛЕ_1 = ЗНЕНИЕ_1,
ПОЛЕ_2 = ЗНЕНИЕ_2,
…,
ПОЛЕ_N = ЗНЕНИЕ_N

WHERE УСЛОВИЕ

Все изменения, описанные в запросе, коснутся только тех записей, которые удовлетворяют условию, описанному в предложении WHERE. Если нужно внести изменения во всю таблицу, то предложение WHERE не описывают.

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

UPDATE Goods SET GPrice=GPrice*2
WHERE GTypeNum=1

В предложении WHERE можно использовать подзапросы.

Подзапросы так же можно использовать и в предложении SET после имени поля и знака равенства. Результатом подзапроса должно быть только одно значение, совместимого по типу с полем указанным перед знаком равенства. Например, пересчитаем сумму в таблице покупок, для товара с номером 1.

UPDATE Sells
SET SSum= SQnty*(Select Gprice FROM Goods WHERE GNum=1)
WHERE GNum=1

Опасность такого запроса заключается в том, что если результатом подзапроса буден несколько значений, то в запрос выполнен не будет. Возникнет ошибка. Поэтому при написании запроса такого типа надо быть уверенным, что результат подзапроса – это одно поле. В силу этих причин в таких подзапросах обычно используются агрегатные функции или инструкция DISTINCT.

Запрос SQL на удаление строк

Для удаления используются запросы типа Delete:

DELETE FROM ТАБЛИЦА
WHERE УСЛОВИЕ

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

Приведем пример использования запроса типа Delete. Удалим всех покупателей из таблицы покупателей, которые относятся к городу Москва.

DELETE FROM Buyers
WHERE BTown IN (SELECT TNum FROM Touns WHERE TName = "Москва")

Содержание