0% encontró este documento útil (0 votos)
7 vistas15 páginas

BASE DE DATOS GUIA

El documento detalla la creación y gestión de bases de datos en SQL Server, incluyendo la creación de tablas para un sistema de ventas y un banco, así como la inserción de datos y la implementación de procedimientos almacenados y triggers. Se abordan operaciones como la inserción de clientes y cuentas, la actualización de registros y la auditoría de inserciones mediante triggers. Además, se presentan consultas para obtener información relevante sobre clientes, pedidos y productos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas15 páginas

BASE DE DATOS GUIA

El documento detalla la creación y gestión de bases de datos en SQL Server, incluyendo la creación de tablas para un sistema de ventas y un banco, así como la inserción de datos y la implementación de procedimientos almacenados y triggers. Se abordan operaciones como la inserción de clientes y cuentas, la actualización de registros y la auditoría de inserciones mediante triggers. Además, se presentan consultas para obtener información relevante sobre clientes, pedidos y productos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 15

BASE DE DATOS: Guía

--REPASO 1 Y 2

CREATE DATABASE Ventas;


use Ventas;
go
CREATE TABLE SistemaVentas (
ClienteID INT IDENTITY(1,1) PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Email VARCHAR(100) UNIQUE NOT NULL,
Telefono VARCHAR(15),
FechaRegistro DATE DEFAULT GETDATE()
);

CREATE TABLE Productos (


ProductoID INT IDENTITY(1,1) PRIMARY KEY,
NombreProducto VARCHAR(50) NOT NULL,
Precio DECIMAL(10,2) NOT NULL CHECK (Precio >= 0),
Stock INT NOT NULL CHECK (Stock >= 0)
);

/*CREATE TABLE Pedidos (


PedidoID INT IDENTITY(1,1) PRIMARY KEY,
ClienteID INT NOT NULL,
FechaPedido DATE DEFAULT GETDATE(),
Total DECIMAL(10,2) NOT NULL CHECK (Total >= 0),
FOREIGN KEY (ClienteID) REFERENCES SistemaVentas(ClienteID) ON DELETE CASCADE
);*/

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Pedidos')


BEGIN
CREATE TABLE Pedidos (
PedidoID INT IDENTITY(1,1) PRIMARY KEY,
ClienteID INT NOT NULL,
FechaPedido DATE DEFAULT GETDATE(),
Total DECIMAL(10,2) NOT NULL CHECK (Total >= 0),
FOREIGN KEY (ClienteID) REFERENCES SistemaVentas(ClienteID) ON DELETE
CASCADE
);
END

CREATE TABLE DetallePedido (


DetalleID INT IDENTITY(1,1) PRIMARY KEY,
PedidoID INT NOT NULL,
ProductoID INT NOT NULL,
Cantidad INT NOT NULL CHECK (Cantidad > 0),
PrecioUnitario DECIMAL(10,2) NOT NULL CHECK (PrecioUnitario >= 0),
FOREIGN KEY (PedidoID) REFERENCES Pedidos(PedidoID) ON DELETE CASCADE,
FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID) ON DELETE CASCADE
);

-- Insertar datos en la tabla SistemaVentas (Clientes)


INSERT INTO SistemaVentas (Nombre, Email, Telefono, FechaRegistro)
VALUES
('Juan Perez', '[email protected]', '123456789', '2025-01-01'),
('Ana Gomez', '[email protected]', '987654321', '2025-01-10'),
('Luis Martinez', '[email protected]', '456789123', '2025-01-15');

-- Insertar datos en la tabla Productos


INSERT INTO Productos (NombreProducto, Precio, Stock)
VALUES
('Laptop', 1200.00, 10),
('Mouse', 25.00, 50),
('Teclado', 45.00, 30);

-- Insertar un pedido para Juan Perez (ClienteID = 1)


INSERT INTO Pedidos (ClienteID, FechaPedido, Total)
VALUES ((SELECT ClienteID FROM SistemaVentas WHERE Nombre = 'Juan Perez'), '2025-01-
20', 0);

-- Obtener el PedidoID recién generado


DECLARE @PedidoID INT;
SET @PedidoID = SCOPE_IDENTITY();

--Error
-- Insertar detalles del pedido
/*INSERT INTO DetallePedido (PedidoID, ProductoID, Cantidad, PrecioUnitario)
VALUES
(@PedidoID, (SELECT ProductoID FROM Productos WHERE NombreProducto = 'Laptop'), 1,
1200.00),
(@PedidoID, (SELECT ProductoID FROM Productos WHERE NombreProducto = 'Mouse'), 2,
25.00);+*/

DECLARE @PedidoID INT = 1; -- Asigna el ID del pedido correspondiente

INSERT INTO DetallePedido (PedidoID, ProductoID, Cantidad, PrecioUnitario)


VALUES
(@PedidoID, (SELECT ProductoID FROM Productos WHERE NombreProducto = 'Laptop'), 1,
1200.00);

INSERT INTO DetallePedido (PedidoID, ProductoID, Cantidad, PrecioUnitario)


VALUES
(@PedidoID, (SELECT ProductoID FROM Productos WHERE NombreProducto = 'Mouse'), 2,
25.00);

-- Actualizar el total del pedido sumando los detalles


UPDATE Pedidos
SET Total = (SELECT SUM(Cantidad * PrecioUnitario) FROM DetallePedido WHERE PedidoID
= @PedidoID)
WHERE PedidoID = @PedidoID;

--5.1 Listar todos los clientes registrados


SELECT * FROM SistemaVentas;

--5.2 Obtener los pedidos de un cliente específico (ejemplo: Juan Perez)


SELECT P.PedidoID, P.FechaPedido, P.Total
FROM Pedidos P
JOIN SistemaVentas C ON P.ClienteID = C.ClienteID
WHERE C.Nombre = 'Juan Perez';
--5.3 Productos más vendidos (ordenados por cantidad total vendida, de mayor a
menor)
SELECT P.NombreProducto, SUM(DP.Cantidad) AS TotalVendido
FROM DetallePedido DP
JOIN Productos P ON DP.ProductoID = P.ProductoID
GROUP BY P.NombreProducto
ORDER BY TotalVendido DESC;

--5.4 Verificar el stock de productos


SELECT ProductoID, NombreProducto, stock FROM Productos;

--5.5 Calcular las ganancias totales (suma de todos los pedidos)


SELECT SUM(Total) AS GananciaTatales From Pedidos;

--5.6 Obtener detalles de un pedido específico (ejemplo: PedidoID = 1)


SELECT DP.PedidoID, P.NombreProducto, DP.Cantidad, DP.PrecioUnitario,
(DP.Cantidad * DP.PrecioUnitario) AS Subtotal
FROM DetallePedido DP
JOIN Productos P ON DP.ProductoID = P.ProductoID
WHERE DP.PedidoID = 1;

SELECT * FROM Pedidos;

--5.7 Obtener el total de ventas en un rango de fechas (2025-01-05 a 2025-01-10)


SELECT SUM(Total) AS TotalVentas
FROM Pedidos
WHERE FechaPedido BETWEEN '2025-01-05' AND '2025-01-10';

--5.8 Obtener una lista de clientes cuyos nombres contienen "Juan"


SELECT * FROM SistemaVentas WHERE Nombre LIKE '%Juan%';

--5.9 Obtener la cantidad total de productos vendidos cuyos precios unitarios están
entre $20 y $100
SELECT SUM(DP.Cantidad) AS TotalProductosVendidos
FROM DetallePedido DP
WHERE DP.PrecioUnitario BETWEEN 20 AND 100;

--5.10 Obtener los productos con stock entre 5 y 50 unidades, junto con el valor
total de ese stock
SELECT ProductoID, NombreProducto, Stock, (Stock * Precio) AS ValorTotalStock
FROM Productos
WHERE Stock BETWEEN 5 AND 50;

--5.11 Obtener todos los pedidos realizados por clientes cuyo nombre comienza con
"Ana"
SELECT P.PedidoID, C.Nombre, P.FechaPedido, P.Total
FROM Pedidos P
JOIN SistemaVentas C ON P.ClienteID = C.ClienteID
WHERE C.Nombre LIKE 'Ana%';

SELECT * FROM Pedidos;

--5.12 Obtener el precio promedio de todos los productos


SELECT AVG(Precio) AS PrecioPromedio FROM Productos;

--5.13 Muestra la venta máxima, mínima y el promedio de ventas de todos los pedidos
SELECT
MAX(Total) AS VentaMaxima,
MIN(Total) AS VentaMinima,
AVG(Total) AS VentaPromedio
FROM Pedidos;

--5.14 Obtener la cantidad total de pedidos realizados por cada cliente


SELECT C.ClienteID, C.Nombre, COUNT(P.PedidoID) AS TotalPedidos
FROM SistemaVentas C
LEFT JOIN Pedidos P ON C.ClienteID = P.ClienteID
GROUP BY C.ClienteID, C.Nombre;

--5.15 Muestra el total de unidades vendidas por cada producto, ordenados de mayor a
menor
SELECT P.NombreProducto, SUM(DP.Cantidad) AS TotalUnidadesVendidas
FROM DetallePedido DP
JOIN Productos P ON DP.ProductoID = P.ProductoID
GROUP BY P.NombreProducto
ORDER BY TotalUnidadesVendidas DESC;

SELECT * FROM Productos;

Practica 3 – Procedimientos Almacenados (Store Procedure)

Objetivo:

1. Entender como los procedimientos almacenados (subrutinas) mejoran el rendimiento de


consultas al evitar hacer tareas repetitivas.
2. Entender como SP nos brindan seguridad ya que nos permiten ingresar valores de
entrada o parámetros ocultando los detalles del código.

Procedimiento:

1. Crear la base de datos cliente en MS SQL Server:

--Uso de los Store Procedure

-- Crear la base de datos Banco

CREATE DATABASE Banco;

GO --Instrucción que separa el bloque y le indica al servidor que lo ejecute como una unidad.

-- Usar la base de datos Banco

USE Banco;

GO

2. Crear las tablas: Clientes y Cuentas de la base de datos Banco

---- Crear la tabla Clientes

CREATE TABLE Clientes (

ClienteID INT IDENTITY(1,1) PRIMARY KEY, -- ID autoincremental


Nombre NVARCHAR(100) NOT NULL, -- Nombre del cliente

Apellido NVARCHAR(100) NOT NULL, -- Apellido del cliente

Email NVARCHAR(150) NOT NULL UNIQUE, -- Correo único

Telefono NVARCHAR(15) NULL -- Teléfono (opcional)

);

GO

-- Crear la tabla Cuentas

CREATE TABLE Cuentas (

CuentaID INT IDENTITY(1,1) PRIMARY KEY, -- ID autoincremental

ClienteID INT NOT NULL, -- ID del cliente (relación con Clientes)

NumeroCuenta NVARCHAR(20) NOT NULL UNIQUE, -- Número único de cuenta

Saldo DECIMAL(10,2) NOT NULL, -- Saldo de la cuenta

FechaCreacion DATE NOT NULL DEFAULT GETDATE(), -- Fecha de creación con valor
predeterminado

FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) -- Llave foránea

);

GO

3. Insertar registros

-- Insertar en Clientes

INSERT INTO Clientes (Nombre, Apellido, Email, Telefono)

VALUES

('Juan', 'Pérez', '[email protected]', '555-1234'),

('Ana', 'Gómez', '[email protected]', '555-5678'),

('Carlos', 'López', '[email protected]', '555-9101'),

('María', 'Ramírez', '[email protected]', '555-1122'),

('Luis', 'Hernández', '[email protected]', '555-3344');

GO

-- Insertar en Cuentas

INSERT INTO Cuentas (ClienteID, NumeroCuenta, Saldo)


VALUES

(1, '1234567890', 1000.50), -- Cuenta de Juan

(2, '2345678901', 2000.00), -- Cuenta de Ana

(3, '3456789012', 1500.75), -- Cuenta de Carlos

(4, '4567890123', 3000.00), -- Cuenta de María

(5, '5678901234', 500.25); -- Cuenta de Luis

GO

4. Verificar que los datos han sido insertados

-- Consultar la tabla Clientes

SELECT * FROM Clientes;

-- Consultar la tabla Cuentas

SELECT * FROM Cuentas;

5. Crea un SP para insertar un Cliente en la tabla Clientes

CREATE PROCEDURE InsertarCliente -- Nombre del SP, a continuación parámetros que el usuario
debe proporcionar para llamar al SP

@Nombre NVARCHAR(100), -- Parámetro para el nombre del cliente

@Apellido NVARCHAR(100), -- Parámetro para el apellido del cliente

@Email NVARCHAR(150), -- Parámetro para el correo electrónico del cliente

@Telefono NVARCHAR(15) -- Parámetro para el número de teléfono del cliente

AS -- Inicio del SP

BEGIN -- Encierra las instrucciones SQL que se ejecutarán cuando se llame al


procedimiento.

INSERT INTO Clientes (Nombre, Apellido, Email, Telefono) -- Instrucción para insertar datos en
la tabla Clientes

VALUES (@Nombre, @Apellido, @Email, @Telefono); -- Valores que provienen de los


parámetros del procedimiento

PRINT 'Cliente insertado correctamente.'; -- Mensaje para confirmar que el cliente fue
insertado

END;
GO

6. Ejecución SP InsertarCliente

-- Ejecución del SP InsertarCliente para insertar un cliente a la tabla Cliente

-- Pasos de ejecución del SP:

-- 1. Los valores proporcionados ('Sofía', 'Martínez', etc.) se asignan a los parámetros


correspondientes (@Nombre, @Apellido, etc.).

-- 2. El procedimiento inserta esos valores en la tabla Clientes.

-- 3. Si todo sale bien, el procedimiento imprime: Cliente insertado correctamente.

EXEC InsertarCliente

@Nombre = 'Sofía',

@Apellido = 'Martínez',

@Email = '[email protected]',

@Telefono = '555-7788';

/* Observaciones:

Automatización: No tienes que escribir la instrucción INSERT INTO cada vez.

Reutilización: Puedes llamar al procedimiento siempre que necesites insertar un cliente.

Manejo de parámetros: Los valores se controlan de manera clara y organizada a través de los
parámetros.*/

Resultado:
6. Verificar que el cliente se ha añadido correctamente a través del SP InsertarCliente

select * from Clientes

7. Verificar donde se ha guardado el SP InsertarCliente

8. Ejercicio: Añadir un cliente más con los siguientes parámetros: Cristina, Granda,
[email protected] y 111-1234

9. Crear un procedimiento almacenado para actualizar un registro de la tabla Cuenta

CREATE PROCEDURE ActualizarCuenta -- Nombre SP, a continuación se ingresa los parámetros

@CuentaID INT, -- ID de la cuenta que queremos actualizar

@NuevoSaldo DECIMAL(10, 2), -- Nuevo saldo para la cuenta

@NuevoNumeroCuenta NVARCHAR(20) -- Nuevo número de cuenta (opcional)

AS --Inicio del SP

BEGIN -- Encierra las instrucciones SQL que se ejecutarán cuando se llame al


procedimiento.

-- Actualizar los datos de la cuenta (antes verificar los datos de la tabla Cuentas)

UPDATE Cuentas
SET

Saldo = @NuevoSaldo, -- Actualiza el saldo

NumeroCuenta = @NuevoNumeroCuenta -- Actualiza el número de cuenta

WHERE CuentaID = @CuentaID; -- Condición para la cuenta específica

PRINT 'Cuenta actualizada correctamente.'; -- Mensaje de confirmación

END;

GO

10. Supongamos que quieres actualizar la cuenta con ID 2 para cambiar su saldo a 2500.00 y
su número de cuenta a '6789012345'.

EXEC ActualizarCuenta

@CuentaID = 2,

@NuevoSaldo = 2500.00,

@NuevoNumeroCuenta = '6789012345';

Resultado:

11. Confirmar el saldo y la cuenta del id 2 actualizadas:

SELECT * FROM Cuentas WHERE CuentaID = 2;

12. Ejercicio: Codificar un SP para eliminar el cliente con id=2

Practica 4: Triggers

Objetivos:
1. Verificar como el uso de lo triggers ayudan a llevar un control o tracking de los eventos
realizados en las tablas: validaciones, auditorías (inserciones, actualizaciones,
eliminaciones de registros).
2. Verificar la función de los triggers antes y después de ejecutar eventos.

a. Trigger AFTER INSERT: El siguiente trigger registra automáticamente en una tabla de


auditoría cada vez que se inserta un nuevo cliente.

Paso 1: Crear tabla de auditoría

CREATE TABLE AuditoriaClientes (

AuditoriaID INT IDENTITY(1,1) PRIMARY KEY,

ClienteID INT,

Fecha DATE,

Operacion NVARCHAR(50)

);

Paso 2: Crear trigger AFTER INSERT

-- Creamos un trigger que se ejecutará DESPUÉS de que se inserte un registro en la tabla


Clientes.

CREATE TRIGGER Trigger_AfterInsert_Clientes

ON Clientes -- La tabla donde se aplicará el trigger

AFTER INSERT -- Se ejecutará solo después de una operación de inserción

AS

BEGIN

-- Insertamos información en la tabla AuditoriaClientes.

-- Esta tabla se utiliza para registrar cuándo se inserta un nuevo cliente.

INSERT INTO AuditoriaClientes (ClienteID, Fecha, Operacion)

SELECT

ClienteID, -- El ID del cliente recién insertado

GETDATE(), -- La fecha y hora actuales

'INSERT' -- La operación realizada (en este caso, 'INSERT')

FROM INSERTED; -- 'INSERTED' es una tabla virtual que contiene los datos recién
insertados

-- Mensaje opcional para indicar que el trigger se ejecutó correctamente.


PRINT 'Se registró en la auditoría el nuevo cliente.';

END;

GO

Paso 3: Prueba del Trigger: Inserta un nuevo cliente y verifica la tabla de auditoría

-- Insertar un nuevo cliente a través del SP InsertarCliente

EXEC InsertarCliente

@Nombre = 'Carlos',

@Apellido = 'Sánchez',

@Email = '[email protected]',

@Telefono = '555-5678';

--Se puede ingresar el cliente a través de la sentencia insert

/*INSERT INTO Clientes (Nombre, Apellido, Email, Telefono)

VALUES ('Carlos', 'Sánchez', '[email protected]', '555-5678');*/

Paso 4: Verificar el ingreso del nuevo cliente en la tabla Clientes y la auditoria del ingreso de
clientes en la tabla AuditoriaClientes

select * from Clientes

SELECT * FROM AuditoriaClientes;


b. Trigger AFTER UPDATE: Se ejecuta después de que un registro en una tabla sea actualizado.
Este trigger registra los cambios en el saldo de una cuenta en la tabla AuditoriaSaldos.

Paso 1: Crear tabla de auditoría para registrar la actualización de los saldos

CREATE TABLE AuditoriaSaldos (

AuditoriaID INT IDENTITY(1,1) PRIMARY KEY,

CuentaID INT,

SaldoAntiguo DECIMAL(10,2),

SaldoNuevo DECIMAL(10,2),

Fecha DATE

);

Paso 2: Crear trigger AFTER UPDATE

CREATE TRIGGER Trigger_AfterUpdate_Cuentas

ON Cuentas

AFTER UPDATE

AS

BEGIN

INSERT INTO AuditoriaSaldos (CuentaID, SaldoAntiguo, SaldoNuevo, Fecha)

SELECT D.CuentaID, D.Saldo AS SaldoAntiguo, I.Saldo AS SaldoNuevo, GETDATE()


FROM DELETED D

INNER JOIN INSERTED I ON D.CuentaID = I.CuentaID;

PRINT 'Se registró el cambio en el saldo de la cuenta.';

END;

GO

Paso 3: Actualizar saldo y el número de la cuenta a traves del SP_ActualizarCuenta del cliente
con CuentaID=3 a $2500.00 y al NumeroCuenta 6789012345 respectivamente

--Para verificar el saldo anterior

select * from Cuentas

--SP_ ActualizarCuenta

EXEC ActualizarCuenta

@CuentaID = 3,

@NuevoSaldo = 2500.00,

@NuevoNumeroCuenta = '6789012345';

--También se puede actualizar el saldo con la sentencia UPDATE

/*UPDATE Cuentas

SET Saldo = 5000.00

WHERE CuentaID = 1;*/

Paso 4: Verificar en la tabla AuditoriaSaldos la actualizacion del


saldo y del número de cuenta
select * from Cuentas
SELECT * FROM AuditoriaSaldos;

También podría gustarte