Зміст
У цій статті ми розглянемо оператор SQL UPDATE і покажемо, як його застосовувати. Також подивимося на деякі відмінності у синтаксисі цього оператора в різних версіях SQL різних систем керування реляційними базами даних (СКРБД).
Більше про роботу з SQL для аналітики даних можна дізнатися на курсі Junior Data Analyst від robot_dreams.
Оператор UPDATE — один з основних операторів мови керування даними DMLSELECT, DELETE та INSERT.
Оператор UPDATE використовується для зміни рядків у таблиці бази даних. За допомогою цього оператора можна змінювати дані в одному або кількох стовпцях і обирати для цього:
Оператор може бути корисним для таких бізнес-завдань, як-от оновлення статусу замовлення, змінення етапу доставки чи адреси клієнта, збільшення заробітної плати працівника тощо.
Базовий синтаксис оператора UPDATE з використанням оператора умови WHERE такий:
UPDATE таблиця SET стовпець1 = значення1, стовпець2 = значення2, ... стовпецьN = значенняN [WHERE умова];
Щоб використовувати оператор UPDATE, потрібно вказати для нього такі параметри:
таблиця — ім’я таблиці, у якій потрібно змінити дані;стовпець1… стовпецьN — імена стовпців, у яких потрібно змінити значення;значення1… значенняN — значення, які слід вставити замість попередніх значень у вказані стовпці.Також після WHERE можна записати умову для вибору рядків. Якщо WHERE не використовувати, буде оновлено усі рядки таблиці.
Розробники СКБД створюють власні діалекти SQL, які розширюють стандартний SQL і дещо відрізняються як від нього, так й один від одного.
Наприклад, щоб обмежити кількість рядків, які потрібно змінити, певним числом або відсотком, в T-SQL у операторі UPDATE використовується оператор TOP, в MySQL — LIMIT, в Oracle та PostgreSQL — FETCH (див. Приклад 4 у кінці статті).
Відмінностей в діалектах SQL насправді набагато більше. Щоб вивчити їх досконало, приходьте на курс Junior Data Analyst від robot_dreams. Новий набір стартує вже 27 березня.
Розглянемо синтаксис UPDATE детальніше в таких діалектах SQL:
Transact-SQL (T-SQL) є пропрієтарним
Нижче наведено синтаксис UPDATE, який використовується в T-SQL:
-- Syntax for SQL Server and Azure SQL Database
[ WITH <common_table_expression> [...n] ]
UPDATE
[ TOP ( expression ) [ PERCENT ] ]
{ { table_alias | <object> | rowset_function_limited
[ WITH ( <Table_Hint_Limited> [ ...n ] ) ]
}
| @table_variable
}
SET
{ column_name = { expression | DEFAULT | NULL }
| { udt_column_name.{ { property_name = expression
| field_name = expression }
| method_name ( argument [ ,...n ] )
}
}
| column_name { .WRITE ( expression , @Offset , @Length ) }
| @variable = expression
| @variable = column = expression
| column_name { += | -= | *= | /= | %= | &= | ^= | |= } expression
| @variable { += | -= | *= | /= | %= | &= | ^= | |= } expression
| @variable = column { += | -= | *= | /= | %= | &= | ^= | |= } expression
} [ ,...n ]
[ <OUTPUT Clause> ]
[ FROM{ <table_source> } [ ,...n ] ]
[ WHERE { <search_condition>
| { [ CURRENT OF
{ { [ GLOBAL ] cursor_name }
| cursor_variable_name
}
]
}
}
]
[ OPTION ( <query_hint> [ ,...n ] ) ]
[ ; ]
<object> ::=
{
[ server_name . database_name . schema_name .
| database_name .[ schema_name ] .
| schema_name .
]
table_or_view_name} UPDATE, який використовується в MySQL. Синтаксис для однієї таблиці:
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET assignment_list
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
value:
{expr | DEFAULT}
assignment:
col_name = value
assignment_list:
assignment [, assignment] Синтаксис для кількох таблиць:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET assignment_list
[WHERE where_condition] UPDATE, який використовується в PostgreSQL:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
SET { column_name = { expression | DEFAULT } |
(column_name [, ...]) = [ROW] ({expression | DEFAULT} [, ...]) |
( column_name [, ...] ) = ( sub-SELECT )
} [, ...]
[ FROM from_item [, ...] ]
[ WHERE condition | WHERE CURRENT OF cursor_name]
[RETURNING* | output_expression [ [ AS ] output_name ] [, ...] ] UPDATE (схему того, як працюють запити), який використовується в Oracle Database:
Візьмемо за приклад таблицю з рейтингом СКБД з оцінки PYPLdb_ranking:
| Rank | RDBMS | DBShare | Trend |
| 1 | Oracle | 26.79 | -3.7 |
| 2 | MySQL | 19.24 | 2.7 |
| 3 | SQL Server | 12.21 | -1.3 |
| 4 | PostgreSQL | 6.48 | 1.6 |
| 5 | Microsoft Access | 6.42 | -1.7 |
Для роботи з прикладами можна використовувати ресурс SQL Fiddle. На ньому представлено всі СКРБД, які зазначено вище. Обрати потрібну СКРБД можна в випадному списку праворуч від логотипу SQL Fiddle.
Для створення таблиці та наповнення її вихідними значеннями використовуємо такий код:
CREATE TABLE db_ranking ( Rank int, RDBMS varchar(255), DBShare float, Trend float ); INSERT INTO db_ranking VALUES (1, 'Oracle', 26.79, -3.7); INSERT INTO db_ranking VALUES (2, 'MySQL', 19.24, 2.7); INSERT INTO db_ranking VALUES (3, 'SQL Server', 12.21, -1.3); INSERT INTO db_ranking VALUES (4, 'PostgreSQL', 6.48, 1.6); INSERT INTO db_ranking VALUES (5, 'Microsoft Access', 6.42, -1.7);
Введіть цей запит у лівій панелі (Schema Panel) і натисніть кнопку Build Schema.
У правій панелі введіть наступний код для зміни запису та його подальшого перегляду:
UPDATE db_ranking SET DBShare = 30.49 WHERE RDBMS = 'Oracle'; SELECT * FROM db_ranking WHERE RDBMS = 'Oracle';
Результат виконання запиту:
| Rank | RDBMS | DBShare | Trend |
| 1 | Oracle | 30.49 | -3.7 |
Це завдання можна виконати в два способи — (1) з використанням оператора AND або (2) з використанням оператора OR — залежно від того, як ми розуміємо умови і який результат хочемо отримати.
Щоб використовувати оператор AND для цієї задачі, спочатку ми обнулимо значення Trend для всіх рядків таблиці, де це значення менше за нуль, а значення DBShare більше за 10. Потім переглянемо всі рядки таблиці.
Зверніть увагу: навіть якщо ви змінюєте запит у правій панелі SQL Fiddle, запит на створення таблиці буде виконано знову, тобто, дії буде виконано над вихідною таблицею.
UPDATE db_ranking SET DBShare = 30.49 WHERE RDBMS = 'Oracle'; SELECT * FROM db_ranking WHERE RDBMS = 'Oracle';
Результат:
| Rank | RDBMS | DBShare | Trend |
| 1 | Oracle | 26.79 | 0 |
| 2 | MySQL | 19.24 | 2.7 |
| 3 | SQL Server | 12.21 | 0 |
| 4 | PostgreSQL | 6.48 | 1.6 |
| 5 | Microsoft Access | 6.42 | -1.7 |
Якщо ми хочемо використовувати замість AND оператор OR, нам потрібно відібрати для зміни ті рядки вихідної таблиці, в яких Trend менше за нуль, або DBShare більше за 10. Запит матиме такий вигляд:
UPDATE db_ranking SET Trend = 0 WHERE Trend < 0 AND DBShare > 10; SELECT * FROM db_ranking;
Результат:
| Rank | RDBMS | DBShare | Trend |
| 1 | Oracle | 26.79 | 0 |
| 2 | MySQL | 19.24 | 0 |
| 3 | SQL Server | 12.21 | 0 |
| 4 | PostgreSQL | 6.48 | 1.6 |
| 5 | Microsoft Access | 6.42 | 0 |
Дізнайтеся, який оператор SQL підходить краще за все для виконання вашого таску — приходьте на курс з аналітики даних від robot_dreams.
Пишемо простий запит на змінення даних, але, щоб його було застосовано до всіх рядків таблиці, не використовуємо оператор WHERE:
UPDATE db_ranking SET DBShare = 0; Trend = 0; SELECT * FROM db_ranking;
Результат:
| Rank | RDBMS | DBShare | Trend |
| 1 | Oracle | 0 | 0 |
| 2 | MySQL | 0 | 0 |
| 3 | SQL Server | 0 | 0 |
| 4 | PostgreSQL | 0 | 0 |
| 5 | Microsoft Access | 0 | 0 |
Для роботи з T-SQL виберіть MS SQL Server у списку праворуч від логотипу.
Запит TOP(n) оператора UPDATE дозволяє вибрати з таблиці n рядків у довільному порядку. Приклад:
UPDATE TOP(10) employees SET vacation_hours = vac ation_hours * 1.25;
Також можна відібрати певний відсоток рядків. Це робиться за допомогою аргументу PERCENT:
UPDATE TOP(10) PERCENT employees SET vacation_hours = vacation_hours * 1.25;
До нашої таблиці можна надіслати, наприклад, такий запит на обнулення рейтингу у трьох рядках у довільному порядку:
UPDATE TOP(3) db_ranking SET Rank = 0;
Ось що можемо отримати в результаті запиту:
У MySQL для обмеження кількості рядків використовується оператор LIMIT. Код для MySQL матиме такий вигляд (у SQL Fiddle його необхідно ввести в лівій панелі після операторів INSERT):
UPDATE db_ranking SET Rank = 0LIMIT 3;
У PostgreSQL і Oracle Database використовується оператор FETCH із запитом SELECT:
UPDATE db_ranking
SET Rank = 0
WHERE RDBMS IN (SELECT RDBMS
FROM db_ranking
FETCH FIRST 3 ROWS ONLY); Ми розглянули базові приклади застосування оператора SQL UPDATE.
Оператор UPDATE дозволяє змінювати значення в комірках таблиці з зазначенням стовпців та рядків, у які буде внесено зміни. Базовий синтаксис цього оператора в різних діалектах SQL загалом схожий, але є й відмінності, характерні для окремих СКРБД.
Детальну інформацію про особливості використання оператора UPDATE у розширеннях SQL, які згадано в цій статті, ви можете знайти в посібниках із Transact-SQL, MySQL, PostgreSQL та Oracle Database.
UPDATE:
А якщо хочете вивчити SQL глибше і під наглядом досвідчених менторів, завітайте до robot_dreams. На їхньому курсі ви зможете опанувати професію Junior Data Analyst за 16 тижнів.
Компанія OpenAI розширює доступ до своєї найпотужнішою моделі кодування GPT-5.1-Codex-Max. Ця LLM, орієнтована на розробників,…
Компанія Google оголосила про запуск моделі штучного інтелекту Gemini 3 Deep Think. Вона використовує ще…
Meta планує різке скорочення свого підрозділу Reality Labs, який займається розробкою так званого Метавсесвіту (Metaverse).…
Розробникам, які використовують бібліотеку React 19 для створення інтерфейсів додатків, рекомендується негайно оновити її до…
Творець Linux, знаменитий фінський розробник Лінус Торвальдс, різко висловився щодо практики оцінки ефективності програмістів, яку…
Компанія Amazon оголосила про безкоштовну роздачу річних платних ліцензій на користування інструментом кодування Kiro Pro+,…