- •ПРЕДИСЛОВИЕ
- •Глава 1. Основы реляционной модели данных
- •1.1. Отношения
- •1.2. Алгебра отношений
- •1.2.1. Теоретико-множественные операции
- •1.2.2. Специальные операции
- •1.3. Предпосылки введения исчисления отношений
- •1.3.1. Пример исполнения запросов
- •1.4. Исчисление отношений и SQL
- •2.2. Типы данных и язык определения схем DDL
- •2.3. Создание базы данных
- •3.1. Определение таблицы CREATE TABLE
- •3.1.1. Обозначения в синтаксических конструкциях
- •3.1.2. Определение столбца
- •3.1.3. Переопределение имени столбца AS
- •3.2. Определение представлений (VIEW обзоров)
- •3.3. Определение прав доступа (привилегий)
- •4.1. Структура запросов
- •4.1.1. Команда SELECT
- •4.1.2. Описание SELECT
- •4.1.3. Сортировка результирующей таблицы
- •4.1.4. Удаление повторяющихся данных
- •4.2. Использование фразы WHERE
- •4.3. Операторы IN, BETWEEN, LIKE в фразе WHERE
- •4.4. GROUP BY и агрегатные функции SQL
- •4.6. Упорядочение вывода по номеру столбца
- •5.1.1. Естественное соединение таблиц (natural join)
- •5.1.2. Эквисоединение таблиц
- •5.1.3. Декартово произведение таблиц
- •5.1.4. Соединение с дополнительным условием
- •5.3.Структурированные запросы
- •5.3.1. Виды вложенных подзапросов
- •5.3.2. Простые вложенные подзапросы
- •5.3.3. Коррелированные вложенные подзапросы
- •5.3.4. Запросы, использующие EXISTS
- •5.3.5. Использование функций в подзапросе
- •6.2. Инструкция INSERT
- •6.2.1. Добавление одной строки в таблицу
- •6.2.2. Добавление нескольких строк
- •6.3.2. Удаление нескольких строк
- •6.4. Инструкция UPDATE
- •6.4.1. Модификация одной записи
- •6.4.2. Модификация нескольких строк
- •Заключение
- •Библиографический список
WHERE Период = "Апрель";
Удалить все работы (рис. 2.8) для сотрудника, проживающего в Гатчине.
DELETE
FROM Работы
WHERE Ид_Сотр IN
(SELECT Ид_Сотр
FROM Сотрудник
WHERE Город = "Гатчина");
Например, если мы закрыли нашу точку в Мурманске, следующий запрос удалит всех совместителей из Мурманска:
DELETE
FROM Совместители
WHERE Город = "Мурманск" and Ид_Совм = ANY
(SELECT Ид_Совм
FROM Сотрудник
WHERE Сотрудник.Ид_Совм= Совместители.Ид_Сотр );
Как и в случае удаления одной записи, при удалении множества записей в базе данных возможно рассогласование таблиц по ссылкам.
6.4.Инструкция UPDATE
6.4.1.Модификация одной записи
Для модификации значений в одной записи необходимо в инструкции UPDATE указать имя используемой таблицы и в опции предложения SET указать на изменение, которое нужно сделать для определенного столбца. Фраза WHERE должна содержать квалифицирующее выражение, позволяющее выделить только одну строку таблицы.
Например, чтобы изменить у сотрудника район и индекс почты в таблице СОТРУДНИК (рис. 2.1), Вы можете ввести:
UPDATE Сотрудник
SET Район = "Фрун", Индекс = "94555"
WHERE |
Ид_Сотр = 1; |
Фактически мы зарегистрировали в базе данных новый факт смены адреса жительства сотрудника. Даже столь безобидная модификация полей одной строки может вызвать много неприятностей, а именно:
-как определить, что новый адрес соответствует действительности;
-что делать, если по каким-то причинам потребуется вспомнить старый адрес сотрудника.
Подобные задачи должны решаться уже встроенными средствами СУБД, а точнее, наличием возможностей в концептуальной модели системы отслеживать подобные ситуации.
6.4.2. Модификация нескольких строк
Если фраза WHERE в инструкции UPDATE содержит квалифицирующее выражение, в результате исполнения которого будет получено несколько строк, то действие опции SET распространяется на все эти строки.
Увеличить оклад сотрудников (рис. 2.3) на 1000 рублей, но только для тех, кто был принят на работу до 2003 года.
UPDATE Отдел_ Сотрудники
SET Оклад = Оклад +1000
WHERE Дата_ приема < 2003 and Дата_ увольнения=NULL;
Установить расценки на 0.3 больше предыдущей, только для штатных преподавателей начиная с мая месяца.
UPDATE Работы
SET Цена = Цена+0.3
WHERE Работы.Период_с > 30.04.03 AND Ид_Сотр IN
(SELECT Ид_Сотр
FROM Сотрудник, Отдел_ Сотрудники
WHERE Сотрудник. Ид_Сотр = Отдел_ Сотрудник. Ид_Сотр AND Отдел_ Сотрудники. Ид_Сотр <> NULL);
По определению инструкция UPDATE может производить обновление данных только в одной таблице, что на практике приводит к нежелательным эффектам, если возникает необходимость модифицировать информацию в нескольких связанных таблицах.
Пусть необходимо изменить идентификатор (номер) Ид_Вида в таблице ВИД_РАБОТЫ (рис. 2.9) например 10 на 16. Атрибут с именем Ид_Вида встречается также в таблице РАБОТЫ (рис. 2.8). Поэтому изменение, производимое в таблице ВИД_РАБОТЫ, должно быть отражено в таблице РАБОТЫ.
UPDATE Вид_ работы
SET Ид_Вида = 16
WHERE Ид_Bида = 10;
UPDATE Работы
SET Ид_Вида = 16
WHERE Ид_Вида = 10;
В интервале времени между первым и вторым оператором UPDATE база данных будет находиться в противоречивом состоянии (нарушается целостность по ссылкам), поскольку после выполнения первой транзакции таблица РАБОТЫ (рис. 2.8) ссылается