UPDATE в SQL

В этой статье вы научитесь обновлять записи в таблице БД с помощью SQL.

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

Синтаксис

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

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

имя_столбца1, имя_столбца2,... — это имена столбцов или полей таблицы базы данных, значения которых вы хотите обновить. Вы также можете объединить несколько условий с помощью операторов AND или OR, которые мы изучали в предыдущих статьях.

Примечание. Пункт WHERE в операторе UPDATE определяет, какая запись или записи должны быть обновлены. Если опустить предложение WHERE, обновлены будут все записи.

Пример 1: обновление одного столбца

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

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

Следующий SQL-запрос обновит поле emp_name (имя сотрудника) таблицы employees и установит новое значение, где emp_id (номер сотрудника), равен 3.

UPDATE employees SET emp_name = 'Sarah Ann Connor'
WHERE emp_id = 3;

Результат будет выглядеть так:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Ann Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank     | 2008-06-24 |   5600 |    NULL |
+--------+------------------+------------+--------+---------+

Пример 2: обновление нескольких столбцов

Аналогичным образом можно обновить несколько столбцов, используя список пар имен и значений столбцов, разделенных запятыми. Давайте обновим поле salary (зарплата) и dept_id (номер департамента) существующего сотрудника в таблице employees, чей emp_id (номер сотрудника) равен 5.

UPDATE employees
SET salary = 6000, dept_id = 2
WHERE emp_id = 5;

Результат:

+--------+------------------+------------+--------+---------+
| emp_id | emp_name         | hire_date  | salary | dept_id |
+--------+------------------+------------+--------+---------+
|      1 | Ethan Hunt       | 2001-05-01 |   5000 |       1 |
|      2 | Tony Montana     | 2002-07-15 |   6500 |       5 |
|      3 | Sarah Ann Connor | 2005-10-18 |   8000 |       3 |
|      4 | Rick Deckard     | 2007-01-03 |   7200 |       4 |
|      5 | Martin Blank     | 2008-06-24 |   6000 |       2 |
+--------+------------------+------------+--------+---------+
Проверьте себя
1. Что произойдёт, если выполнить UPDATE employees SET salary = 10000 без условия WHERE?
AОбновятся все строки таблицы — зарплата станет 10000 у всех сотрудников
BЗапрос вернёт ошибку — WHERE обязателен в UPDATE
CОбновится только первая строка таблицы
DИзменится только последняя добавленная строка
2. Как обновить сразу два столбца — salary и dept_id — для сотрудника с emp_id = 5?
AUPDATE employees SET salary = 6000, dept_id = 2 WHERE emp_id = 5;
BUPDATE employees SET salary = 6000 AND dept_id = 2 WHERE emp_id = 5;
CUPDATE employees (salary, dept_id) VALUES (6000, 2) WHERE emp_id = 5;
DUPDATE employees SET salary = 6000; UPDATE employees SET dept_id = 2 WHERE emp_id = 5;
3. Какой запрос правильно изменит имя сотрудника с emp_id = 3 на 'Sarah Ann Connor'?
AUPDATE employees SET emp_name = 'Sarah Ann Connor';
BUPDATE employees WHERE emp_id = 3 SET emp_name = 'Sarah Ann Connor';
CUPDATE employees SET emp_name = 'Sarah Ann Connor' WHERE emp_id = 3;
DCHANGE employees SET emp_name = 'Sarah Ann Connor' WHERE emp_id = 3;
4. Можно ли в одном запросе UPDATE использовать условия AND или OR в секции WHERE?
AНет — WHERE в UPDATE поддерживает только одно условие
BТолько AND, но не OR
CТолько OR, но не AND
DДа — можно комбинировать несколько условий с AND и OR