Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
79
Добавлен:
14.01.2018
Размер:
8.23 Mб
Скачать

Удаление существующих данных

Наименьшей единицей информации, которую можно удалить из реляционной БД, является строка. Удаление существующей строки из БД происходит, когда объект, представляемый этой строкой, перестает существовать в рассматриваемой предметной области. На примере учебной БД это выглядит следующим образом:

1) если житель лишается одного из своих источников дохода, то необходимо удалить строку из таблицы HAVE_D, содержащую номер жителя и идентификатор источника дохода, которого лишился житель;

2) если в квартире отключается телефон, то из таблицы TPHONE должна быть удалена строка, соответствующая этому телефону;

3) если квартира ликвидируется, необходимо удалить соответствующую строку в таблице FLAT; в случае, когда жители этой квартиры уезжают из Зеленограда, то их строки в таблице PERSON также должны быть удалены вместе с соответствующими строками в таблице HAVE_D; если жители переезжают в другую квартиру Зеленограда, то для них необходимо обновить значения в столбце ADR таблицы PERSON.

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

В предложении FROM указывается таблица, содержащая удаляемые строки. В предложении WHERE указывается условие, которому должны соответствовать удаляемые строки.

Предположим, что необходимо зафиксировать в БД отключение телефона, установленного в квартире по адресу: Зеленоград, 1001-45:

DELETE FROM TPHONE

WHERE ADR=’Зеленоград, 1001-45’

Можно удалить несколько строк одним оператором DELETE, например, когда все жители одной квартиры уезжают из Зеленограда, то этот факт отражается в таблице PERSON удалением строк, соответствующих уезжающим жителям:

DELETE FROM PERSON WHERE ADR=’Зеленоград, 1001-45’

Если предложение WHERE отсутствует в записи оператора DELETE, то такой оператор удаляет из таблицы все строки. Например, оператор DELETE FROM PERSON «опустошит» таблицу PERSON, удалив из нее все строки.

В предложении WHERE условие поиска может содержать вложенный запрос. Например, прежде чем удалять из таблицы PERSON информацию об уезжающих из города жителях некоторой квартиры, необходимо из таблицы HAVE_D удалить все строки, связанные с этими жителями и определяющие источники доходов этих жителей. Такое удаление обеспечивает следующий оператор:

DELETE FROM HAVE_D WHERE NOM IN

(SELECT NOM FROM PERSON WHERE ADR=’Зеленоград, 1001-45’)

Обновление существующих данных

Наименьшей единицей информации, которую можно обновить в реляционной БД является значение одного столбца в одной строке. Обновлять информацию требуется, когда изменяются значения атрибутов у объектов рассматриваемой предметной области. На примере учебной БД это выглядит следующим образом:

1) если в квартире изменяется номер установленного телефона, то соответствующей строке таблицы TPHONE должно быть обновлено значение столбца NTEL;

2) если жители одной квартиры переезжают в другую квартиру, то столбец ADR таблицы PERSON для этих жителей необходимо обновить, чтобы учесть адрес их нового места жительства.

Для обновления значения одного или нескольких столбцов в выбранных строках одной таблицы предназначен оператор UPDATE (рис. 3).

UPDATE имя_таблицы SET имя_столбца = выражение

,

WHERE условие_поиска

Рис. 3. Синтаксическая диаграмма оператора UPDATE

В операторе указывается целевая таблица, которая должна быть модифицирована. Предложение WHERE отбирает строки таблицы, подлежащие обновлению. В предложении SET указывается, какие столбцы в выбранных строках таблицы должны быть обновлены, и для них задаются новые значения.

Следующий оператор UPDATE изменяет номер и категорию телефона, установленного в квартире с заданным адресом:

UPDATE TPHONE SET NTEL=’111-0000’, TCATEGORY=’Д’

WHERE ADR=’Зеленоград. 1001-45’

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

UPDATE PERSON SET ADR=’Зеленоград, 1801-12’

WHERE ADR=’Зеленоград, 1001-45’

Этот оператор выполняется следующим образом: все строки таблицы PERSON по очереди проверяются на соответствие условию поиска. Строки, для которых условие поиска имеет значение TRUE, обновляются, а строки, для которых условие поиска имеет значение FALSE или NULL, не обновляются.

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

Значение выражения вычисляется на основе значений строки, которая в данный момент обновляется в целевой таблице. Выражение не может включать в себя какие-либо агрегатные функции или запросы.

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

UPDATE FLAT SET NROOMS=5, SKV=NROOMS+1 WHERE NROOMS=3

Для строк таблицы FLAT, в которых столбец NROOMS содержит значение, равное 3, оператор UPDATE запишет в столбец NROOMS значение 5, а в столбец SKV – значение 4 (3+1). Таким образом, порядок операций присваивания в предложении SET не влияет на результат.

Если предложение WHERE отсутствует в записи оператора UPDATE, то обновляются все строки целевой таблицы, например:

UPDATE PERSON SET SUMD=SUMD/1000

Предложение WHERE может содержать вложенный запрос, если необходимо отбирать строки на обновление, опираясь на информацию из других таблиц. Например, можно увеличить общий доход жителей, имеющих не более одного источника дохода; выплатив единовременно по 500 руб. каждому из них:

UPDATE PERSON SET SUMD=SUMD+500 WHERE 1 >= (SELECT COUNT (*) FROM HAVE_D WHERE PERSON.NOM = HAVE_D.NOM)

  1. Задание и изменение структуры БД: операторы CREATE TABLE, DROP TABLE, ALTER TABLE.

Соседние файлы в папке БД - билеты - 2017