Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы_SQL.doc
Скачиваний:
37
Добавлен:
15.11.2018
Размер:
821 Кб
Скачать
☆

Использование операций exists и not exists

Ключевые слова EXISTS и NOT EXISTS предназначены для использования только совместно с подзапросами. Результат их обработки представляет собой логическое значение TRUE или FALSE. Для ключевого слова EXISTS результат равен TRUE в том и только в том случае, если в возвращаемой подзапросом результирующей таблице присутствует хотя бы одна строка. Если результирующая таблица подзапроса пуста, результатом обработки операции EXISTS будет значение FALSE. Для ключевого слова NOT EXISTS используются правила обработки, обратные по отношению к ключевому слову EXISTS. Поскольку по ключевым словам EXISTS и NOT EXISTS проверяется лишь наличие строк в результирующей таблице подзапроса, то эта таблица может содержать произвольное количество столбцов.

Пример 7.18. Определить список имеющихся на складе товаров (запрос эквивалентен пример 7.7).

SELECT Название

FROM Товар

WHERE EXISTS (SELECT КодТовара

FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара)

Пример 7.18. Определение списка имеющихся на складе товаров. (html, txt)

Пример 7.19. Определить список отсутствующих на складе товаров (запрос эквивалентен пример 7.8).

SELECT Название

FROM Товар

WHERE NOT EXISTS (SELECT КодТовара

FROM Склад

WHERE Товар.КодТовара=Склад.КодТовара)

Пример 7.19. Определение списка отсутствующих на складе товаров. (html, txt)

8. Лекция: Запросы модификации данных

Рассматриваются запросы модификации данных в реляционной таблице: вставка отдельной записи INSERTѕ VALUESѕ или группы записей из имеющейся таблицы INSERTѕ SELECTѕ, удаление записей по условию DELETE, изменение записей по условию UPDATE. Вводится понятие целостности данных. Определяются целостность сущностей и ссылочная целостность.

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

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

  • INSERT INTO – запрос добавления;

  • DELETE – запрос удаления;

  • UPDATE – запрос обновления.

Запрос добавления

Оператор INSERT применяется для добавления записей в таблицу. Формат оператора:

<оператор_вставки>::=INSERT INTO <имя_таблицы>

[(имя_столбца [,...n])]

{VALUES (значение[,...n])|

<SELECT_оператор>}

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

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

  • количество элементов в обоих списках должно быть одинаковым;

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

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

Пример 8.1. Добавить в таблицу ТОВАР новую запись.

INSERT INTO Товар (Название, Тип, Цена)

VALUES(" Славянский ", " шоколад ", 12)

Пример 8.1. Добавление в таблицу ТОВАР новой записи. (html, txt)

Если столбцы таблицы ТОВАР указаны в полном составе и в том порядке, в котором они перечислены при создании таблицы ТОВАР, оператор можно упростить.

INSERT INTO Товар VALUES (" Славянский ",

" шоколад ", 12)

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

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

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

INSERT INTO Итог

(Название, Месяц, Стоимость )

SELECT Товар.Название, Month(Сделка.Дата)

AS Месяц, Sum(Товар.Цена*Сделка.Количество)

AS Стоимость

FROM Товар INNER JOIN Сделка

ON Товар.КодТовара= Сделка.КодТовара

GROUP BY Товар.Название, Month(Сделка.Дата)

Пример 8.2. Добавление в итоговую таблицу сведения об общей сумме ежемесячных продаж каждого наименования товара. (html, txt)