Базы данных - модели, разработка, реализация



         

Операторы манипулирования данными - часть 4


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

  • DELETE FROM R2
  • WHERE R2.ФИО IN
  • (SELECT R1.ФИО
  • FROM Rl
  • WHERE Оценка = 2 OR Оценка IS NULL
  • GROOP BY R1.ФИО
  • HAVING COUNT(*) >= 2
  • Однако при выполнении операции DELETE, включающей сложный подзапрос, в подзапросе нельзя упоминать таблицу, из которой удаляются строки, поэтому СУБД отвергнет такой красивый подзапрос, который попытается удалить всех не только сдававших, но и несдававших студентов, которые имеют более двух задолженностей.

  • DELETE FROM R2
  • WHERE R2 ФИО IN
  • 97

  • (SELECT R1 ФИО
  • FROM (R2 NATURAL INNER JOIN R3 ) LEFT JOIN Rl USING ( ФИО. Дисциплина)
  • WHERE Оценка = 2 OR Оценка IS NULL
  • GROOP BY R1.ФИО
  • HAVING COUNT(*) >= 2
  • Все операции манипулирования данными связаны с понятием целостности базы данных, которое будет рассматриваться далее в главе 9. В настоящий момент мне бы хотелось отметить только то, что операции манипулирования данными не всегда выполнимы, даже если синтаксически они написаны правильно. Действительно, если мы бы захотели удалить какую-нибудь группу из отношения R3, то СУБД не позволила бы нам это сделать, так как в отношениях R1 и R2 есть строки, связанные с удаляемой строкой в отношении R3. Почему так делается, мы узнаем позднее, а пока просто примем к сведению, что не все операторы манипулирования выполнимы.

    Операция обновления данных UPDATE требуется тогда, когда происходят изменения во внешнем мире и их надо адекватно отразить в базе данных, так как надо всегда помнить, что база данных отражает некоторую предметную область. Например, в нашем учебном заведении произошло счастливое событие, которое связано с тем, что госпожа Степанова К. Е. пересдала экзамен по дисциплине "Базы данных" с двойки сразу на четверку. В этом случае нам надо срочно выполнить соответствующую корректировку таблицы R1. Операция обновления имеет следующий формат:

  • UPDATE имя_таблицы
  • SET имя_столбца = новое_значение



  • Содержание  Назад  Вперед