SQL (pronunciado Seequel) significa lenguaje de consulta estructurado (Structured Query Language). Es un lenguaje de consulta fuertemente tipado (los tipos se comprueban antes del tiempo de ejecución) y estático que apareció por primera vez en 1974 (¡Woah, 46 años!), pero no se publicó inicialmente hasta 1986.

Podrías pensar que una herramienta tan "vieja" tienes sus mejores días detrás de ella, pero estarías lejos de estar en lo cierto. En 2019, a través de la encuesta de Scale Grid DeveloperWeek, SQL fue utilizado por el 60.5% de los encuestados, mientras que NoSQL fue utilizado por solo el 39.5% de los encuestados.

Para ser claros, la categoría SQL se dividió en varias subcategorías que incluían MySQL, PostgreSQL, SQL Server, etc., mientras que la categoría NoSQL se dividió en subcategorías que contenían MongoDB, Cassandra, etc.

Incluso en 2017, según la Stack Overflow Developer's Survey, el segundo lenguaje más utilizado fue SQL (justo detrás de JavaScript) con el 50% de los 64,000 encuestados diciendo que todavía utilizan SQL en alguna forma.

Su popularidad se debe, al menos en parte, a la simplicidad del lenguaje, al hecho de que fue construido con datos relacionales en mente, y porque ha demostrado ser fiable para buscar, unir y filtrar datos.

Basta con decir que SQL no sólo está vivito y coleando, sino que prospera entre la comunidad de desarrollo de hoy en día.

¡Ahora vamos a ver por qué!

Las partes divertidas

SQL Server es el sabor preferido de SQL que utilizo en mis actividades cotidianas en el trabajo, por lo que los ejemplos siguientes se ajustarán a esas normas.

Una de las cosas que más me gusta hacer es actualizar varios registros dentro de una tabla. Ahora podría hacer este registro de uno en uno, pero SQL nos da la capacidad de actualizar múltiples (miles y miles si es necesario) registros a la vez a través de la declaración UPDATE.

La declaración UPDATE puede utilizarse para actualizar una sola columna, un conjunto más amplio de registros (mediante el uso de condiciones), y/o toda la tabla en una base de datos. La(s) condición(es) puede(n) ser un booleano, una verificación de cadena de texto o una secuencia matemática que se resuelve en un booleano (mayor que, menos que, etc.).

Aunque puede variar ligeramente de un sabor a otro, la sintaxis general es la siguiente:

UPDATE nombre-de-la-tabla
SET nombre-de-la-columna = valor[, nombre-de-la-columna=valor]
[WHERE condición]

Los corchetes ( [] ) de arriba denotan adiciones opcionales a la consulta.

***Es muy importante tener en cuenta que sin la condición de WHERE, TODOS los registros de la tabla se actualizarán tan pronto como se ejecute la consulta.***

Consultas de ejemplo

Como nuestro conjunto de datos, usaré esta tabla llamada Work_Tickets:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustries.com 0.00 False 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 0.00 False 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 0.00 False 085569 17.5 0

Consulta simple sin condiciones

Aquí hay una consulta de actualización muy simple que cambiará todos los campos de UnitCost al número 131.6152:

UPDATE Work_Tickets
SET UnitCost = 131.6152

Nota que no hay cláusula de WHERE, así que cada línea de la tabla se actualizará y nuestro conjunto de datos se verá así:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 False 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 False 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 False 085569 17.5 0

Consultas simples con condición(es)

Aquí hay una simple consulta con una declaración de condición:

UPDATE Work_Tickets
SET Billed = true
WHERE UnitCost <> 0.00

Esta consulta actualizará el campo de Billed para que sea true en cada línea que coincida con la condición de UnitCost no igual a 0. Después de ejecutar nuestra consulta, el conjunto de datos se verá así:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 True 085569 17.5 0

Abajo hay una consulta en la que cambiamos el ParentLineKey por la cadena 000134 en la que el SalesOrderNum y el WorkTicketNum coinciden con las cadenas dadas.

UPDATE Work_Tickets
SET ParentLineKey = 000134
WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Así que, el 085569 en el campo ParentLineKey será reemplazado por 000134 y nuestro conjunto de datos ahora se ve así:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 131.6152 True 000134 17.5 0

Actualizando múltiples campos

Digamos que tienes un conjunto de datos mucho más grande que el que estamos usando actualmente y tienes varios campos para actualizar.

Sería tedioso y aburrido actualizarlos con diferentes declaraciones de actualización. Por suerte para nosotros también es posible actualizar varios campos a la vez con una declaración de actualización (update), siempre y cuando separemos los nombres de las columnas con una coma:

UPDATE Work_Tickets
SET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72
WHERE SalesOrderNum = 00061358

Y aquí está el resultado con los campos actualizados después de ejecutar la consulta:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 129.8511 True 000134 72 72

Usando Update en una subconsulta

Los ejemplos anteriores son perfectos si se trabaja con una sola fuente de datos. Sin embargo, la mayoría de tus datos no se almacenarán en una sola tabla. Ahí es donde el uso de UPDATE con múltiples fuentes de datos es útil.

La sintaxis para actualizar una columna/tabla cambia un poco si queremos traer datos de otra tabla:

UPDATE nombre-de-la-tabla
SET nombre-de-la-columna = (SELECT nombre de columna(s)
FROM nombre-de-la-tabla2
WHERE condición(es))
[WHERE condición]

Y aquí están las dos tablas que usaremos para esta consulta - la tabla Work_Tickets:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 sales@wayneindustires.com 131.6152 True 079777 12.0 0
00061357 000932 1251 contact@starkindustries.com 131.6152 True 085695 196.5 0
00061358 000933 1252 animation@acmetoons.com 129.8511 True 000134 72 72

y la tabla Customer_Info:

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring NULL 1631 Dark Knight Way Gotham 19.75 5556614000 sales@wayneindustires.com
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 contact@starkindustries.com
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 animation@acmetoons.com

La declaración UPDATE con la subconsulta se ve así:

UPDATE Customer_Info
SET Code = (SELECT Customer_Code
FROM Work_Tickets
WHERE Work_Tickets.Customer_Contact = Customer_Info.Email)
FROM Work_Tickets
WHERE Code IS NULL

Este ejemplo actualizará el campo Code de la tabla Customer_Info donde la dirección de correo electrónico coincide con la de ambas tablas. Y así es como se ve ahora nuestra tabla Customer_Info:

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring 1250 1631 Dark Knight Way Gotham 19.75 5556614000 sales@wayneindustires.com
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 contact@starkindustries.com
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 animation@acmetoons.com

Concluyendo

Espero que este artículo te haya sido útil para entender cómo funciona la declaración UPDATE en SQL.

¡Ahora estás listo para escribir tus propias sentencias SQL UPDATE como un campeón! ¡Después de hacerlo, me encantará que lo compartieras conmigo en redes sociales!

No olvides visitar mi blog donde frecuentemente publico artículos sobre desarrollo web.

Ya que estás allí, ¿por qué no te inscribes en mi boletín de noticias? Puedes hacerlo en la parte superior derecha de la página principal del blog. Me gusta enviar artículos interesantes (míos y de otros), recursos y herramientas para desarrolladores de vez en cuando.

Si tienes preguntas sobre este artículo o en general, mis MDs están abiertos - ven a saludar en Twitter o en cualquiera de mis otras cuentas de redes sociales que puedes encontrar debajo del botón de suscripción del boletín de noticias en la página principal de mi blog o en mi perfil aquí en fCC :)

¡Qué tengas un día increíble y feliz día programando, amigo!

Traducido del artículo de Jonathan Sexton - SQL Update Statement — Example Queries for Updating Table Values