Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

In ([Овощи], [Мясо], [Рыба], [Молоко], [Яйца], [Крупа], [Фрукты], [Кофе])

) pvt -- конец pivot-запроса

) pvt1

UNPIVOT

(Горячее

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

FOR Основа

IN ([Овощи], [Мясо], [Рыба], [Молоко], [Яйца], [Крупа], [Фрукты], [Кофе])

)unpvt;

Результат

Основа

Горячее

Овощи

2

Мясо

2

Рыба

1

Молоко

3

Яйца

2

Крупа

2

Фрукты

0

Кофе

0

Глава 7. Операторы манипулирования данными.

Операторы манипулирования данными (DML – Data Manipulation Language) предназначены для изменения данных в существующих таблицах БД. В этот раздел языка SQL входят три оператора:

INSERT – добавление новых данных,

DELETE – удаление данных и

UPDATE – изменение существующих данных.

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

7.1. Оператор INSERT для добавления одной записи.

Синтаксис:

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

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

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

Пример 46.

Добавим новое блюдо в таблицу Блюда

INSERT INTO Блюда (ID_Блюда, Блюдо, Вид, Основа, Вес, Труд)

VALUES (34, 'Шашлык', 3, 'Мясо', 150 , 4);

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

INSERT INTO Блюда

VALUES (34, 'Шашлык', 3, 'Мясо', 150, 4);

Результаты работы обоих операторов одинаковые.

Какие столбцы должны быть заданы при вводе данных? Это определяется тем, как описаны эти столбцы при создании соответствующей таблицы. Если столбец имеет признак обязательный (NOT NULL) при создании таблицы, то оператор INSERT должен обязательно содержать данные для ввода в каждую строку данного столбца. Поэтому если в таблице все столбцы обязательные, то каждая вводимая строка должна содержать полный перечень вводимых значений, а указание имен столбцов в этом случае необязательно. Если имеется хотя бы один необязательный столбец, и вы не вводите в него значение, задание списка имен столбцов — обязательно.

Insert into Продукты (id_Продукта, Продукт, Белки)

Values (18, 'Горох', 180 );

Все остальные столбцы таблицы Продукты получат значение NULL или значение по умолчанию, которое было задано при создании таблицы.

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

Вставка NULL-значений может выполнятся командой: