Está en la página 1de 7

ESCUELA DE INGENIERÍA

DE SISTEMAS

GUIA DE LABORATORIO N° 01

ESCUELA : INGENIERÍA DE SISTEMAS


ASIGNATURA : GESTION DE DATOS II
CICLO : VI
TURNO : TARDE
SEMESTRE : 2021-I
DOCENTE : Dr Ricardo Mendoza Rivera

1. TEMA: EJERCICIOS CON JOIN


2. OBJETIVO:
 Enfoque de los datos e información como objeto de estudio del Ingeniero de Sistemas.
 Definición de información y establecer características de información de calidad.
3. METODOLOGÍA:
 Lista de ejercicios propuestos con la guía del docente.
 Solución con alumnos lista propuesta.
4. RECURSOS
 Equipo computacional con conexión a internet
 Base de Datos TenebrosaOLTP
 Utilizar la plataforma Blackboard para entregar el laboratorio
 Utilizar la plataforma Blackboard para resolver cuestionario.

5. DESARROLLO DE ACTIVIDAD

Enunciado de Requerimientos usando LEFT, RIGHT JOIN

A. Conocer productos que si se han vendido: INNER JOIN (recuerde que INNER se aplica
cuando el dato existe en las tablas que se están uniendo).

Para que un producto (que está en la tabla producto: producto.producto) se venda


TAMBIEN debe estar en detadoc (aparece el código de producto vendido:
detadoc.producto).
Como se puede inferir el producto vendido está tanto en la tabla producto como en la
tabla detadoc, por lo que se aplica INNER JOIN.

SELECT DISTINCT P.Producto, P.Descripcion

FROM producto p INNER JOIN detadoc dd ON P.Producto = DD.Producto


ESCUELA DE INGENIERÍA
DE SISTEMAS

B. Se quiere mostrar los productos que NO se han vendido: LEFT JOIN o RIGHT JOIN
Indica que productos (de la tabla producto: producto.producto) no aparecen en detadoc (el
dato del código del producto: detadoc.producto no debe estar presente en esta tabla).

Como se puede inferir se quiere conocer el producto que no se ha vendido: el dato del
producto existe en la tabla producto, pero NO DEBE EXISTIR en la tabla detadoc

Note que se usa LEFT JOIN

 Se requiere conocer el 100% de datos del de la tabla producto,


 De la tabla detadoc, sólo los que no existen
 Recuerde que cuando no existen registros en la tabla detadoc aparece como NULL
cualquier campo de detadoc, tal como se muestra en continuación

SELECT P.Producto, P.Descripcion, dd.Documento

FROM producto p LEFT JOIN detadoc dd ON P.Producto = DD.Producto

Por lo que se necesita conocer los que no existen, o sea los que están en NULL, entonces la
orden quedaría

SELECT P.Producto, P.Descripcion, dd.Documento

FROM producto p LEFT JOIN detadoc dd ON P.Producto = DD.Producto

WHERE dd.Documento IS NULL


ESCUELA DE INGENIERÍA
DE SISTEMAS

C. Observe ahora los clientes que no han comprado

 Usando RIGHT

SELECT cliente.cliente, documento.documento, cliente.nombre

FROM documento RIGHT JOIN cliente ON cliente.cliente=documento.cliente

WHERE documento IS NULL

 Usando LEFT

SELECT distinct c.cliente, d.documento, c.nombre

FROM cliente c LEFT JOIN documento d on c.Cliente = d.Cliente

WHERE documento IS NULL

D. Guardando en una tabla #temporal


ESCUELA DE INGENIERÍA
DE SISTEMAS

SELECT p.Producto, p.Descripcion

INTO #tempo_Producto_SinVenta

FROM producto p LEFT JOIN detadoc dd ON P.Producto = DD.Producto

WHERE dd.Documento IS NULL

Consultando datos de tabla temporal

SELECT * FROM #tempo_Producto_SinVenta

E. Estableciendo Orden a los registros, aplicando row_number()

SELECT Row_Number() OVER (Order By Descripcion) AS Item,

Descripcion, Stockac, Producto, Marca, Peso

FROM producto

WHERE Marca = 'M1'

F. Consulta usando RANK, ROW_NUMBER Y DENSE_RANK, determine las diferencias


SELECT Row_Number() over (Order By Zona) As Item,

Nombre, cliente, Zona, Saldo,

Rank() Over (Order By Zona) as Ranking,

Dense_Rank() OVER (ORDER BY Zona) AS DenseRank


ESCUELA DE INGENIERÍA
DE SISTEMAS

FROM Cliente

G. Usando PIVOT realice un resumen de ventas (venta = detadoc.cantidad*


--- detadoc.pecunit) por producto en forma SEMESTRAL (documento.fecha) en el año 2006

1) Preparando datos en una tabla #temporal


SELECT DD.producto, CASE WHEN DATEPART(quarter,d.fecha) >= 3 THEN 2 ELSE 1 END as
semestre , dd.Cantidad * dd.PrecUnit as Venta
INTO #TempoP
FROM documento d INNER JOIN DETADOC dd ON d.Documento =dd.Documento and
d.TipoDoc =dd.TipoDoc
WHERE year(d.fecha) = 2006

2) Consultando datos de la tabla temporal


SELECT * FROM #TempoP

3) PIVOTE datos
SELECT [1] as sem1,[2] as sem2
FROM #TempoP
PIVOT (SUM(Venta) FOR semestre IN ([1],[2]) ) AS pvtx
ESCUELA DE INGENIERÍA
DE SISTEMAS

H. Conocer monto vendido por cada vendedores, en forma mensual, en el 1er trimestre del
2006

-- preparando datos

SELECT d.Personal, month(d.Fecha) As Mes, dd.Cantidad * dd.PrecUnit as Venta

INTO #temp_trimestre

FROM DOCUMENTO d INNER JOIN DETADOC dd ON d.Documento =dd.Documento AND


d.TipoDoc=dd.TipoDoc

where year(d.fecha)= 2006 and datepart(qq, d.fecha) = 1

-- pivoteando

SELECT personal, [1] as Enero,[2] as Febrero,[3] as Marzo

FROM #temp_trimestre

PIVOT (SUM(Venta) FOR Mes in ([1],[2],[3]) ) AS pvt

I. Resumen de ventas por vendedor del 2005 al 2009 en la tienda: T1 Opcional

SELECT P.Personal ,
An_2005 = SUM(CASE WHEN year(d.fecha) = 2005 then dd.Cantidad * dd.PrecUnit else 0
end),
An_2006 = SUM(CASE WHEN year(d.fecha) = 2006 then dd.Cantidad * dd.PrecUnit else 0
end),
An_2007 = SUM(CASE WHEN year(d.fecha) = 2007 then dd.Cantidad * dd.PrecUnit else 0
end),
ESCUELA DE INGENIERÍA
DE SISTEMAS

An_2008 = SUM(CASE WHEN year(d.fecha) = 2008 then dd.Cantidad * dd.PrecUnit else 0


end),
An_2009 = SUM(CASE WHEN year(d.fecha) = 2009 then dd.Cantidad * dd.PrecUnit else 0
end)
FROM DOCUMENTO d inner join DETADOC dd ON d.Documento=dd.Documento and
d.TipoDoc= dd.TipoDoc
INNER JOIN PERSONAL p ON p.Personal = d.Personal
WHERE P.idTienda='T1'
GROUP BY P.Personal

6. LISTA DE EJERCICIOS

Desarrollar la siguiente lista de ejercicios:


A. Se necesitar conocer que clientes (tabla CLIENTE) de la zona Z1, no se lea ha vendido (tabla
documento)

B. Muestre a lista de CLIENTES que no han tenido ninguna venta en Mayo del 2007

C. Verifique un reporte de las cuotas canceladas (cronograma.estado = 'p') del documento =


477000074, debe mostrar: documento , fecha de emisión(documento,fecha), el
estado de la cuota, el monto, interes.

D. Se desea conocer las ventas (detadoc)de la zona Z1 en el 2007, especificar el documento,


tipodoc, producto, descripción, cantidad, precunit y subtotal (cantidad* precunit)

E. Usando PIVOT realice un resumen de ventas (venta = detadoc.cantidad* detadoc.pecunit)


por vendedor, trimestralmente (documento.fecha)

F. Usar SUM con CASE para desarrollar el ejercicio anterior.

También podría gustarte