Unidad 2 Lenguaje de manipulación de datos


TALLER DE BASE DE DATOS

Unidad 2: Lenguaje de Manipulación de Datos (DML)

Gestión, Consultas Avanzadas y Optimización en SQL Server

👩‍🏫
Catedrática Dra. Olga López Fortiz
2.1

Inserción, Eliminación y Modificación de Registros

El Lenguaje de Manipulación de Datos (DML) permite realizar operaciones CRUD (Crear, Leer, Actualizar y Borrar) sobre las tablas de una base de datos relacional.

Diagrama de Operaciones DML

INSERT INTO 📥 Agrega nuevas filas VALUES (…) UPDATE ✏️ Modifica datos existentes SET col = val WHERE … DELETE FROM 🗑️ Elimina registros WHERE condición

Explicación Paso a Paso

  1. Inserción (INSERT): Específica el nombre de la tabla, las columnas receptoras y los valores respetando el orden y tipo de dato.
  2. Modificación (UPDATE): Actualiza columnas mediante SET. Es imprescindible usar WHERE para evitar modificar toda la tabla.
  3. Eliminación (DELETE): Borra registros específicos con la cláusula WHERE.

5 Ejercicios Prácticos (Tema 2.1)

1
Insertar un nuevo cliente:
INSERT INTO Clientes (ClienteID, Nombre, Correo, Telefono)
VALUES (101, 'Carlos Mendoza', 'carlos.m@email.com', '2381234567');
2
Inserción múltiple de productos:
INSERT INTO Productos (ProductoID, Nombre, Precio, Stock)
VALUES 
(1, 'Teclado Mecánico', 850.00, 15),
(2, 'Mouse Inalámbrico', 450.00, 30),
(3, 'Monitor 24 Pulgadas', 3200.00, 8);
3
Actualizar el salario de un empleado específico:
UPDATE Empleados
SET Salario = 18500.00, Cargo = 'Desarrollador Senior'
WHERE EmpleadoID = 45;
4
Incrementar precios por categoría en un 10%:
UPDATE Productos
SET Precio = Precio * 1.10
WHERE CategoriaID = 3;
5
Eliminar clientes inactivos con condición:
DELETE FROM Clientes
WHERE Estatus = 'Inactivo' AND UltimaCompra < '2023-01-01';
2.2

Consultas Básicas y Filtrado (SELECT)

La sentencia SELECT permite recuperar datos almacenados en una o más tablas especificando criterios de filtrado y ordenamiento.

Estructura de Ejecución de una Consulta SQL

1 FROM
2 WHERE
3 SELECT
4 ORDER BY

5 Ejercicios Prácticos (Tema 2.2)

1
Consultar todos los productos con stock crítico (menor a 5 unidades):
SELECT ProductoID, Nombre, Stock, Precio 
FROM Productos 
WHERE Stock < 5;
2
Filtrar empleados por rango de sueldo y ordenarlos descendentemente:
SELECT Nombre, Apellido, Salario 
FROM Empleados 
WHERE Salario BETWEEN 12000 AND 25000 
ORDER BY Salario DESC;
3
Búsqueda por patrones usando coincidencia parcial (LIKE):
SELECT Nombre, Correo 
FROM Clientes 
WHERE Nombre LIKE 'A%' OR Nombre LIKE '%López%';
4
Obtener ventas realizadas en un año específico sin duplicados:
SELECT DISTINCT ClienteID 
FROM Ventas 
WHERE YEAR(FechaVenta) = 2025;
5
Uso de alias para personalizar los encabezados del reporte:
SELECT 
    Nombre AS [Nombre del Producto], 
    Precio AS [Precio Unitario], 
    (Precio * 0.16) AS [IVA 16%]
FROM Productos;
2.3

Funciones, Conversión, Agrupamiento y Ordenamiento

Permite procesar conjuntos de datos para calcular agregaciones (totales, promedios) utilizando GROUP BY y aplicar filtros a los grupos mediante HAVING.

5 Ejercicios Prácticos (Tema 2.3)

1
Calcular el salario promedio y total de nómina por departamento:
SELECT 
    DepartamentoID, 
    COUNT(*) AS TotalEmpleados, 
    AVG(Salario) AS PromedioSalario,
    SUM(Salario) AS NominaTotal
FROM Empleados
GROUP BY DepartamentoID;
2
Filtrar grupos que cumplan una condición (HAVING):
SELECT CategoriaID, COUNT(*) AS TotalProductos
FROM Productos
GROUP BY CategoriaID
HAVING COUNT(*) > 10;
3
Convertir formatos de fecha explicitamente usando CONVERT:
SELECT 
    VentaID, 
    CONVERT(VARCHAR(10), FechaVenta, 103) AS FechaFormatoDDMMYYYY
FROM Ventas;
4
Conversión explícita de datos numéricos con CAST:
SELECT 
    Nombre, 
    ' $ ' + CAST(Precio AS VARCHAR(10)) AS PrecioTexto
FROM Productos;
5
Obtener la fecha actual y manipular cadenas de texto:
SELECT 
    UPPER(Nombre) AS NombreMayusculas, 
    LOWER(Correo) AS CorreoMinusculas, 
    DATEDIFF(YEAR, FechaNacimiento, GETDATE()) AS EdadEstimada
FROM Alumnos;
2.4

Combinaciones de Tablas (JOINS)

Los JOINS permiten vincular registros de dos o más tablas basándose en claves primarias y foráneas relacionadas.

Tipos de Combinaciones (Diagramas de Venn)

INNER JOIN LEFT JOIN RIGHT JOIN

5 Ejercicios Prácticos (Tema 2.4)

1
INNER JOIN entre Empleados y Departamentos:
SELECT E.Nombre, E.Salario, D.NombreDepartamento
FROM Empleados E
INNER JOIN Departamentos D ON E.DepartamentoID = D.DepartamentoID;
2
LEFT JOIN para incluir clientes que aún no realizan compras:
SELECT C.Nombre, C.Correo, V.VentaID, V.MontoTotal
FROM Clientes C
LEFT JOIN Ventas V ON C.ClienteID = V.ClienteID;
3
RIGHT JOIN entre Productos y Proveedores:
SELECT P.Nombre AS Producto, PR.NombreEmpresa AS Proveedor
FROM Productos P
RIGHT JOIN Proveedores PR ON P.ProveedorID = PR.ProveedorID;
4
FULL OUTER JOIN para detectar discordancias de datos:
SELECT A.NombreAlumno, C.NombreCurso
FROM Alumnos A
FULL OUTER JOIN Inscripciones C ON A.AlumnoID = C.AlumnoID;
5
CROSS JOIN para generar una matriz cartesiana de combinaciones:
SELECT T.Talla, C.Color
FROM Tallas T
CROSS JOIN Colores C;
2.5

Subconsultas (Subqueries)

Una subconsulta es una instrucción SELECT anidada dentro de otra consulta principal (SELECT, INSERT, UPDATE o DELETE).

5 Ejercicios Prácticos (Tema 2.5)

1
Subconsulta escalar en la cláusula WHERE (Precio mayor al promedio):
SELECT Nombre, Precio
FROM Productos
WHERE Precio > (SELECT AVG(Precio) FROM Productos);
2
Subconsulta con operador IN para listas de valores:
SELECT Nombre, Salario
FROM Empleados
WHERE DepartamentoID IN (
    SELECT DepartamentoID 
    FROM Departamentos 
    WHERE Utopicacion = 'Edificio A'
);
3
Subconsulta correlacionada con EXISTS:
SELECT C.Nombre
FROM Clientes C
WHERE EXISTS (
    SELECT 1 FROM Ventas V 
    WHERE V.ClienteID = C.ClienteID AND V.MontoTotal > 5000
);
4
Subconsulta en la cláusula FROM (Tabla derivada):
SELECT Resumen.DepartamentoID, Resumen.PromSueldo
FROM (
    SELECT DepartamentoID, AVG(Salario) AS PromSueldo
    FROM Empleados
    GROUP BY DepartamentoID
) AS Resumen
WHERE Resumen.PromSueldo > 15000;
5
Subconsulta para actualizar registros condicionadamente:
UPDATE Empleados
SET Salario = Salario * 1.05
WHERE DepartamentoID = (
    SELECT DepartamentoID FROM Departamentos WHERE NombreDepartamento = 'Ventas'
);
2.6

Operadores Set (De Conjuntos)

Unen los resultados de dos o más consultas en una sola tabla de resultados. Las consultas deben tener el mismo número de columnas y tipos de datos compatibles.

5 Ejercicios Prácticos (Tema 2.6)

1
UNION (Combina y elimina duplicados automáticamente):
SELECT Correo FROM Clientes
UNION
SELECT Correo FROM Empleados;
2
UNION ALL (Combina conservando todos los duplicados):
SELECT Ciutopicad FROM Proveedores
UNION ALL
SELECT Ciutopicad FROM Clientes;
3
INTERSECT (Obtiene solo los elementos presentes en ambas consultas):
SELECT ClienteID FROM Clientes
INTERSECT
SELECT ClienteID FROM Ventas;
4
EXCEPT (Resta: elementos de la primera consulta que no están en la segunda):
SELECT ProductoID FROM Productos
EXCEPT
SELECT DISTINCT ProductoID FROM DetalleVentas;
5
Uso de ORDER BY al final de un operador Set:
SELECT Nombre, Correo, 'Cliente' AS Tipo FROM Clientes
UNION
SELECT Nombre, Correo, 'Empleado' AS Tipo FROM Empleados
ORDER BY Nombre ASC;
2.7

Vistas (Views)

Una vista es una tabla virtual basada en el resultado de una consulta SQL almacenada en la base de datos.

5 Ejercicios Prácticos (Tema 2.7)

1
Creación de una vista para simplificar Joins complejos:
CREATE VIEW vw_ResumenVentas AS
SELECT V.VentaID, C.Nombre AS Cliente, V.FechaVenta, V.MontoTotal
FROM Ventas V
INNER JOIN Clientes C ON V.ClienteID = C.ClienteID;
2
Consultar datos filtrados directamente desde la vista creada:
SELECT * FROM vw_ResumenVentas
WHERE MontoTotal > 10000;
3
Vista de seguridad para ocultar datos sensibles (ej. Salarios):
CREATE VIEW vw_DirectorioEmpleados AS
SELECT EmpleadoID, Nombre, Apellido, Cargo, Correo
FROM Empleados;
4
Modificar la definición de una vista con ALTER VIEW:
ALTER VIEW vw_DirectorioEmpleados AS
SELECT EmpleadoID, Nombre, Apellido, Cargo, Correo, Telefono
FROM Empleados;
5
Eliminar la vista del catálogo de la base de datos:
DROP VIEW vw_ResumenVentas;
📝

Examen Integrador de la Unidad 2

Responde las siguientes 5 preguntas de opción múltiple para evaluar tus conocimientos acumulados sobre el Lenguaje de Manipulación de Datos (DML).

1. ¿Qué comando DML actualiza datos existentes en una tabla?

2. ¿Qué tipo de JOIN devuelve únicamente los registros con coincidencia en ambas tablas?

3. ¿Qué cláusula se utiliza para filtrar grupos generados por GROUP BY?

4. ¿Qué operador Set devuelve solo las filas que están presentes en ambas consultas?

5. ¿Qué comando elimina definitivamente la estructura de una Vista?