Программирование >>  Построение запросов sql 

1 ... 61 62 63 [ 64 ] 65 66 67 ... 101


ABONENT FIO

OLD TEL

NEW TEL

ДЕНИСОВА Е.К.

680305

570305

ЛУКАТИНА РМ

254417

144417

МАРКОВА В.П.

683301

573301

СТАРОДУБЦЕВ Е.В.

683014

573014

ШУБИНА Т.П.

257842

147842

Рис. 5.1. Таблица Phone после вставки

Ограничения.

1. В подзапросе нельзя использовать предложение ORDER BY.

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

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

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

Обновление значений, как отдельных строк, так и всей таблицы или представления БД, осуществляется запросом UPDATE. Обновление с помощью запроса UPDATE может быть позиционированным (выполняется только над одной строкой) и поисковым (выполняется над нулевым или большим количеством строк). Позиционированное изменение может появиться только в контексте текущей операции с курсором в модуле на PSQL, в то время как поисковое изменение появляется во всех остальных случаях. Следует отметить, что поисковое изменение может эмулировать позиционированное изменение, если в предложении WHERE задано условие, уникально определяющее строку (например, использующее первичный ключ таблицы). Запрос UPDATE может анализировать информацию из других таблиц БД, используя запрос SELECT (вложенный запрос).

5.2.1. Простой запрос UPDATE

Простой запрос UPDATE имеет следующий формат: UPDATE { базовая таблица представление}

SET столбец1 = {<значение1> NULL} [, столбец2 = {<значение2> NULL} ] ... WHERE <условие поиска> WHERE CURRENT OF имя курсора] RETURNING <список столбцов> [INTO <список переменных>]];,

<значение>::= { столбец константа <выражение> функция}.

Запрос UPDATE содержит предложение SET, в котором указывается на изменение, которое нужно сделать для определенного столбца. Предложение



SET может включать столбцы лишь из обновляемой таблицы, т.е. значение одного или нескольких столбцов модифицируемой таблицы может быть заменено другим значением. В качестве константы в контексте текущего соединения клиента может использоваться переменная USER. Также можно установить для столбца NULL-значение.

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

UPDATE Abonent SET Phone = 982223;.

Чтобы изменить не все строки, а лишь те, которые удовлетворяют определенным условиям, необходимо задать это условие в предложении WHERE запроса UPDATE. Предположим, что абонент Шубина Т.П. (номер лицевого счета равен 080047) вышла замуж и у неё изменилась фамилия на Серова Т. П. Для внесения в таблицу Abonent соответствующих изменений нужно выполнить следующий запрос:

UPDATE Abonent SET Fio = СЕРОВА Т.П. WHERE AccountCD = 080047;.

Таблица Abonent после обновления представлена на рис. 5.2.

ACCOUNTCD

STREETCD

HOUSENO

FLATNO

PHONE

005488

АКСЕНОВ С.А.

556893

115705

МИЩЕНКО Е.В.

769975

015527

КОНЮХОВ В.С.

761699

443690

ТУЛУПОВА М.И.

214833

136159

СВИРИНА З.А.

350003

443069

СТАРОДУБЦЕВ Е.В.

683014

136160

ШМАКОВ С.В.

982222

126112

МАРКОВА В.П.

683301

136169

ДЕНИСОВА Е.К.

680305

080613

ЛУКАШИНА Р.М.

254417

080047

СЕРОВА Т.П.

257842

080270

ТИМОШКИНА Н.Г.

321002

Рис. 5.2. Таблица Abonent после обновления

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

5.2.2. Запрос UPDATE с подзапросом

В UPDATE можно в предложении WHERE использовать вложенные запросы. Также допускается использование вложенного запроса в предложении SET. Запрос UPDATE с подзапросом имеет следующий формат:



UPDATE { базовая таблица представление} SET столбец1 [, столбец2] ... = (<подзапрос>)

WHERE <условие поиска с подзапросом> WHERE CURRENT OF имя курсора RETURNING <список столбцов> [INTO <список переменных>]];.

В предложении SET <подзапрос> представляет собой <скалярный подзапрос>, если указан один столбец для обновления, и <подзапрос столбца>, если указано несколько столбцов. В предложении WHERE <подзапрос> может представлять собой <скалярный подзапрос>, <подзапрос столбца> или <табличный подзапрос> в зависимости от вида условия поиска (синтаксис условия поиска совпадает с описанным ранее при изучении вложенных запросов).

Рассмотрим использование подзапроса в предложении WHERE запроса UPDATE, которое дает возможность отбирать строки для обновления на основе информации из других таблиц. Например, для уменьшения на 10 руб. сумм, начисленных за услуги газоснабжения абонентам, имеющим не более одной заявки на ремонт газового оборудования, нужно выполнить следующий запрос: UPDATE NachislSumma N SET NachislSum = NachislSum - 10 WHERE 2 > (SELECT COUNT (*) FROM Request R WHERE R.AccountCD = N.AccountCD);. Фрагмент таблицы NachislSumma после обновления представлен на рис. 5.3.

NACHISLFACTCD

ACCOUNTCD

GAZSERVICECD

NACHISLSUM

NACHISLMONTH

NACHISLYEAR

080613

46,00

2001

015527

18,32

1998

080613

0,60

1998

015527

28,32

1999

080613

2,60

2000

136159

-1,70

1999

443690

7,80

1998

126112

5,30

2000

080613

2,60

1998

015527

8,32

1998

443690

11,67

1999

080613

12,86

2000

126112

15,30

2001

136159

-1,70

1998

Рис. 5 . 3 . Таблица NachislSumma после уменьшения начисленных сумм



1 ... 61 62 63 [ 64 ] 65 66 67 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика