Volver a la lista de artículos Artículos
Lectura de 11 minutos

SQL INSERT, SQL UPDATE, SQL DELETE - ¡Oh!

¿Te interesa entender cómo funcionan INSERT, UPDATE o DELETE en SQL? ¡Te pondremos al día con ejemplos útiles y un completo paso a paso!

SQL INSERT, UPDATE o DELETE

¿Qué hacen las sentencias INSERT, UPDATE y DELETE en SQL? Si trabajas en la ingeniería de datos, en la administración de bases de datos, o si sólo eres un aficionado a los datos, algún día te encontrarás con una base de datos que se convertirá en tu "bebé". Al cargar en brazos a esta criatura tan especial, tendrás que encargarte también de alimentarla y cambiarla. Sí, ¡seguimos hablando de bases de datos! INSERT, UPDATE y DELETE son todas funciones de SQL que te ayudan a que tus datos estén actualizados y se mantengan libres de información innecesaria u obsoleta.

INSERT, UPDATE y DELETE, así como SELECT y MERGE, se conocen como declaraciones de lenguaje de manipulación de datos (DML), y permiten a los usuarios de SQL ver y gestionar los datos. Aunque los datos suelen ser, por supuesto, actualizados por la propia aplicación, de vez en cuando se requiere el ingreso manual o el mantenimiento, y esto exige no sólo una buena comprensión de SQL para principiantes (este artículo supone que ya tienes un conocimiento básico de SQL; consulta nuestro curso de SQL para principiantes y nuestra variedad de artículos sobre SQL si aún no lo has hecho), sino también el conocimiento de cómo funcionan INSERT, UPDATE y DELETE en SQL.

Este artículo proporciona los fundamentos de INSERT, UPDATE y DELETE en SQL, pero si quieres un tutorial más completo, consulta nuestro curso Cómo añadir, modificar y eliminar datos con SQL. Tiene todo lo que necesitas para que las declaraciones o sentencias DML te parezcan un juego de niños.

El Hospital Infantil de Mickey Mouse - Un caso práctico de base de datos

Veamos al trío protagónico de este artículo de a uno por vez, y entendamos cómo funcionan.

Utilizaremos una base de datos de ejemplo para demostrar cada una de las tres sentencias. Siguiendo con el tema de los bebés, supongamos que administras la base de datos de un hospital infantil, el "Hospital Infantil de Mickey Mouse", para más exactitud. El hospital mantiene registros de todos sus pequeños pacientes, incluyendo datos como edad, peso, resultados de los análisis de sangre... ya te haces una idea.

Por lo general, los médicos introducen y actualizan esta información en el sistema del hospital cada vez que ven a sus pacientes, y gran parte de la inserción, actualización y eliminación de registros en la base de datos la realiza el sistema. Pero a menudo aparecen cosas que deben ser arregladas manualmente, y como persona encargada de la adminstración de la base de datos, ¡ese es tu momento de brillar!

A continuación, utilizamos tres tablas diferentes para demostrar cada una de las tres declaraciones o sentencias.

La tabla de ejemplo número uno muestra los registros de los pacientes y su información básica:

Tabla de pacientes

IDPacienteApellidoNombreFechaNacSexoPesoAlturaVacuna
15223SmithDeniz12/31/2018F21.429.2Y
15224AgarwalArjun08/29/2017M28.134.2Y
15225AdamsPoppy02/14/2015F34.039.2N
15226JohnsonTierra08/15/2019F14.624.5Y
15227KhouriMohammed03/30/2014M41.544.1Y
15228JonesBen04/04/2011M70.152.2Y
15229KowalczykAlexandra08/27/2019F15.223.9Y

La tabla de número dos contiene los diferentes departamentos del hospital, y los grupos y categorías a los que pertenecen dichos departamentos:

Tabla de departamentos

IDDepartmentoNombreDepartmentoNombreGrupoNombreCategoria
1CardiologiaCentro CardiologicoClinica
2Cuidados IntensivosEmergenciasClinica
3EmergenciasEmergenciasClinica
4ComunicacionesAdministracionOperaciones
5OncologiaMedicina InternaClinica
6NeurologiaMedicina InternaClinica
7Recursos HumanosAdministracionOperaciones
8PatologiaServiciosTecnica
9RadiologiaServiciosTecnica
10FarmaciaServiciosTecnica
11Junta DirectivaAdministracionOperaciones
12UrologiaCirugiaClinica
13HematologiaMedicina InternaClinica
14Pabellon MontanaPabellonOperaciones
15Pabellon ChicagoPabellonOperaciones
16Pabellon LincolnPabellonOperaciones
17Pabellon YellowstonePabellonOperaciones
18Pabellon BrooklynPabellonOperaciones

La tabla número tres registra las visitas de los pacientes a lo largo de los años:

Tabla VisitasPacientes

IDPacienteUltimaAdmitidaUltimaDescartada
3312/29/195201/05/1953
34--
3508/01/200408/04/2004
3607/28/201107/30/2011
3705/27/195005/30/1950
38--
3910/11/197010/20/1970

Con estas tablas de ejemplo, vamos a entrar en el meollo de INSERT, UPDATE y DELETE.

INSERTAR datos con SQL

Al igual que los bebés, cada minuto nacen nuevos datos. Muchos sistemas inteligentes permiten que esos datos se añadan sin problemas a sus bases de datos. Sin embargo, en muchos casos, tendrás que añadirlos manualmente, y ahí es donde entra en juego la sentencia INSERT (insertar) en SQL.

INSERT es tu recurso para añadir una o varias filas a una tabla. INSERT también puede ayudarte a añadir filas de una tabla a otra.

Veamos la estructura básica de una sentencia INSERT:

INSERT INTO nombreTabla
(columna1, columna2, ...)
VALUES (valor1, valor2, ...)

Primero, necesitamos identificar la tabla en la que queremos insertar filas. A continuación, especificamos las columnas que queremos rellenar. Por último, estipulamos los valores que necesitamos añadir. Esta es la forma básica de la función INSERT, y es bastante intuitiva.

Para dar a esta estructura alguna aplicación de la vida real, he aquí un ejemplo de nuestro caso de estudio.

Uno de los médicos del Hospital Infantil Mickey Mouse tiene un paciente recién nacido al que aún no se le ha puesto nombre. El médico necesita introducir al bebé en la base de datos inmediatamente para poder acceder a un ensayo farmacológico para el niño enfermo, pero el sistema no permite enviar el expediente del pequeño sin un nombre. El médico quiere que se añada al paciente utilizando su número de paciente, dejando su nombre en blanco hasta una fecha posterior. Tú, como persona encargada de la administración, tendrás que introducir al paciente manualmente en la base de datos.

Así es como se vería la declaración INSERT:

INSERT INTO dbo.Paciente
            (Apellido, Nombre, FechaNac, Sexo, [Peso], Altura, Vacuna)
VALUES      (NULL, NULL,'2019-11-19', 'F', 14.0, 23.1, 'No')

Como puedes ver, no sólo estamos proporcionando el nombre de la tabla en la que necesitamos insertar, sino también los nombres de las columnas y los valores que queremos añadir. No especificamos el IDPaciente en la lista de columnas porque, al ser una columna de identidad, se rellena automáticamente.

Como queremos mantener el nombre del paciente en blanco por ahora, escribimos NULL para las columnas de nombre.

Una vez que ejecutamos este comando, se creará la siguiente adición a la base de datos:

Insertar Datos con SQL

Inserción de varias filas

Para insertar más de una fila de datos con una sola sentencia, utiliza paréntesis y comas para especificar las distintas filas nuevas.

INSERT INTO dbo.Paciente
            (Apellido, Nombre, FechaNac, Sexo, [Peso], Altura, Vacuna)
VALUES      ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
VALUES      ('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')

Sugerencia: utiliza una transacción para probar tu inserción sin comprometer ni alterar tu tabla de manera permanente. Para ello, comienza con BEGIN TRANSACTION, y finaliza la transacción con COMMIT, si deseas mantener los cambios, o ROLLBACK, si deseas revertir lo que has hecho. A continuación, se muestra cómo añadiríamos una transacción al ejemplo anterior:

INICIAR TRANSACCIÓN

BEGIN TRANSACTION
INSERT INTO dbo.Paciente
            (Apellido, Nombre, FechaNac, Sexo, [Peso], Altura, Vacuna)
VALUES      ('Hitson', 'George','2019-11-19', 'M', 13.9, 22.5, 'No'),
	        ('Hitson', 'Jenny','2019-11-19', 'F', 13.7, 22.3, 'No')

ROLLBACK
--COMMIT

Inserción de una tabla en otra

¿Necesitas insertar una o varias filas de datos de una tabla en otra? Puedes utilizar la sentencia INSERT INTO SELECT.

Supongamos que varios de nuestros pacientes participan en un nuevo ensayo de medicamentos, y tú estás creando una tabla nueva para registrar su participación. La estructura básica de esta sentencia es:

INSERT INTO TablaDestino (columna1, columna2, ...)
SELECT      (columna1, columna2, ...)
FROM        TablaOrigen

El enunciado de nuestro ejemplo de ensayo de medicamentos tendría este aspecto:

INSERT INTO [dbo].[PruebaDrogaAlfa]
           (Apellido, Nombre, FechaNac, Sexo, DrogaOPlacebo, Notas)
SELECT 
	p.Apellido, p.Nombre, p.FechaNac, p.Sexo, 'Droga', NULL 
FROM dbo.Paciente AS p
WHERE 
	p.IDPaciente IN (15226, 15229, 15230)
UNION
SELECT 
	p.Apellido, p.Nombre, p.FechaNac, p.Sexo, 'Placebo', NULL 
FROM dbo.Paciente AS p
WHERE 
	p.IDPaciente IN (15231)

También puedes escribir el ejemplo como una expresión de tabla común (CTE). Entre otras cosas, las CTE pueden utilizarse para crear un conjunto de resultados temporal para reutilizar durante la consulta. Así es como se vería el mismo comando escrito como una CTE:

WITH PruebaDrogaPacientes (Apellido, Nombre, FechaNac, Sexo, DrogaOPlacebo, Notas)
AS (
	SELECT 
		p.Apellido, p.Nombre, p.FechaNac, p.Sexo, 'Droga', NULL 
	FROM dbo.Paciente AS p
	WHERE 
		p.IDPaciente IN (15226, 15229, 15230)
	UNION
	SELECT 
		p.Apellido, p.Nombre, p.FechaNac, p.Sexo, 'Placebo', NULL 
	FROM dbo.Paciente AS p
	WHERE 
		p.IDPaciente IN (15231)
	)
INSERT INTO [dbo].[PruebaDrogaAlfa]
           (Apellido, Nombre, FechaNac, Sexo, DrogaOPlacebo, Notas)
SELECT Apellido, Nombre, FechaNac, Sexo, DrogaOPlacebo, Notas
FROM PruebaDrogaPacientes
Inserción de una tabla a otra

Sugerencia: si estás utilizando SELECT para añadir datos de una tabla a otra, como paso inicial es una buena idea ejecutar la sentencia SELECT sola, para asegurarte de que se devuelven las filas correctas y de estar satisfecho con el resultado.

ACTUALIZAR datos con SQL

La sentencia UPDATE es otra tarea común utilizada por las personas encargadas de la ingeniería de datos y la administración de bases de datos. Se utiliza para cambiar el valor de una columna en una o varias filas.

Así es como se estructura generalmente una sentencia SQL UPDATE:

UPDATE nombreTabla
SET columna1=valor1, columna2=valor2,...
WHERE filtroColumna=filtroValor

Al igual que con la sentencia INSERT, primero tenemos que identificar la tabla que queremos actualizar. Luego, usamos la cláusula SET para detallar las columnas que queremos actualizar. Por último, utilizamos la cláusula WHERE para señalar las filas que queremos incluir en la actualización.

Sugerencia: dado que un nuevo valor de columna puede afectar a más de una fila, asegúrate de estar satisfecho con el alcance de la actualización antes de confirmarla. Al igual que INSERT, UPDATE puede escribirse como una transacción, lo que significa que puedes usar COMMIT o ROLLBACK para la actualización, dependiendo de si estás o no satisfecho con los cambios.

He aquí un ejemplo utilizando nuestro caso de estudio. Nuestro departamento de Emergencias se está cambiando a "Trauma y Cirugía de Emergencias", por lo que es necesario cambiar su nombre en la base de datos. Para actualizar este nombre, puedes ejecutar esta sentencia:

UPDATE dbo.Departmento
   SET NombreDepartmento = 'Trauma y Cirugia de Emergencias'
WHERE IDDepartmento = 3
SELECT * FROM dbo.Departmento WHERE NombreDepartmento = 'Emergencias'
Actualización de Datos con SQL

Este es el aspecto que tendría el nombre actualizado del departamento en nuestra tabla:

Actualización de Datos con SQL

Cuando utilices la sentencia UPDATE, asegúrate de que la cláusula WHERE especifique con precisión las filas que deseas actualizar. En caso de duda, escribe la sentencia como una transacción, que podrás revertir si no estás satisfecho con el cambio, sin que ello suponga un perjuicio.

Para comprobar que estás seleccionando los datos correctos para actualizar, puedes hacer una prueba utilizando SELECT para asegurarte de estar apuntando a las filas correctas.

Actualizar varias filas

Si necesitas actualizar múltiples filas de datos, es muy fácil hacerlo con la sentencia UPDATE. La cláusula WHERE es tu amiga.

Imagina que quieres recategorizar todas las salas de hospitalización de "Pabellón" a "Sala" en la columna de grupo.

UPDATE dbo.Departmento
   SET NombreGrupo = 'Sala'
WHERE NombreGrupo = 'Pabellon' 

Lo que cambiaría la tabla para que se vea así:

Actualización de Varias Filas Actualización de Varias Filas

ELIMINAR datos con SQL

Pelele

En el mundo de SQL, DELETE es como cambiar pañales. ¿Hay algo allí que no quieras? ¡Elimínalo!

DELETE elimina una o varias filas de una tabla, ¡pero ten cuidado! Tienes que asegurarte de que sabes lo que estás eliminando antes de seguir adelante y confirmar la sentencia.

Este es el aspecto de la sentencia DELETE:

DELETE nombreTabla
WHERE  filtroColumna=filtroValor;

Sólo tiene dos partes: especificar la tabla y especificar WHERE, es decir, qué filas quieres eliminar.

Si conoces la clave primaria de una fila que desees eliminar, tu trabajo es sencillo. ¿Quieres borrar el Pabellón Lincoln de tu tabla?:

DELETE FROM dbo.Departmento
WHERE IDDepartmento = 16
Borrar Datos con SQL

Eliminar varias filas

Volvemos al Hospital Infantil de Mickey Mouse. Digamos que el gestor de datos del hospital quiere eliminar todos los registros de pacientes que no han visitado el hospital desde 1969. Podrías escribir la sentencia DELETE de la siguiente manera:

DELETE FROM dbo.VisitasPacientes 
WHERE UltimaDescartada < '1969-01-01' 

¿El resultado? Esta es la tabla anterior...

Eliminación de Varias Filas

... y así es como queda después de ejecutar ese script:

Eliminación de Varias Filas

Sin embargo, lo mejor que podemos hacer antes de ejecutar esta sentencia DELETE sería probar el resultado utilizando SELECT. Esto devolverá todas las filas que estábamos a punto de eliminar, para poder comprobar si estamos eliminando las filas correctas.

Para ejecutar esta prueba, escribiríamos:

SELECT * FROM dbo.VisitasPacientes 
WHERE UltimaDescartada < '1969-01-01'

¡Atención! Si utilizas DELETE sin añadir una cláusula WHERE, eliminará todas las filas de la tabla.

Conclusión

Una vez que hayas dominado SQL para principiantes, las sentencias INSERT, UPDATE y DELETE son tu siguiente paso hacia la gloria en el uso de bases de datos. Si este artículo te ha dejado con apetito por aprender más, consulta nuestro curso para principiantes Cómo añadir, modificar y eliminar datos con SQL. No sólo se profundiza en esta información básica con más detalle, sino que también te enseñará a:

  • Lidiar con los valores de auto-llenado y combinar los comandos de manipulación de datos SQL con IDENTITY, SEQUENCE y NEWID().
  • Combinar los comandos DML de SQL con valores NULL.
  • Combinar los comandos DML de SQL con sentencias JOIN.
  • Modificar los datos utilizando los valores por defecto de las columnas.
  • Realizar operaciones CRUD, las más importantes de las operaciones DML.

Con 52 ejercicios interactivos, acceso de por vida al curso, un certificado de finalización y una garantía de satisfacción de 30 días de devolución del dinero, ¡no hay mucho que perder al intentarlo!

Entonces, ¿qué esperas? INSERTA nuevos conocimientos a tu vida, ACTUALIZA tu formación en SQL y ELIMINA todas las excusas. Nos vemos en las bases de datos.