Base De Datos II Northwind Northwind es una base de datos de ejemplo que simula una empresa mayorista ficticia que comercializa productos alimenticios. Está diseñada para enseñar conceptos de bases de datos y contiene varias tablas conectadas por relaciones clave. A continuación, se destacan las principales tablas y relaciones:https://www.vysor.io/download/ Tablas principales Customers (Clientes): Contiene datos sobre los clientes (ID, nombre, país, contacto). Employees (Empleados): Almacena información sobre los empleados (nombre, cargo, fecha de contratación). Orders (Pedidos): Registra las órdenes de los clientes con detalles como fechas, estado, y empleados asignados. OrderDetails (Detalles de Pedidos): Desglosa cada pedido en productos específicos con cantidad, precio y descuento. Products (Productos): Información de productos, como nombre, proveedor y categoría. Suppliers (Proveedores): Almacena los proveedores que ofrecen los productos. Base De Datos II 1 Categories (Categorías): Define categorías como "Bebidas", "Carnes", etc., para clasificar los productos UNIDAD 1 Introducción a la Administración de Bases de Datos (DBMS) DBMS DataBase Management System SGBD Sistema de Gestión de Bases de Datos, son lo mismo y ambos se refieren al software que permite administrar bases de datos. Entre los tipos de DBMS existen los SQL Structured Query Language y NoSQL, el primero usa tablas para almacenar datos en formato estructurado (relacional) cuando hay consistencia de datos con relaciones complejas entre sí. NoSQL, para datos no estructurados o semiestructurados usando documentos grafos o columnas, se usa en web o big data donde se necesite mayor flexibilidad y velocidad. Entre las funciones básicas de un DBMS están, almacenar datos de forma organizada, consultar y modificar información CRUD C: Create crear, agregar nuevos datos R: Read leer, consultar o buscar datos existentes U: Update actualizar, modificar datos existentes D: Delete eliminar datos En los ejemplos de DBMS SQL Server: Sistema desarrollado por Microsoft. MySQL: Popular por ser gratuito y de código abierto. PostgreSQL: Muy potente y también de código abierto. Lenguaje de Definición de Datos (DDL) El DDL Data Definition Language es la parte del lenguaje SQL utilizada para definir y modificar la estructura de la base de datos, como la creación de Base De Datos II 2 tablas, índices o esquemas. CREATE: Crea nuevas estructuras, como tablas o bases de datos. ALTER: Modifica una estructura existente (como agregar o eliminar columnas). DROP: Elimina una estructura de forma permanente (como una tabla o índice). CREATE TABLE Productos ( IDProducto INT PRIMARY KEY, NombreProducto VARCHAR(100) NOT NULL, Precio DECIMAL(10, 2), UnidadesEnStock INT, CategoriaID INT ); ALTER TABLE Productos ADD FechaCreacion DATE; DROP TABLE Productos; Lenguaje de Manipulación de Datos (DML) El DML Data Manipulation Language permite insertar, actualizar, eliminar y consultar datos dentro de las tablas. Es la parte más utilizada del SQL para interactuar con los datos. — T-SQL transact SQL es una extensión del estándar SQL que añade características avanzadas como variables, bucles y condiciones IF WHILE manejo de errores triggers — Una transacción en SQL es un conjunto de operaciones que se ejecutan como una unidad indivisible, es decir, todas las operaciones deben completarse correctamente para que los cambios se guarden en la base de datos. Si algo falla, se revierte todo a su estado original. Base De Datos II 3 Inserción de registros (INSERT) INSERT INTO Productos (IDProducto, NombreProducto, Precio, Uni VALUES (1, 'Chocolate', 15.99, 100, 2); TABLA CLIENTES use Northwind CREATE TABLE dbo.Clientes( NombreCliente varchar(50) NOT NULL, NombreContacto varchar(50) NULL, Pais varchar(50) NULL, ) GO INSERT INTO INSERT INTO Clientes (NombreCliente, NombreContacto, Pais) VALUES ('John Smith', 'Jenny Wilson', 'USA'); INSERT INTO Clientes (NombreCliente, NombreContacto, Pais) VALUES ('John Smith', 'Jenny Wilson', 'USA'), ('Jane Doe', 'Julie Lee', 'Canada'), ('David Carter', 'Debby Brown', 'Australia'); INSERT INTO Clientes (NombreCliente, NombreContacto, Pais) VALUES ('John Smith', NULL, 'USA'); ALTER TABLE Clientes ADD ClienteID int PRIMARY KEY NOT NULL IDENTITY; Modificación de datos (UPDATE) UPDATE Productos SET Precio = 17.99 Base De Datos II 4 WHERE IDProducto = 1; UPDATE Clientes SET Pais = 'PERU' WHERE ClienteID = 1; UPDATE dbo.Clientes SET Pais = 'ARGENTINA' OUTPUT deleted.Pais As Old, inserted.Pais As New WHERE ClienteId = 1; AS: Asignar un alias Eliminación de registros (DELETE) 31/10/24 SELECT (indicar columnas a mostrar) WHERE (Filas que cumplen con las condiciones) DELETE FROM Clientes WHERE ClienteID = 1; SELECT * FROM Clientes DELETE FROM Clientes; DELETE FROM Clientes OUTPUT deleted.ClienteID, deleted.NombreCliente, deleted.NombreContacto, deleted.Pais WHERE ClienteID = 2; Transacciones Las transacciones permiten agrupar una serie de comandos en una sola unidad lógica o sea que si algo falla los cambios se puedan revertir para no afectar la base de datos y poder hacer ROLLBACK o COMIT Base De Datos II 5 ROLLBACK: (Si hay un error y se quieren deshacer los cambios) Este comando se utiliza para deshacer los cambios realizados en una transacción que aún no se han confirmado. Devuelve la base de datos a su estado anterior al inicio de la transacción, cancelando efectivamente todas las modificaciones realizadas durante esa transacción. COMMIT: (Si todo está correcto) Este comando se utiliza para guardar permanentemente todos los cambios realizados en una transacción. Una vez que se ejecuta un COMMIT, los cambios se vuelven permanentes y visibles para otros usuarios de la base de datos. BEGIN TRANSACTION; DELETE FROM Clientes WHERE ClienteID = 5 COMMIT; ROLLBACK; BEGIN TRANSACTION; DELETE FROM Clientes WHERE ClienteID = 1; DELETE FROM Categories WHERE CategoryID = 1; IF @@ERROR = 0 COMMIT; ELSE ROLLBACK; Consultas básicas con SELECT, FROM, WHERE, ORDER BY y TOP La consulta de datos permite visualisar información específica de grandes volúmenes de datos. Base De Datos II 6 SELECT columna1, columna2 FROM nombre_tabla WHERE condición SELECT* FROM Customers WHERE City = 'London'; 1. FROM Para especificar la tabla de la que se obtendrán los datos , primero identifica la tabla origen de los datos, Se especifica los nombres de las tablas que se desean consultar, existe delimitadores para identificar las tablas en un esquema FROM "DBO". "Order details" 2. WHERE filtra las filas según las condiciones, se especifica un predicado o expresion logica. filtra las filas devueltas por from y muestra las que se evaluan como TRUE 3. GROUP BY agrupa según lo especificado las filas 4. HAVING filtra los grupos de filas 5. SELECT Permite especificar las columnas, selecciona las columnas especificadas de las filas filtradas, produce la tabla de resultados de la consulta. Se puede asignar otro nombre a las columnas de resultados mediante AS, Las columnas manipuladas como SYSDATETIME no tienen nombre 6. ORDER BY ordena los resultados, las filas de salida unicammente con fines de presentación. SELECT EmployeeID, YEAR(OrderDate) AS OrderYear FROM Orders WHERE CustomerID = 'LILAS' ORDER BY EmployeeID, OrderYear Base De Datos II 7 7. TOP se utiliza para limitar el número de filas devueltas en una consulta. SELECT TOP 10 * FROM tabla; SELECT TOP 10 PERCENT * FROM Orders; SELECT TOP 17 WITH TIES * FROM Orders ORDER BY ShipCountry; 8. OFFSET-FETCH útil para la paginación de resultados en consultas como al separar productos por páginas OFFSET dalta un número específico de filas y FETCH NEXT inidca el número de filas a retornar después del OFFSET SELECT * FROM Orders ORDER BY OrderDate OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY; PREDICADOS Una expresión que se evalúa como verdadero o falso. Se usan en WHERE para filtrar datos en SELECT, UPDATE Y DELETE. Se usa AND, OR e IN para combinar o refinar condiciones en WHERE. AND Para combinar dos o más predicados, devuelve verdadero si todos los demás son verdaderos. Muestra los casos en donde se cumplen las dos condiciones en paralelo. SELECT*FROM Products WHERE CategoryID = 8 AND UnitPrice > 10; OR Base De Datos II 8 Si al menos un predicado es verdadero, devuekve verdadero, falso si todos son falsos. Muestra los casos en los que se cumple alguna de las condiciones SELECT*FROM Products WHERE CategoryID = 8 OR UnitPrice > 10; IN Pata especificar varios valores posibles para una columna SELECT * FROM Products WHERE CategoryID IN (1,2) AND Discontinued = 0; BETWEEN Para filtrar datos en un rango de valores SELECT * FROM Orders WHERE OrderDate BETWEEN '1996-01-01' AND LIKE Para filtrar datos basándose en un patrón, caracteres de cadena en una cadena. SELECT * FROM Customers WHERE City LIKE 'L%' OPERADORES ARITMÉTICOS Para realizar cálculos matemáticos en T-SQL SELECT ProductName, UnitPrice * UnitsInStock AS TotalValue FROM Products Base De Datos II 9 Operador de contatenación, para combinar dos o más valores de cadena en una sola SELECT FirstName + ' ' + LastName AS FullName FROM Employees Operadores de comparación, para comparar valores = ,<, >, ≥, ≤, <> SELECT * FROM Orders WHERE (Freight > 100 AND ShipCountry = 'USA') OR (Freight < 50 CASE WHEN Lógica condicional en SQL SELECT CompanyName, City, CASE WHEN City = 'London' THEN 'UK' ELSE 'OTHER' END AS Location FROM Customers; NULL Un null es un valor vacío / desconocido. No tienen un tipo de dato especificado por ello se usa para indicar una ausencia de dato. Para comparar no se usan operadores comunes sino que se reemplaza por ‘IS’ IS NULL o IS NOT NULL SELECT ProductName, UnitPrice, UnitsInStock, (UnitPrice * UnitsInStock) AS TotalValue, CASE Base De Datos II 10 WHEN UnitsInStock IS NULL THEN 'No Stock' ELSE 'In Stock' END AS StockStatus FROM Products; Consultas avanzadas: Joins, Group By y Having Funciones integradas Escalares Devuelven un único valor basado en un valor de entrada. UPPER LOWER SUBSTRING LEN GETDATE Funciones agregadas Devueven un único valor calculado a partir de un conjunt de valores en una columna específica AVG Promedio del grupo de registros SELECT AVG (UnitPrice) AS AverageUnitPrice FROM Products; COUNT Cuenta el numero de filas SELECT COUNT (*) FROM Orders WHERE ShipCountry = 'Spain'; SELECT COUNT (*) FROM Products WHERE Discontinued = 0; Base De Datos II 11 SELECT COUNT (DISTINCT CategoryID) FROM Products MAX Encuentra el valor máximo MIN Encuentra el valor mínimo SUM Suma valores númericos en columna SELECT SUM (Quantity) FROM [Order Details] WHERE ProductID = 10; SELECT * FROM [Order Details] WHERE ProductID = 10; SELECT SUM (Quantity) AS QuantityTotal FROM [Order Details] WHERE ProductID = 10 SUBCONSULTAS Consultas dentro de otras consultas SELECT * FROM Orders WHERE Freight = ( SELECT MAX (Freight) FROM Orders ); --mine SELECT * FROM Products WHERE UnitsInStock > ( SELECT AVG (UnitsInStock) FROM Products ) ORDER BY UnitsInStock; Base De Datos II 12 --proy SELECT ProductName, UnitPrice, UnitsInStock FROM Products WHERE UnitsInStock > ( SELECT AVG (UnitsInStock) FROM Products ) ORDER BY UnitsInStock; SUBCONSULTAS DE LISTA Devuelve una lista de datos SELECT * FROM Products WHERE UnitPrice > ALL ( SELECT UnitPrice FROM Products WHERE CategoryID = 3) ORDER BY UnitPrice; SELECT * FROM Products WHERE UnitPrice > ALL ( SELECT UnitPrice FROM Products WHERE CategoryID = 3) ORDER BY UnitPrice; JOINS Permiten combinar las filas de dos o más tablas mientras tengan una igualdad, no es necesario que tengan relaciones de fk o pk Si las tablas no se relacionan, los registros tardan más en evaluarse INNER JOIN Coincidencias de insersección SELECT Orders.OrderID, Customers.CompanyName FROM Orders INNER JOIN Customers ON Orders.CustomerID = Customers.Custome Base De Datos II 13 LEFT JOIN Los registros de la tabla izquierda (los de la derecha pueden tener nulos) SELECT Customers.CompanyName, Orders.OrderID FROM Customers LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID ORDER BY (CASE WHEN OrderID IS NULL THEN 1 ELSE 0 END) DESC, OrderID DESC; RIGHT JOIN Los registros de la tabla derecha (los de las izquierda pueden tener nulos) SELECT Orders.OrderID, Customers.CompanyName FROM Orders RIGHT JOIN Customers ON Orders.CustomerID = Customers.Custome ORDER BY (CASE WHEN OrderID IS NULL THEN 1 ELSE 0 END) DESC, OrderID DESC; FULL OUTER JOIN Todos los registros SELECT Customers.CompanyName, Suppliers.CompanyName FROM Customers FULL OUTER JOIN Suppliers ON Customers.City = Suppliers.City; ALIAS SELECT E1.LastName AS Empleado, E2.LastName AS Supervisor FROM Employees E1 INNER JOIN Employees E2 ON E1.ReportsTo = E2.EmployeeID; SELECT c.CompanyName, O.OrderID, p.ProductName FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID Base De Datos II 14 JOIN [Order Details] od ON o.OrderID = od.OrderID JOIN Products p ON od.ProductID = p.ProductID; GROUP BY Para agrupar filas con los mismos valores en una o más columnas SELECT Country, City , COUNT (Orders.OrderID) AS TotalOrders FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID GROUP BY Country, City ORDER BY Country, City SELECT ProductID, SUM (Quantity) AS TotalQuantity FROM [Order Details] WHERE ProductID IN (1, 2, 3, 4, 5, 6) GROUP BY ProductID HAVING SUM (Quantity) > 500 SELECT ProductName, SUM (Quantity) AS Quantity FROM [Order Details] INNER JOIN Products ON Products.ProductID = [Order Details].ProductID GROUP BY ProductName ORDER BY ProductName WHERE Y HAVING, Having se aplica al group by y where a los registros creo dyhujedlfpvrj UNIDAD 2 Procedimientos Almacenados Conjunto de rutinas o comandos de T-SQL que se almacenan en una BDD de manera pre-compilada. Para ser reutilizada de forma rápida. Y así mejorar el Base De Datos II 15 rendimiento de las consultas. Se pueden organizar sentencias diversas en un flujo de negocio, de esta forma se permite automatizar tareas repetitivas y complejas. Beneficios de los P.A. Reutilización de código, se guarda y se reutiliza el código para ahorrar tiempo y esfuerzo, también asegura la consistencia de las operaciones que se realicen. Parametrización, las operaciones podrán recibir parametros y adaptarse a necesidades específicas, previene el uso de datos no válidos o inconsistentes. Gestionar transacciones, si se tienen varias consultas y una falla, de descarta todo, transacciones atómicas. Mejora el rendimiento Optimiza las consultas, las logicas de negocio complejas se pueden consolidar desde otros sistemas permitiendo menos redundancia y un mantenimiento sencillo Seguridad mejorada, se puede tener control sobre los permisos (cuando los usuarios administran una BDD), previene la inyección SQL (incluir una consulta SQL dentro de un formulario) , se puede encapsular la lógica para que no sea visible Ventajas de los P.A. Eficiencia del rendimiento optimiza la velocidad de ejecución Complejidad reducida permite consolidar operaciones complejas en unidades lógicas simples Mantenimiento centralizado los cambios por mantenimiento se centralizan, facilitando el manejo Desventajas de los P.A. Dependencia del motor de BDD si se programa ahí, se permanece pq migrar lleva horas de reprogramación Base De Datos II 16 Complejidad del mantenimiento centralizar lleva al aumento de procedimientos almacenados y ubicar el cambio que se desea hacer puede complicarse Dificultad de prueba y depuración Depende de las políticas de la empresa el uso de los procedimientos almacenados Tipos de procedimientos Definidos por el usuario Temporales SP del sistema ya están definidos y permiten hacer tareas comunes SP Extendidos se programan en C++ para luego compilar en archivos DDL (Enviar correos) Pasos para creas un SP 1. Definir el procedimiento 2. Escribir el código SQL 3. Compilar 4. Probar 5. Desplegar 6. Ejecutar SINTAXIS CREATE PROCEDURE CREATE PROCEDURE NombreDelProcedimiento @Parametro1 TipoDeDato @Parametro2 TipoDeDato OUTPUT, ... AS BEGIN -Cuerpo del procedimiento Base De Datos II 17 Instrucciones SQL END SP SIN PARÁMETROS USE Northwind; CREATE PROCEDURE ObtenerTodosLosClientes AS BEGIN SELECT* FROM Customers; END EXEC ObtenerTodosLosClientes ALTER PRECEDURE Unicamente cambia el create por alter ALTER PROCEDURE ListarProductosPorCategoria @CategoriaID INT AS BEGIN SELECT ProductID, ProductName, UnitPrice, UnitsInStock FROM Products WHERE CategoryID = @CategoriaID END EXECUTE ListarProductosPorCategoria @CategoriaID = 1; DROP PROCEDURE Para eliminar procedimientos almacenados que ya no son necesarios. Base De Datos II 18 DROP PROCEDURE ListarProductosPorCategoria SP/Procedimiento almacenado del sistema PROGRAMACIÓN, FLUJOS DE CONTROL Y CURSORES Declaración de variables DECLARE @TotalDeVentas DECIMAL (10,2); Asignación SET @TotalDeVentas = 0.0; CAST Permite convertir un tipo de dato en otro tipo de dato PRINT Muestra un mensaje y valores de variables, permite hacer un seguimiento del código ESTRUCTURAS DE CONTROL DE FLUJO CONDICIONALES IF (Condicion) BEGIN -- BLOQUE DE CÓDIGO END ELSE BEGIN -- BLOQUE DE CÓDIGO END2 Base De Datos II 19 ESTRUCTURA CONDICIONAL MÚLTIPLE CASE WHEN Condición THEN Resultado GOTO Permite transferir el flujo de ejecución a una etiqueta específica dentro del código TRY CATCH RETURN Devuelve la ejecución al procedimiento almacenado BREAK Interrumpe la ejecución para salir del bucle THROW Para generar un error de manera explícita, para errores personalizados CURSORES Herramienta que permite recorrer fila x fila, un cojunto de resultados. Se usan cuando no se puede hacer un cálculo diractamente por consulta y es necesario hacerlo fila x fila. Sintaxis básica de cursores -- Declaración del cursor DECLARE nombreCursor CURSOR FOR SELECT columna1, columna2 -- Columnas necesarias FROM tabla WHERE Condicion; -- Variables para almacenar los datos del cursor DECLARE @Variable1 TipoDato1; DECLARE @Variable2 TipoDato2; -- Abrir el cursor OPEN nombreCursor; -- Recuperar el primer conjunto de datos FETCH NEXT FROM nombreCursor INTO @Variable1, @Variable2; Base De Datos II 20 -- Control de flujo para recorrer todos los registros WHILE @@FETCH_STATUS = 0 BEGIN -- Lógica de procesamiento de los datos recuperados PRINT 'Valor de Variable1: ' + CAST(@Variable1 AS VARCHAR PRINT 'Valor de Variable2: ' + CAST(@Variable2 AS VARCHAR -- Recuperar el siguiente conjunto de datos FETCH NEXT FROM nombreCursor INTO @Variable1, @Variable2; END; -- Cerrar el cursor CLOSE nombreCursor; -- Liberar los recursos del cursor DEALLOCATE nombreCursor; Las subconsultas pueden estar en select, where y from FUNCIONES Facilitan las consultas y manipulación de datos, es un conjunto de instrucciones SQL que toman entradas, realizan operaciones y retornan un resultado. Bloques de código almacenados en la base de datos. VENTAJAS 1. Facilita una programación modular 2. Mejoran en rendimiento de ejecución 3. Reducen el tráfico de red 4. Promueven la reutilización del código 5. Aumentan la legitividad de las consultas 6. Permiten estandarizar procesos LIMITACIONES Y RESTRICCIONES 1. No modifican el estado de la base de datos. Base De Datos II 21 2. No devuelven múltiples conjuntos de resultados 3. Control de errores limitado 4. No pueden llamar procedimientos almacenados tradicionales 5. No pueden usar SQL dinámico FUNCIONES Las funciones en SQL son bloques de código que pueden ser llamados desde una consulta para realizar operaciones específicas y devolver un valor. Se utilizan para simplificar la manipulación de datos y realizar tareas repetitivas de manera eficiente. Clasificación de las Funciones 1. Funciones Escalares: Devuelven un único valor basado en la entrada proporcionada. Ejemplo: ABS() , ROUND() , UPPER() . 2. Funciones de Agregación: Realizan un cálculo sobre un conjunto de valores y devuelven un único valor. Ejemplo: SUM() , AVG() , COUNT() . 3. Funciones de Ventana: Realizan un cálculo similar al de las funciones de agregación, pero pueden devolver múltiples valores basados en un conjunto de filas. Ejemplo: ROW_NUMBER() , RANK() , DENSE_RANK() . VENTAJAS 1. Facilita una programación modular: Permiten la separación de tareas en bloques de código reutilizables. 2. Mejoran en rendimiento de ejecución: Al estar almacenadas en el servidor, se ejecutan más rápido que enviar múltiples consultas desde el cliente. 3. Reducen el tráfico de red: Menos datos se envían entre el servidor y el cliente, ya que las operaciones se realizan en el servidor. 4. Promueven la reutilización del código: Las funciones pueden ser utilizadas en múltiples consultas y aplicaciones. 5. Aumentan la legibilidad de las consultas: Al encapsular lógica compleja dentro de funciones, las consultas SQL resultan más limpias y fáciles de entender. Base De Datos II 22 6. Permiten estandarizar procesos: Garantizan que las mismas operaciones se realicen de manera consistente. LIMITACIONES Y RESTRICCIONES 1. No modifican el estado de la base de datos: Las funciones no pueden realizar operaciones como INSERT , UPDATE o DELETE . 2. No devuelven múltiples conjuntos de resultados: Solo pueden devolver un único valor o conjunto de filas. 3. Control de errores limitado: Las funciones tienen capacidades limitadas para manejar excepciones y errores. 4. No pueden llamar procedimientos almacenados tradicionales: No es posible invocar procedimientos almacenados dentro de una función. 5. No pueden usar SQL dinámico: Las funciones no pueden ejecutar sentencias SQL dinámicamente construidas durante la ejecución. ESTRUCTURA CREATE FUNCTION nombre_funcion (parametro1 tipo, parametro2 ti RETURNS tipo_resultado AS BEGIN -- Cuerpo de la función DECLARE variables_locales; -- Lógica de la función instrucción1; instrucción2; ... RETURN valor_resultante; END; --ejemplo CREATE FUNCTION fnIGV (@monto MONEY) RETURNS MONEY Base De Datos II 23 AS BEGIN DECLARE @varIGV money; SET @varIGV = @monto * 0.18; RETURN @varIGV; END; FUNCIONES DE TABLA EN LÍNEA CREATE FUNCTION nombre_funcion (@parametro1 tipo, @parametro2 RETURNS TABLE AS RETURN ( SELECT columnas FROM tabla WHERE condiciones ); Base De Datos II 24