Язык SQL Операторы манипулирования данными
Операции манипулирования данными DELETE операция удаления записей INSERT операция добавления или ввода новых записей UPDATE операция изменения (обновления записей) Все операторы манипулирования данными позволяют изменить данные только в одной таблице.
Insert Синтаксис ввода одной строки в таблицу INSERT INTO имя_таблицы [( ) ] VALUES ( )
Пример - вставка новой книги или
Добавление более одной строки Оператор ввода данных позволяет ввести сразу множество строк, если их можно выбрать из некоторой другой таблицы Синтаксис ввода строк из другой таблицы INSERT INTO имя_таблицы [( ) ] SELECT FROM ….
Пример Допустим, что у нас есть таблица со студентами и в ней указаны основные данные о студентах: их фамилии, адреса, домашние телефоны и даты рождения. Тогда мы можем сделать всех студентов читателями нашей библиотеки одним оператором;
DELETE Оператор удаления данных позволяет удалить одну или несколько строк из таблицы в соответствии с условиями, которые задаются для удаляемых строк. Синтаксис оператора DELETE следующий: DELETE FROM имя_таблицы [WHERE условия_отбора]
Пример - удаление всех строк таблицы Например, если нам надо удалить результаты прошедшей сессии, то мы можем удалить все строки из отношения R1 командой DELETE FROM R1
Удаление выбранных записей Например, если мы исключим студента Миронова Л. В., то мы должны написать следующую команду DELETE FROM R2 WHERE ФИО = 'Миронов А. В.'
Исключение неуспевающих студентов Тогда нам в условиях отбора надо найти студентов, имеющих либо две или более двоек, либо два и более несданных экзамена из числа тех, которые студент сдавал. Для поиска таких студентов нам надо выбрать из отношения R1 все строки с оценкой 2 или с неопределенным значением, потом надо сгруппировать полученный результат по атрибуту ФИО и, подсчитав количество строк в каждой группе, которое соответствует количеству несданных экзаменов каждым студентом, отобрать те группы, у которых количество строк не менее двух.
Текст запроса DELETE FROM R2 WHERE R2.ФИO IN (SELECT Rl.ФИО FROM Rl WHERE Оценка = 2 OR Оценка IS NULL GROOP BY Rl.ФИO HAVING COUNT(*) > 2 )
Особенности Delete Однако при выполнении операции DELETE, включающей сложный подзапрос, в подзапросе нельзя упоминать таблицу, из которой удаляются строки поэтому СУБД отвергнет такой красивый подзапрос, который попытается удалить всех не только сдававших, но и несдававших студентов, которые имеют более двух задолженностей.
Этот запрос неправильный
UPDATE Синтаксис оператора
Пример - изменение одной строки нашем учебном заведении произошло счастливое событие, которое связано с тем, что госпожа Степанова К. Е. пересдала экзамен по дисциплине Базы данных с двойки сразу на четверку. В этом случае нам надо срочно выполнить соответствующую корректировку таблицы R1 UPDATE Rl SET Rl.Оценка = 4 WHERE Rl.ФИО =Степанова К.Е. AND Rl.Дисциплина = Базы данных
Изменение нескольких записей
Сложный пример Расширим нашу базу еще одним отношением, которое будет содержать перечень студентов, получающих стипендию с указанием надбавки, которую они получают за отличную учебу. Исходно там могут находиться все студенты с указанием неопределенного размера стипендии. По мере анализа отношения R1 мы можем постепенно заменять неопределенные значения на конкретные размеры стипендии.
Исходное отношение R5
Расчет стипендий Будем считать наличие трех пятерок по сессии признаком повышенной стипендии, + 50% к основной, наличие двух пятерок из сданных экзаменов и отсутствие двоек и троек на сданных экзаменах - признаком повышения стипендии па 25%, наличие хотя бы одной двойки среди сданных экзаменов - признаком снятия или отсутствия стипендии вообще, то есть -100% надбавки. При отсутствии троек на сданных экзаменах назначим обычную стипендию с надбавкой 0%. Все операции обновления будем делать отдельными запросами
наличие трех пятерок по сессии
Наличие двух пятерок из сданных экзаменов и отсутствие двоек и троек
При отсутствии троек на сданных экзаменах
наличие хотя бы одной двойки среди сданных экзаменов