UPDATE statement in SQL

UPDATE, is the DML command that allows you to update database records. In other words, UPDATE allows you to modify the values of the table columns respecting the corresponding data type.

The syntax is as it follows:

UPDATE tableName SET columName = newValue WHERE conditions

As with the DELETE statement, it is very important to take into account the WHERE clause to prevent changes in the table from being propagated to all the records.

To better understand how it works, we are going to perform some examples of UPDATE on the Customers and Employees tables.

Reviewing the records of the Customers table, we notice that some of them were inserted with spelling errors that need to be corrected:

SELECT *
FROM Customers
WHERE customerId = 1;
customerId name lastName address bankAccount
1 Janice Haines 4822 Radio Park Drive 111222333

The last name Haynes was written with an i instead of a y:

UPDATE Customers
SET lastName = 'Haynes'
WHERE customerId = 1;

We run the query again and check that the record has been successfully updated:

customerId name lastName address bankAccount
1 Janice Haynes 4822 Radio Park Drive 111222333

Now we will see another example:

SELECT *
FROM Customers
WHERE customerId = 2;
customerId name lastName address bankAccount
2 Mavin Petitt 2336 cottonwood Lane 123456789

The last name Pettitt is missing a t, and the street name should start with a capital letter.

UPDATE Customers
SET lastName = 'Pettitt',
    [address] = '2336 Cottonwood Lane'
WHERE [name] = 'Mavin';

We run the query again and check that the record has been successfully updated:

customerId name lastName address bankAccount
2 Mavin Pettitt 2336 Cottonwood Lane 123456789

In this case we have filtered by name, because in our Customers table there is only one Mavin. However, we want to stress that this would be bad practice, since if there was more than one Mavin, the change would affect all records. For this reason, it is essential to always filter by unique fields or, failing that, limit the required record with more conditions in the WHERE clause.

Let’s move on to the following example:

SELECT *
FROM Orders
WHERE orderId = 1;
orderId product productDescription price orderDate productQuantity totalPrice customerId
1 Xiami Mi 11 Smartphone 286,95 2022-07-09 15 4304,25 3

The Xiaomi product is missing the O and we also want to change the orderDate to 2022-07-10:

UPDATE Orders
SET product = 'Xiaomi Mi 11',
    orderDate = '2022-07-10'
WHERE orderId = 1;
orderId product productDescription price orderDate productQuantity totalPrice customerId
1 Xiaomi Mi 11 Smartphone 286,95 2022-07-10 15 4304,25 3

To delete the value of a column, just do an UPDATE and set the field to NULL or '' depending on its constraints.

UPDATE Orders
SET productDescription = NULL
WHERE orderId = 2;
orderId product productDescription price orderDate productQuantity totalPrice customerId
2 Play Station 5 NULL 549,95 2022-07-18 4 2199,8 2

It is also possible to use UPDATE in tables joined by some JOIN clause:

UPDATE C SET bankAccount= 111111111
FROM Customers C
INNER JOIN Orders O
ON C.customerId = O.customerId
WHERE O.price > 45
AND C.customerId = 4;
customerId name lastName address bankaccount
4 Helen Ward 711 Hershell Hollow Road 111111111

In this case, since there is a product in the Orders table with a price greater than 45 euros for the client with customerId = 4, the customers’s account has been correctly updated to the new value.

También es posible recuperar el valor de una SELECT para actualizar un campo:

UPDATE Orders
SET productDescription = (SELECT productDescription
						  FROM Orders
						  WHERE orderId = 1)
WHERE orderId = 2;
orderId product productDescription price orderDate productQuantity totalPrice customerId
2 Play Station 5 Smarthphone 549,95 2022-07-18 4 2199,8 2