• Что можно приготовить из кальмаров: быстро и вкусно

    Последнее обновление: 13.07.2017

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

    UPDATE имя_таблицы SET столбец1 = значение1, столбец2 = значение2, ... столбецN = значениеN

    Например, увеличим у всех товаров цену на 5000:

    UPDATE Products SET Price = Price + 5000

    Используем критерий, и изменим название производителя с "Samsung" на "Samsung Inc.":

    UPDATE Products SET Manufacturer = "Samsung Inc." WHERE Manufacturer = "Samsung"

    Более сложный запрос - заменим у поля Manufacturer значение "Apple" на "Apple Inc." в первых 2 строках:

    UPDATE Products SET Manufacturer = "Apple Inc." FROM (SELECT TOP 2 FROM Products WHERE Manufacturer="Apple") AS Selected WHERE Products.Id = Selected.Id

    С помощью подзапроса после ключевого слова FROM производится выборка первых двух строк, в которых Manufacturer="Apple". Для этой выборки будет определен псевдоним Selected. Псевдоним указывается после оператора AS .

    Далее идет условие обновления Products.Id = Selected.Id . То есть фактически мы имеем дело с двумя таблицами - Products и Selected (которая является производной от Products). В Selected находится две первых строки, в которых Manufacturer="Apple". В Products - вообще все строки. И обновление производится только для тех строк, которые есть в выборке Selected. То есть если в таблице Products десятки товаров с производителем Apple, то обновление коснется только двух первых из них.

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

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

    UPDATE таблица SET поле = значение

    Здесь, UPDATE – команда указывающая, что запрос на обновление данных;

    таблица – название таблицы, в которой будет проводиться изменения;

    SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;

    поле – поле таблицы, в которое будет внесено изменение;

    значение – новое значение, которое будет внесено в поле.


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

    UPDATE goods SET price = 0

    В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.

    Изменение одного значения

    Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.

    Имеется таблица:

    Для примера, нужно обновить стоимость товара с известным нам его значением num. Для этого, выполним следующий запрос:

    UPDATE goods SET price = 150 WHERE num = 2

    Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.

    Внесение изменений в несколько строк с условием отбора

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

    Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:

    UPDATE goods SET price = price / 2 WHERE price >= 100

    Условие WHERE здесь содержит правило, по которому будут выбраны только товары с ценой равной или более 100, а те товары, цена у которых ниже 100, затронуты запросом не будут.

    price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.

    В результате выполнения такого запроса получим таблицу с измененными записями:

    Обновление значений в нескольких полях строки

    При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:

    UPDATE goods SET title = "утюг" , price = 300 WHERE num = 2

    Такой запрос каждому соответствующему полю в строке назначит его значение. А условие укажет, в какой именно строке будут выполнены изменения.


    Выше приведены основные виды операций обновления. На их основе формируется запросы для решения большинства задач изменения данных в разработке с применением SQL.

    Платформа SQL Server поддерживает большинство основных компонентов инструкции UPDATE стандарта ANSI, но не поддерживаются ключевые слова ONLY и ARRAY и не поддерживается возможность обновления массивов. В SQL Server функциональность инструкции UPDATE была расширена путем добавления подсказок по таблице при помощи предложения WITH, добавления подсказок по запросу при помощи предложения OPTION, а также введена более надежная обработка переменных. Синтаксис следующий.

    UPDATE {имя_таблицы | имя_представления | набор-строк} )] SET {имя_столбца={DEFAULT | NULL | скалярное_выражение} |

    имя стременной=скалярное_выражение| имя_переменной=имя_столбца=скалярное_выражение} [, …] ]

    WHERE {условия | CURRENT OF имя_курсора) )]

    Синтаксические элементы инструкции UPDATE в SQL Server следующие.

    WITH подсказка

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

    имя_переменной

    Переменные SQL Server должны быть объявлены до использования инструкции UPDATE, в форме DECLARE @переменная. Конструкция SET @переменная=столбец!=выражение! устанавливает для переменной значение, равное окончательному значению обновленного столбца, а конструкция SET @переменная -столбец!, столбец!=выражение устанавливает для переменной значение, равное значению в столбце до выполнения инструкции UPDATE.

    Предоставляет возможность создать для указания обновляемых строк высокоизбирательный критерий на основе соединения. Предложение FROM не нужно, если при указании строк используется только одна таблица - целевая. Функции для работы с наборами строк (rowset functions) в SQL Server описываются в разделе «Инструкция SELECT».

    AS псевдоним

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

    Предоставляется возможность использовать стандартный синтаксис ANSI для соединений таблиц совместно с предложением FROM.

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

    OPTION подсказка

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

    Главное расширение, которое вводит Microsoft SQL Server в инструкцию UPDATE стандарта ANSI, - это предложение FROM. Предложение FROM позволяет использовать предложение JOIN, что значительно упрощает обновление строк целевой таблицы путем связывания строк, указанных в предложении FROM, со строками, обновляемыми компонентом UPDATE имя_таблицы. В следующем примере показано обновление результата соединения таблиц с использованием стиля ANSI и довольно громоздкого подзапроса, а потом - обновление с использованием предложения FROM SQL Server. Оба запроса выполняют одно и то же действие, но совершенно по-разному.

    Выполнение такого обновления при использовании стиля Transact-SQL сводится к соединению двух таблиц - authors и titleauthor - с таблицей titles. Для выполнения той же самой операции с использованием кода ANSI нужно сначала найти значение au_id в таблице authors и передать его в таблицу titleauthor, а затем нужно найти значение title_id и передать его в основную инструкцию UPDATE.

    В следующем примере обновляется столбец state для первых десяти записей таблицы authors.

    UPDATE authors SET state="ZZ" FROM (SELECT TOP 10 * FROM authors ORDER BY au_lname) AS t1 WHERE authors.au_id=t1.au_.id

    В этом примере важно обратить внимание на то, что, как правило, довольно сложно обновить первые п записей при помощи инструкции UPDATE, если нет какой-нибудь явной последовательности строк, которую можно определить при помощи предложения WHERE. Однако вложенный табличный подзапрос в предложении FROM, использующий ключевое слово ТОР для получения первых 10 записей, помогает не тратить силы на дополнительное программирование, которое иначе было бы необходимо.

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

    UPDATE SET { = { | NULL | DEFAULT},...} [ {WHERE }];

    С помощью одного оператора могут быть заданы значения для любого количества столбцов. Однако в одном и том же операторе UPDATE можно вносить изменения в каждый столбец указанной таблицы только один раз. При отсутствии предложения WHERE будут обновлены все строки таблицы.

    Если столбец допускает NULL-значение, то его можно указать в явном виде. Кроме того, можно заменить имеющееся значение на значение по умолчанию (DEFAULT) для данного столбца.

    Примеры оператора SQL UPDATE

    Имеется следующая таблица Planets:

    Пример 1. С помощью оператора SQL UPDATE изменим название планеты Neptune на Pluton :

    UPDATE Planets SET PlanetName = "Pluton" WHERE ID = 3;

    В этом примере условие оператора SQL WHERE является обязательным, так как без него все поля столбца PlanetName во всей таблице изменились бы на Pluton. В данном случае, нам приходит на помощь столбец ID, т.к. он является Первичным ключом, позволяющим однозначно идентифицировать запись.

    Пример 2. Увеличим зарплату всех учителей в 2 раза, а премию - в 10 раз.

    Команда UPDATE — производит изменения в уже существующей записи или во множестве записей в таблице SQL . Изменяет существующие значения в таблице или в основной таблице представления.

    Команда UPDATE Синтаксис команды

    Синтаксис команды UPDATE

    Команда UPDATE. Основные ключевые слова и параметры команды UPDATE

    • schema - идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
    • table view - имя таблицы SQL , в которой изменяются данные; если определяется представление, данные изменяются в основной таблице SQL представления
    • subquery_1 - подзапрос , который сервер обрабатывает тем же самым способом как представление
    • с olumn - столбец таблицы SQL или представления SQL , значение которого изменяется; если столбец таблицы из предложения SET опускается, значение столбца остается неизменяемым
    • expr - ; это выражение может содержать главные переменные и необязательные индикаторные переменные
    • subquery _2 - новое значение, назначаемое соответствующему столбцу
    • subquery _3 - новое значение, назначаемое соответствующему столбцу

    WHERE - определяет диапазон изменяемых строк теми, для которых определенное условие является TRUE ; если опускается эта фраза, модифицируются все строки в таблице или представлении.
    При выдаче утверждения включается любой UPDATE-триггер , определенный на таблице.
    Подзапросы . Если предложение SET содержит подзапрос , он возвращает точно одну строку для каждой модифицируемой строки. Каждое значение в результате подзапроса назначается соответствующим столбцам списка в круглых скобках. Если подзапрос не возвращает никакие строки, столбцу назначается NULL . Подзапросы могут выбирать данные из модифицируемой таблицы. Предложение SET может совмещать выражения и подзапросы .

    Команда UPDATE Пример 1
    Изменение для всех покупателей рейтинга на значение, равное 200:

    Customers SET rating = 200;

    Команда UPDATE Пример 2
    Замена значения столбца во всех строках таблицы, как правило, используется редко. Поэтому в команде , как и в команде DELETE , можно использовать предикат. Для выполнения указанной замены значений столбца rating, для всех покупателей, которые обслуживаются продавцом Giovanni (snum = 1003), следует ввести:

    Customers SET rating = 200 WHERE snum = 1001;

    Команда SQL UPDATE Пример 3
    В предложении SET можно указать любое количество значений для столбцов, разделенных запятыми:

    Emp SET job = ‘MANAGER’, sal = sal + 1000, deptno = 20 WHERE ename = ‘JONES’;

    Команда UPDATE Пример 4
    В предложении SET можно указать значение NULL без использования какого-либо специального синтаксиса (например, такого как IS NULL). Таким образом, если нужно установить все рейтинги покупателей из Лондона (city = ‘London’) равными NULL-значению, необходимо ввести:

    Customers SET rating = NULL WHERE city = ‘London’;

    Команда UPDATE Пример 5
    Поясняет использование следующих синтаксических конструкций команды :

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

    Emp a SET deptno =
    (SELECT deptno FROM dept WHERE loc = ‘BOSTON’), (sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm) FROM emp b WHERE a.deptno = b.deptno) WHERE deptno IN (SELECT deptno FROM dept WHERE loc = ‘DALLAS’ OR loc = ‘DETROIT’);

    Вышеупомянутое утверждение выполняет следующие операции:

    • Модифицирует только тех служащих, кто работают в Dallas или Detroit
    • Устанавливает значение колонки deptno для служащих из Бостона
    • Устанавливает жалованье каждого служащего в 1.1 раз больше среднего жалованья всего отдела
    • Устанавливает комиссионные каждого служащего в 1.5 раза больше средних комиссионных всего отдела