Comandos DML en SQL
Aprende sobre los comandos de Data Manipulation Language (DML) en SQL para manipular y consultar datos en tu base de datos.
Cristian Escalante
Última actualización: 11 de mayo de 2025
Comandos DML en SQL
El Lenguaje de Manipulación de Datos (DML - Data Manipulation Language) es un subconjunto de SQL utilizado para manipular los datos almacenados en las tablas de bases de datos. Los comandos DML se utilizan para recuperar, insertar, modificar y eliminar datos.
SELECT
El comando SELECT se utiliza para consultar y recuperar datos de una o más tablas. Es el comando DML más utilizado y versátil.
Sintaxis básica
SELECT columna1, columna2, ...
FROM nombre_tabla
WHERE condición
GROUP BY columna
HAVING condición_grupo
ORDER BY columna [ASC|DESC];
Consulta de todas las columnas
SELECT * FROM empleados;
Consulta de columnas específicas
SELECT nombre, apellido, salario
FROM empleados;
Consulta con condición WHERE
SELECT nombre, apellido, departamento
FROM empleados
WHERE salario > 50000;
Consulta con ORDER BY
SELECT nombre, apellido, fecha_contratacion
FROM empleados
ORDER BY fecha_contratacion DESC;
Consulta con funciones agregadas
SELECT departamento, COUNT(*) as total_empleados, AVG(salario) as salario_promedio
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 5;
Consulta con JOIN
SELECT e.nombre, e.apellido, d.nombre_departamento
FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id;
INSERT
El comando INSERT se utiliza para añadir nuevos registros a una tabla.
Insertar un registro completo
INSERT INTO empleados (id, nombre, apellido, departamento_id, salario)
VALUES (101, 'Juan', 'Pérez', 3, 45000);
Insertar múltiples registros
INSERT INTO empleados (nombre, apellido, departamento_id, salario)
VALUES
('María', 'González', 2, 55000),
('Carlos', 'Rodríguez', 3, 48000),
('Ana', 'Martínez', 1, 60000);
Insertar datos desde otra tabla
INSERT INTO empleados_backup
SELECT * FROM empleados
WHERE fecha_contratacion < '2023-01-01';
UPDATE
El comando UPDATE se utiliza para modificar los datos existentes en una tabla.
Actualizar un registro
UPDATE empleados
SET salario = 52000
WHERE id = 101;
Actualizar múltiples columnas
UPDATE empleados
SET departamento_id = 4, salario = salario * 1.1
WHERE departamento_id = 3;
Actualizar con subconsulta
UPDATE empleados
SET salario = salario * 1.05
WHERE departamento_id IN (SELECT id FROM departamentos WHERE categoria = 'Ventas');
DELETE
El comando DELETE se utiliza para eliminar registros de una tabla.
Eliminar un registro específico
DELETE FROM empleados
WHERE id = 101;
Eliminar múltiples registros
DELETE FROM empleados
WHERE departamento_id = 3;
Eliminar con subconsulta
DELETE FROM empleados
WHERE departamento_id IN (SELECT id FROM departamentos WHERE activo = FALSE);
Eliminar todos los registros
DELETE FROM empleados;
MERGE (UPSERT)
En algunos SGBD como Oracle, SQL Server y PostgreSQL (con sintaxis diferente), existe el comando MERGE que permite realizar operaciones INSERT, UPDATE o DELETE en una sola instrucción, dependiendo de si existe o no coincidencia en los datos.
MERGE INTO empleados_destino d
USING empleados_origen o
ON (d.id = o.id)
WHEN MATCHED THEN
UPDATE SET d.nombre = o.nombre, d.salario = o.salario
WHEN NOT MATCHED THEN
INSERT (id, nombre, apellido, departamento_id, salario)
VALUES (o.id, o.nombre, o.apellido, o.departamento_id, o.salario);
Ejemplos prácticos
Gestión de inventario de una tienda
-- Crear tabla de productos
CREATE TABLE productos (
producto_id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
descripcion TEXT,
precio DECIMAL(10,2) NOT NULL,
stock INT DEFAULT 0,
categoria VARCHAR(50)
);
-- Insertar productos
INSERT INTO productos (producto_id, nombre, precio, stock, categoria)
VALUES
(1, 'Laptop HP', 899.99, 20, 'Electrónica'),
(2, 'Monitor LG 27"', 299.99, 15, 'Electrónica'),
(3, 'Teclado Logitech', 49.99, 30, 'Accesorios');
-- Consultar productos por categoría
SELECT nombre, precio, stock
FROM productos
WHERE categoria = 'Electrónica'
ORDER BY precio DESC;
-- Actualizar stock después de ventas
UPDATE productos
SET stock = stock - 5
WHERE producto_id = 1;
-- Actualizar precios (aumento del 10%)
UPDATE productos
SET precio = precio * 1.1
WHERE categoria = 'Electrónica';
-- Eliminar productos agotados
DELETE FROM productos
WHERE stock <= 0;
-- Consulta con función agregada
SELECT categoria, COUNT(*) as total_productos, SUM(stock) as stock_total, AVG(precio) as precio_promedio
FROM productos
GROUP BY categoria;
Consideraciones importantes
- Transacciones: Los comandos DML pueden incluirse dentro de transacciones (BEGIN, COMMIT, ROLLBACK) para garantizar la integridad de los datos.
- Rendimiento: Las operaciones DML pueden afectar el rendimiento de la base de datos, especialmente cuando involucran grandes volúmenes de datos.
- Restricciones: Los comandos DML deben respetar las restricciones definidas en las tablas (PRIMARY KEY, FOREIGN KEY, CHECK, etc.).
- Concurrencia: En entornos multiusuario, es importante considerar los problemas de concurrencia al ejecutar comandos DML.
- Respaldo: Siempre es recomendable tener un respaldo antes de realizar operaciones DML masivas o críticas.