|
Программирование >> Построение запросов sql
Рис. 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.
Рис. 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.
Рис. 5 . 3 . Таблица NachislSumma после уменьшения начисленных сумм
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |