Что можно приготовить из кальмаров: быстро и вкусно
Последнее обновление: 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 раза больше средних комиссионных всего отдела