0% encontró este documento útil (0 votos)
30 vistas5 páginas

Consultas SQL: Agregados y Vistas

El documento presenta varias consultas SQL que utilizan funciones de agregado y escalares para calcular totales de inversiones y acciones. También se crean vistas para simplificar el acceso a datos de clientes y su capital invertido, así como procedimientos almacenados para obtener información de clientes y procesar operaciones. Se destaca la modularización y reutilización del código como ventajas en el manejo de la base de datos.
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 TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
30 vistas5 páginas

Consultas SQL: Agregados y Vistas

El documento presenta varias consultas SQL que utilizan funciones de agregado y escalares para calcular totales de inversiones y acciones. También se crean vistas para simplificar el acceso a datos de clientes y su capital invertido, así como procedimientos almacenados para obtener información de clientes y procesar operaciones. Se destaca la modularización y reutilización del código como ventajas en el manejo de la base de datos.
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 TXT, PDF, TXT o lee en línea desde Scribd

--Sentencia 1: Función de agregado y función escalar

SELECT
c.NOM_CLIENTE,
SUM([Link] * [Link]) AS TotalInvertido -- Función de agregado SUM
FROM
CLIENTES c
INNER JOIN
OPERACIONES o ON c.NIF_CLIENTE = o.NIF_CLIENTE
GROUP BY
c.NOM_CLIENTE;
GO
/*
.SUM([Link] * [Link]):
Esta parte utiliza la función de agregado SUM() para calcular la suma del producto
del precio y la cantidad de acciones en la tabla OPERACIONES.
Esta función suma los valores para cada cliente.
GO
.FROM CLIENTES c INNER JOIN OPERACIONES o ON c.NIF_CLIENTE = o.NIF_CLIENTE:
Esta parte une las tablas CLIENTES y OPERACIONES utilizando la clave NIF_CLIENTE
para relacionar cada cliente con sus operaciones.
GO
.GROUP BY c.NOM_CLIENTE:
Esta parte agrupa los resultados por el nombre del cliente, de modo que la función
SUM() calcule el total invertido para cada cliente individualmente.
*/
GO
--Sentencia 2: Función escalar de cadena
GO
-- Esta consulta selecciona los 10 primeros caracteres del nombre de cada empresa
-- y los muestra junto con el número de acciones que tiene cada empresa.

SELECT
SUBSTRING(NOM_EMPRESA, 1, 10) AS NombreCorto, -- Extrae los 10 primeros
caracteres del nombre
COUNT(*) AS CantidadAcciones -- Cuenta el número de acciones para cada empresa
FROM
ACCIONES -- Tabla de la que se obtienen los datos
GROUP BY
SUBSTRING(NOM_EMPRESA, 1, 10); -- Agrupa los resultados por los 10 primeros
caracteres del nombre
GO
/*
Explicación detallada:

SELECT SUBSTRING(NOM_EMPRESA, 1, 10) AS NombreCorto:

SUBSTRING(NOM_EMPRESA, 1, 10): Esta función extrae una parte de una cadena de


texto. En este caso, extrae los primeros 10 caracteres (1 indica la posición
inicial y 10 la longitud) de la columna NOM_EMPRESA (nombre de la empresa).
AS NombreCorto: Esto asigna un alias o nombre temporal NombreCorto al resultado de
la función SUBSTRING. Así, la columna resultante se llamará NombreCorto.
COUNT(*) AS CantidadAcciones:

COUNT(*): Esta función cuenta el número de filas en cada grupo.


AS CantidadAcciones: Esto asigna el alias CantidadAcciones al resultado del conteo.
FROM ACCIONES:

ACCIONES: Esta cláusula indica que los datos se obtienen de la tabla ACCIONES.
GROUP BY SUBSTRING(NOM_EMPRESA, 1, 10):
GROUP BY: Esta cláusula agrupa las filas que tienen el mismo valor en la columna
especificada.
SUBSTRING(NOM_EMPRESA, 1, 10): Se utiliza la misma función SUBSTRING que en la
cláusula SELECT para agrupar las filas por los 10 primeros caracteres del nombre de
la empresa.
En resumen:

Esta consulta muestra una tabla con dos columnas:

NombreCorto: Los 10 primeros caracteres del nombre de cada empresa.


CantidadAcciones: El número de acciones que tiene cada empresa.
Las filas se agrupan por los 10 primeros caracteres del nombre de la empresa, por
lo que se muestra una fila por cada empresa (o cada grupo de empresas con los 10
primeros caracteres iguales).
*/
GO
--Sentencia 1: Crear una vista simple
GO
CREATE VIEW VistaClientesConInversiones AS
SELECT
c.NIF_CLIENTE,
c.NOM_CLIENTE,
SUM([Link] * [Link]) AS TotalInvertido
FROM
CLIENTES c
INNER JOIN
OPERACIONES o ON c.NIF_CLIENTE = o.NIF_CLIENTE
GROUP BY
c.NIF_CLIENTE,
c.NOM_CLIENTE;
GO

/*
* CREATE VIEW VistaClientesConInversiones AS: Esta parte crea una nueva vista
llamada "VistaClientesConInversiones". Las vistas son como tablas virtuales que se
crean a partir de una consulta.

* SELECT c.NIF_CLIENTE, c.NOM_CLIENTE, SUM([Link] * [Link]) AS


TotalInvertido: Esta parte define las columnas que se incluirán en la vista. En
este caso, se seleccionan el NIF y el nombre del cliente de la tabla CLIENTES, y se
calcula el total invertido para cada cliente sumando el producto del precio y la
cantidad de acciones de la tabla OPERACIONES.

* FROM CLIENTES c INNER JOIN OPERACIONES o ON c.NIF_CLIENTE = o.NIF_CLIENTE: Esta


parte especifica las tablas de las que se obtendrán los datos para la vista. En
este caso, se unen las tablas CLIENTES y OPERACIONES utilizando la clave
NIF_CLIENTE.

* GROUP BY c.NIF_CLIENTE, c.NOM_CLIENTE: Esta parte agrupa los resultados por el


NIF y el nombre del cliente, de modo que la función SUM() calcule el total
invertido para cada cliente individualmente.
*/
GO
--Sentencia 2: Consultar la vista creada
GO
SELECT * FROM VistaClientesConInversiones;
GO
/*
* SELECT * FROM VistaClientesConInversiones: Esta parte consulta todos los
registros y columnas de la vista "VistaClientesConInversiones".
Explicación adicional:

1º Las vistas son útiles para simplificar consultas complejas y para proporcionar
una capa de abstracción sobre la estructura de la base de datos.
Una vez creada una vista, se puede consultar como si fuera una tabla normal.

2º Los cambios realizados en las tablas base se reflejan automáticamente en las


vistas.
*/
GO
-- ANEXO
GO
--1. Creación de la vista "VistaCapitalInvertidoClientes"
GO
-- Crear vista para calcular el capital invertido por cliente
CREATE VIEW VistaCapitalInvertidoClientes AS
SELECT
C.NIF_CLIENTE, -- NIF del cliente
C.NOM_CLIENTE, -- Nombre del cliente
ISNULL(SUM([Link] * [Link]), 0) AS CapitalInvertido -- Capital invertido
(calculado)
FROM CLIENTES C -- Tabla CLIENTES como origen
LEFT JOIN OPERACIONES O ON C.NIF_CLIENTE = O.NIF_CLIENTE -- Unir con OPERACIONES
GROUP BY C.NIF_CLIENTE, C.NOM_CLIENTE; -- Agrupar por cliente
GO
--2. Comando para ver el resultado de la vista
GO
-- Seleccionar todos los campos de la vista
SELECT * FROM VistaCapitalInvertidoClientes;
GO
/*
Explicación del código:

* CREATE VIEW VistaCapitalInvertidoClientes AS: Crea una nueva vista llamada


"VistaCapitalInvertidoClientes".

* SELECT C.NIF_CLIENTE, C.NOM_CLIENTE, ISNULL(SUM([Link] * [Link]), 0) AS


CapitalInvertido: Selecciona el NIF y nombre del cliente de la tabla CLIENTES
(alias C). Calcula el capital invertido sumando el producto del precio y cantidad
de acciones de la tabla OPERACIONES (alias O). La función ISNULL maneja los casos
en que un cliente no tiene operaciones, asignando un valor de 0.

* FROM CLIENTES C LEFT JOIN OPERACIONES O ON C.NIF_CLIENTE = O.NIF_CLIENTE:


Especifica que la vista se basa en la tabla CLIENTES y se une con la tabla
OPERACIONES utilizando el NIF del cliente como clave de unión. Se utiliza un LEFT
JOIN para incluir a todos los clientes, incluso si no tienen operaciones.

* GROUP BY C.NIF_CLIENTE, C.NOM_CLIENTE: Agrupa los resultados por NIF y nombre de


cliente para calcular el capital invertido para cada cliente de forma individual.

* ¿Cómo funciona?

1º La vista calcula el capital invertido para cada cliente sumando el valor total
de todas sus operaciones (precio * cantidad).

2ºUtiliza una unión (LEFT JOIN) para combinar datos de las tablas CLIENTES y
OPERACIONES.
3º La función ISNULL se utiliza para manejar los casos en que un cliente no ha
realizado ninguna operación, evitando errores y mostrando un capital invertido de
0.

* Ventajas de usar una vista:

1º Simplifica consultas: La vista encapsula la lógica del cálculo del capital


invertido, lo que facilita las consultas posteriores.

2º Abstracción: La vista oculta la complejidad de la unión de tablas y el cálculo,


proporcionando una interfaz más sencilla.

3º Mantenimiento: Si la lógica de cálculo cambia, solo es necesario modificar la


vista en lugar de todas las consultas que la utilizan.
*/

GO
/*1. Procedimiento almacenado "ObtenerDatosCliente"

Este procedimiento recupera información de un cliente a partir de su NIF:


*/
GO
-- Crear procedimiento para obtener datos de cliente
CREATE PROCEDURE ObtenerDatosCliente
@NIF_CLIENTE VARCHAR(20)
AS
BEGIN
-- Seleccionar NIF, Nombre y Domicilio del cliente
SELECT NIF_CLIENTE, NOM_CLIENTE, DOMICILIO
FROM CLIENTES
WHERE NIF_CLIENTE = @NIF_CLIENTE;
END;
GO
/*
2. Procedimiento almacenado "ProcesarOperacion"

Este procedimiento realiza una operación (compra/venta) y utiliza


"ObtenerDatosCliente" para obtener la información del cliente:
*/
-- Crear procedimiento para procesar operación
CREATE PROCEDURE ProcesarOperacion
@NIF_CLIENTE VARCHAR(20),
@COD_ACCIONES VARCHAR(20),
@TIPO VARCHAR(20),
@PRECIO DECIMAL(10,2),
@CANTIDAD INT
AS
BEGIN
-- Declarar variables para almacenar datos del cliente
DECLARE @NombreCliente VARCHAR(100);
DECLARE @DomicilioCliente VARCHAR(200);

-- Llamar a "ObtenerDatosCliente" para obtener datos del cliente


EXEC ObtenerDatosCliente @NIF_CLIENTE;

-- Asignar los valores recuperados a las variables


SELECT @NombreCliente = NOM_CLIENTE, @DomicilioCliente = DOMICILIO
FROM CLIENTES
WHERE NIF_CLIENTE = @NIF_CLIENTE;

-- Insertar la operación en la tabla "OPERACIONES"


INSERT INTO OPERACIONES (NIF_CLIENTE, COD_ACCIONES, FECHA, TIPO, PRECIO,
CANTIDAD)
VALUES (@NIF_CLIENTE, @COD_ACCIONES, GETDATE(), @TIPO, @PRECIO, @CANTIDAD);

-- Mostrar mensaje con datos del cliente y detalles de la operación


PRINT 'Operación realizada por: ' + @NombreCliente + ' (' + @DomicilioCliente +
')';
PRINT 'Tipo: ' + @TIPO + ', Acción: ' + @COD_ACCIONES + ', Cantidad: ' +
CAST(@CANTIDAD AS VARCHAR(10));
END;
GO
/*3. Ejemplo de uso

Para ejecutar los procedimientos, puedes hacerlo de la siguiente manera:


*/
GO
-- Ejecutar "ProcesarOperacion" para registrar una compra
EXEC ProcesarOperacion '12345678A', 'AAPL', 'Compra', 150.00, 10;
GO
/*
* Explicación detallada:

*.1 "ObtenerDatosCliente": Este procedimiento recibe el NIF de un cliente


como parámetro y devuelve su nombre y domicilio.

*.2 "ProcesarOperacion": Este procedimiento realiza una operación de


compra/venta.

** Llama a "ObtenerDatosCliente" para obtener los datos del cliente que realiza la
operación.

*** Utiliza los datos recuperados para insertar la operación en la tabla


"OPERACIONES".

**** Imprime un mensaje con los detalles de la operación y los datos del cliente.

***** Ventajas de este ejemplo:

*****.1 Modularización: El código se divide en dos procedimientos más pequeños y


fáciles de mantener.

*****.2 Reutilización: "ObtenerDatosCliente" se puede reutilizar en otros


procedimientos que necesiten obtener información de un cliente.

*****.3 Organización: El código está más estructurado y es más fácil de entender.


*/
GO

También podría gustarte