Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Изменение баз данных

Для изменения содержимого таблиц БД применяются три оператора SQL

· INSERT – добавление новых строк;

· DELETE – удаление строк;

· UPDATE – корректировка или обновление строк.

В реляционной СУБД обычно существует три способа добавления новых строк в таблицы БД:

· однострочный оператор INSERT позволяет добавить одну новую строку;

· многострочный оператор INSERT обеспечивает извлечение строк из одной части базы данных и добавление их в другую таблицу;

· утилиты пакетной загрузки позволяют добавлять в таблицу данные из внешнего файла и обычно используются для первоначального заполнения БД.

Однострочный оператор INSERT имеет формат

INSERT INTO <таблица> [(<список полей>)] VALUES (<список выражений>)

Если список полей отсутствует, то имеются в виду все поля таблицы. Значение каждого выражения заносится в соответствующее поле. Отсутствующим в списке полям присваивается значение NULL. Это значение может задаваться и явно в списке выражений. Пример однострочного оператора INSERT

INSERT INTO Anketa (Name, Age, Adress)

VALUES (‘ Иванов’, 20, ‘Пушкина, 41-20’)

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

В многострочном операторе INSERT источником новых строк служит запрос на чтение SELECT, содержащийся внутри оператора, например

INSERT INTO Anketa (Name, Age, Adress)

SELECT Fio, Vozrast, Adr FROM Cartoteka WHERE Vozrast < 60

В результате в таблицу Anketa будет добавлено множество строк из таблицы Cartoteka.

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

Оператор DELETE в простейшем случае имеет вид

DELETE FROM <таблица> WHERE <условие>

и удаляет из таблицы все строки, для которых выполняется заданное условие. Например, удаление информации обо всех несовершеннолетних, а также о лицах неопределенного возраста из таблицы Anketa можно выполнить оператором

DELETE FROM Anketa WHERE Age < 18 OR Age IS NULL

Если условие отсутствует, то удаляются все записи. Таблица становится пустой, но из БД не удаляется.

В более сложном варианте оператор DELETE содержит вложенный подзапрос SELECT. Пусть, например, имеются две таблицы с данными об успеваемости студентов A (Nom, Name, Adress) и B (Nom, Subj, Mark). Для удаления всех оценок студента Иванова (точнее, всех студентов с фамилией Иванов) можно использовать оператор

DELETE FROM B WHERE

Nom IN (SELECT Nom FROM A WHERE Name = ‘Иванов’)

Вложенный запрос может иметь несколько уровней.

Оператор DELETE удаляет данные только из одной таблицы. Если бы нам потребовалось удалить данные о студенте Иванове из обеих таблиц, то запрос

DELETE FROM A, B WHERE A.Nom = B.Nom AND A.Name = ‘Иванов’

является неправильным. В этом случае нужно сначала удалить все оценки Иванова указанным выше способом, а уже потом удалить информацию об Иванове из таблицы A оператором

DELETE FROM A WHERE Name = ‘Иванов’

Оператор обновления данных UPDATE также работает с одной таблицей и имеет две формы. В первом случае строки для обновления определяются простым условием WHERE. Обновление задается последовательностью операторов присваивания. Пусть, например, требуется в таблице A перевести данные о росте и весе англичан из футов и фунтов в метры и килограммы соответственно. Это можно выполнить оператором

UPDATE A

SET Height = Height * 0.3, Weight = Weight * 0.4

WHERE Country = ‘England’

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

Оператор UPDATE с вложенным подзапросом содержит оператор SELECT в предложении WHERE. Возвращаясь к примеру БД по поставщикам и поставкам, предположим, что принято решение переселить в Москву тех поставщиков, которые имеют более 100 поставок. Это изменение в таблице S можно выполнить оператором

UPDATE A

SET Scity = ‘Москва’

WHERE S# IN

(SELECT S# FROM SP GROUP BY S# HAVING COUNT(*) > 100)

В операторах DELETE и UPDATE допускается указывать одну и ту же таблицу в основной части оператора и подзапросе. В этом случае в условии используется содержимое таблицы до ее изменения. Это предупреждает ссылки на таблицу, у которой может быть модифицирована часть строк.

 

<== предыдущая лекция | следующая лекция ==>
Вложенные запросы на чтение | Целостность данных
Поделиться с друзьями:


Дата добавления: 2014-01-07; Просмотров: 376; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.014 сек.