Programación Distribuida y Concurrente
PROCEDIMIENTOS ALMACENADOS CON NORTHWIND Y CONSULTAS
1. Ejecute procedimientos procedimientos almacenados del sistema que le permitan obtener información de base de datos y tablas:
EXEC sp_helpdb Northwind GO EXEC sp_help customers GO Verifique otras tablas también y compare sus resultados. Escriba sus coincidencias. 2.
¿Qué sucede si ejecuta los siguientes scripts: ?
SELECT USER_NAME USER_NAME() () GO SELECT @@SERVERNAME GO EXEC sp_spaceused GO EXEC sp_helpfilegroup GO EXEC sp_helpfile GO 3.
Crear una variable (DECLARE) y asignarle un valor (SET), luego mostramos datos:
--SE DECLARA LA VARIABLE @Nombre de tipo cadena DECLARE @Nombre varchar varchar( (30) 30) --SE ASIGNA A LA VARIABLE @Nombre LA CADENA 'PEDRO' SET @Nombre = 'Pedro' --SE IMPRIME LA VARIABLE PRINT @Nombre --SE DECLARA LA VARIABLE @Sueldo DE TIPO DECIMAL DECLARE @Sueldo decimal decimal( (7,2) --SE ASIGNA A LA VARIABLE @Sueldo EL VALOR 50000.85 SET @Sueldo = 50000.85 --SE IMPRIME LA VARIABLE PRINT @Sueldo
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente 4.
Ejemplo de Funciones, INDIQUE EL RESULTADO:
SELECT 'Dia numero' = DAY DAY( (GETDATE GETDATE()) ()) SELECT 'Mes numero' = MONTH MONTH( (GETDATE GETDATE()) ()) SELECT 'Año' = YEAR YEAR( ('31/07/2015') '31/07/2015') GO 5.
USO DE CONTROL DE FLUJO: IF … ELSE Imprima una cadena correspondiente al nombre del día, según el contenido de una variable llamada @NumDia
DECLARE @NumDia int --OBTENEMOS EL DIA DE LA SEMANA (1 LUNES, 2 MARTES,... SET @NumDia = DATEPART DATEPART( (dw dw, ,getdate getdate()) ()) --AVERIGUAMOS SEGUN EL NUMERO OBTENIDO QUE DIA ES IF (@NumDia @NumDia= =1) PRINT 'LUNES' IF (@NumDia @NumDia= =2) PRINT 'MARTES' IF (@NumDia @NumDia= =3) PRINT 'MIERCOLES' IF (@NumDia @NumDia= =4) PRINT 'JUEVES' IF (@NumDia @NumDia= =5) PRINT 'VIERNES' IF (@NumDia @NumDia= =6) PRINT 'SABADO' IF (@NumDia @NumDia= =7) PRINT 'DOMINGO' GO
6. También podemos insertar BEGIN … END Defina un bloque de instrucciones que se procesará como un bloque. Puede usarlo después de un IF o un WHILE.
DECLARE @Var varchar varchar( (20) 20) IF USER_NAME USER_NAME() () = 'dbo' --Si es cierto se ejecuta BEGIN ... END
BEGIN PRINT 'Personal' SET @Var = 'Autorizado' END ELSE --Si no es cierto se ejecuta este otro BEGIN ... END
BEGIN COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente
PRINT 'Personal' PRINT 'No Autorizado' END --Se imprimira la variable
PRINT @Var GO 7. USO DE WHILE: Imprima los números enteros del 1 al 10, y luego calcule la suma de dichos números.
DECLARE @Num int DECLARE @Suma int SET @Num = 0 SET @Suma = 0 WHILE (@Num < 10) 10) BEGIN SET @Num = @Num + 1 PRINT @Num SET @Suma = @Suma + @Num END PRINT 'LA SUMA CORRESPONDIENTE ES:' + STR STR( (@Suma @Suma) ) GO 8.
USO DE CASE: Imprima una cadena de caracteres correspondiente al día de la semana. En este caso se utiliza la estructura CASE.
DECLARE @NumDia int --Obtenemos el dia de la semana (1 Lunes, 2 Martes... SET @NumDia = DATEPART DATEPART( (dw dw, ,getdate getdate()) ()) SELECT CASE @NumDia WHEN 1 WHEN 1 THEN 'Lunes' WHEN 2 WHEN 2 THEN 'Martes' WHEN 3 WHEN 3 THEN 'Miercoles' WHEN 4 WHEN 4 THEN 'Jueves' WHEN 5 WHEN 5 THEN 'Viernes' WHEN 6 WHEN 6 THEN 'Sabado' WHEN 7 WHEN 7 THEN 'Domingo' END AS 'Dia de semana' GO
SUBCONSULTAS – USO DE MARKETPERU Una subconsulta es una declaración SELECT anidada dentro de una sentencia SELECT, INSERT, UPDATE O DELETE,ó también dentro de otra subconsulta.
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente Las subconsultas son de los siguientes tipos: a. Subconsulta que entrega 1 solo valor (1 fila, 1 columna) b. Subconsulta que entrega un conjunto de valores (varias filas, 1 columna) Las subconsultas se especifican entre paréntesis. EJERCICIO1: Genere una consulta que entregue la lista de precios de todos los productos, especificando en una columna adicional la diferencia entre el precio de cada producto y el precio promedio de todos los productos. SOLUCIÓN: a. Primero obtenemos la consulta que muestre el promedio de todos los productos.
SELECT AVG AVG( (precioProveedor precioProveedor) )FROM Producto GO
b. Mostraremos mediante una consulta, la lista de precios solicitada teniendo en cuenta la fórmula que determina la diferencia entre el precio de cada producto y el precio promedio de todos los productos.
SELECT idProducto idProducto, , nombre nombre, , precioProveedor precioProveedor, , Diferencia = precioProveedor (SELECT AVG AVG( (precioProveedor precioProveedor) ) FROM Producto Producto) ) FROM Producto GO
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente EJERCICIO2: Escriba una consulta que determine el porcentaje de unidades despachadas de cada producto de la categoría 4 respecto al total despachado de la categoría. SOLUCIÓN: a. Primero hacemos la consulta que calcula el total despachado para la cetgoría 4.
SELECT SUM SUM( (cantidad cantidad) ) FROM Guia_detalle INNER JOIN Producto ON Guia_detalle Guia_detalle. .idProducto = Producto. Producto .idProducto WHERE Producto Producto. .idCategoria = 4 GO
b. Usaremos la consulta anterior dentro de la nueva consulta:
SELECT Producto Producto. .idProducto idProducto, ,Producto Producto. .nombre nombre, , Despachado = ISNULL( ISNULL (SUM SUM( (Guia_detalle Guia_detalle. .cantidad cantidad), ),0 0), Porcentaje = CONVERT( CONVERT (float float, , ISNULL( ISNULL (SUM SUM( (Guia_detalle Guia_detalle. .cantidad cantidad), ),0 0))/ (SELECT SUM SUM( (cantidad cantidad) ) FROM Guia_detalle INNER JOIN Producto ON Guia_detalle Guia_detalle. .idProducto = Producto. Producto .idProducto WHERE Producto Producto. .idCategoria = 4)* 4)*100 100 FROM Producto LEFT OUTER JOIN Guia_detalle ON Producto Producto. .idProducto = Guia_detalle Guia_detalle. .idProducto WHERE Producto Producto. .idCategoria = 4 GROUP BY Producto Producto. .idProducto idProducto, , Producto Producto. .nombre GO
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente
EJERCICIO 3: Escriba una consulta que entregue una lista de los productos que se despacharon en la fecha que se despachó la última salida del almacén. Tenga en cuenta que en dicha fecha se puede haber registrado más de una salida. SOLUCIÓN: a. Primero obtenemos la fecha de la última salida
SELECT MAX MAX( (fechaSalida fechaSalida) ) FROM Guia GO
b. Insertaremos nuestra consulta en:
SELECT DISTINCT Guia_detalle Guia_detalle. .idproducto idproducto, , Producto. Producto .nombre FROM Guia_detalle INNER JOIN Producto ON Guia_detalle Guia_detalle. .idProducto = producto producto. .idProducto INNER JOIN Guia ON Guia_detalle Guia_detalle. .idGuia = Guia Guia. .idGuia WHERE CONVERT CONVERT( (char char( (10), 10),Guia Guia. .fechaSalida fechaSalida, ,103) 103) = (SELECT CONVERT CONVERT( (char char( (10), 10),MAX MAX( (fechaSalida fechaSalida), ),103 103) ) FROM Guia Guia) ) GO
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.
Programación Distribuida y Concurrente
EJERCICIO 4: Escriba una consulta que entregue una lista de los productos que no registran salida del almacén. SOLUCION:
SELECT idProducto idProducto, , nombre FROM Producto WHERE idproducto NOT IN (SELECT idProducto FROM Guia_detalle Guia_detalle) ) ORDER BY idProducto GO
COMPUTACIÓN Y SOLUCIONES INFORMÁTICAS
Prof: Saravia Matias E.