Ejercicios SQL

March 28, 2018 | Author: AlfredoJimenez | Category: Databases, Technology, Computing, Data Management, Data Management Software


Comments



Description

[estas son las tablas que usamos] UNIONUNION: (OTRO DIA M PONGO A COMPLETAR TODO) EJERCICIOS: Se quiere saber que vendedores y clientes hay en la empresa; para los casos en que su teléfono y dirección de e-mail sean conocidos. Se deberá visualizar el código, nombre y si se trata de un cliente o de un vendedor. Ordene por la tercer columna y la segunda. selectcod_vend, nom_vend, 'vend' Tipo from vendedores wherenro_telisnotnull and [e-mail] isnotnull union selectcod_clie, nom_clie, 'cliente' from clientes wherenro_telisnotnull and [e-mail] isnotnull orderby 3,2 Se quiere saber que artículos, clientes y vendedores hay en la empresa. Determine los campos a cod_arti = A. 'Vendedor' from vendedores wheredireccionisnotnull and cod_vendbetween 3 and 12 orderby 1. Para el caso de los vendedores.descripcion. direccionDireccion. descripcion Articulo. INTEGRANTE (en donde indicará si es cliente o vendedor). Determine Ud. nom_vend. Articulos A whereD. DIRECCION. A.3 . En ambos casos la direcciones deberán ser conocidas. 'En Stock' Tipo fromarticulos union selectD. 'Cliente' from clientes union selectcod_vend.mostrar y su ordenamiento selectcod_arti 'Código'. selectcod_arti Código. las columnas a mostrar.cod_arti. 'Cliente' Integrante from clientes wheredireccionisnotnull union selectnom_vend. nom_clie. selectnom_clie Nombre. 'Vendedor' from vendedores orderby 3 Se quiere saber que artículos hay en la empresa y cuáles han sido vendidos.cod_arti orderby 3 Se quiere saber las direcciones tanto de clientes como de vendedores. 'Vendido' from detalle D. Ordenado por la primera columna y la última. códigos entre 3 y 12. descripcion 'Nombre'. Rotule como NOMBRE. direccion. 'Articulo'Tipo fromarticulos union selectcod_clie. sin duplicarlos. selectcod_clie Código.nro_factubetween 10 and 23 ------------------------------------------------------------------------------------INNER JOIN . identifique de donde obtiene la información. selectcod_clieCodigo from clientes union selectcod_clie from facturas where fecha between 2002-11-12 and 2003-27-02 Idem al ejercicio anterior. 'Clientes' Desde from clientes unionall selectcod_clie. 'Pasivo' Tipo from clientes wherenom_clielike '[c-l]%' unionall selectcod_clie. para el primer caso para nombres que empiecen con letras que van de la c a la l y para el segundo para facturas que oscilen entre 10 y 23.Se quiere saber que clientes hay en la empresa y quienes han comprado entre el 11/12/2002 y el 27/02/2003. Muestre el código. Muestre el código (no elimine los que se repiten). 'Facturas' from facturas F where fecha between '2002-11-12' and '2003-27-02' Se quiere saber que clientes hay en la empresa y quiénes han comprado. selectcod_clie Código. sólo que además del código. 'Activo' from facturas F whereF. v. .nro_factuisnull Liste descripción. 2007) Liste código de vendedor.fecha) in (2006. c. RIGHT OVER JOIN: Realiza la selección de todos los registros de la tabla de la derecha.nom_vend.nro_factu from facturas f innerjoin vendedores v onf. f. f. vendedor y cliente para las ventas del año 2006 y 2007.cod_vend=v. para las ventas en lo que va del año.cod_vend innerjoin clientes c onf.nro_factu from facturas f rightjoin vendedores v onf. En lugar de hacer el producto cartesiano completo.El INNER JOIN: Es otro tipo de composición de tablas. fecha.nro_factu.nom_vend. aun para aquellos artículos que no registran ventas. selectf. LEFT OUTER JOIN: Toma todos los registros de la tabla izquierda.cod_vend. fecha y factura. f.cod_vend.cod_vend whereyear(f. selectv. fecha y factura.fecha)=2007 orf. v.nom_vend.cod_vend=v.fecha.cod_clie whereyear (f. para cada una de las tablas busca directamente en la otra tabla las filas que cumplen la condición. cantidad e importe. f. aunque no tengan ningún registro coincidente (clave). f.fecha)=2007 Liste código de vendedor.nom_clie from facturas f innerjoin vendedores v onf.cod_clie=c.v.fecha.fechaisnullorf.cod_vend=v. selectv.cod_vend whereyear(f. nombre. EJERCICIOS: Liste factura. nombre. para las ventas en lo que va del año. en la tabla de la derecha. aunque NO tenga ningún registros de la tabla de izquierda.fecha. cod_vend innerjoin detalle d onf.selecta. vendedor. leftjoin es una unión a la izquierda muerto todos los campos de la izquierda y solo los coicidentes con la derecha. Muestre los clientes hayan comprado o no en ese año. 2007) Liste código de cliente. d.cod_vend=v.nro_factu=d.nom_clie.cod_clie wheremonth(f. f. d.nom_clie. Con el reightMuesta todos los campos de la derecha y solo los coicidentes con la derecha Con el full join muestra todos los campos Liste factura.cant.cod_clie=c. selectc. . cliente. c.fecha. y los clientes a los que he facturado para casos en que las facturas no tengan campo cliente.nro_factu from facturas f full join clientes c onf. f. cantidad e importe. fecha.descripcion.fecha.pre_unit from facturas f full join vendedores v onf. d.cod_clie=c.pre_unit*d.fecha)in (2. para las ventas de febrero y marzo de los años 2006 y 2007 y siempre que el articulo empiece con letras que van de la a a la m . d.cant*d.cod_clie whereyear (f. d.cant as 'total' from detalle d full joinarticulos a ond.nro_factu orderbya.cod_arti innerjoin clientes c onf.fecha) in (2006. v.cod_arti=a.nro_factu innerjoinarticulos a ona.cant.descripcion from nombre de talbajoin otra tableon igualamos campos para listar todas las facturas. d. Liste articulo.nro_factu.fecha)=2007 Se quiere saber los artículos que compro el cliente 7 en lo que va del año.cod_clie.pre_unit. fecha y factura para las ventas del año 2007.cod_arti=d. articulo.nombre. Ordene por fecha.nro_factu=f.descripcion.cod_arti full join facturas f ond. 3) and year(f. a. f. cliente y articulo.nom_vend.pre_unit. selectf. .c. nro_factu innerjoinarticulos a ond.observaciones e importe.cod_arti inner join clientes c on f.cod_arti=a.nom_clie like '[p]%' order by c. cantidad e importe. select c. ARTICULO. IMPORTE.nro_factu inner join articulos a on d. Ordene por cliente y articulo.nom_clie from facturas f innerjoin clientes c onf.nom_clie as 'cliente'. Rotule como CLIENTE. c.cod_clie=c.pre_unit as 'precio'. Subconsultas en la cláusula WHERE .descripcion as 'articulo' . d. CANTIDAD. este en forma descendente.cod_clie=c.descripcion. d.cod_clie where c. selecta. a.cod_clie innerjoin detalle d onf.cod_clie=7 and year(f.nro_factu=d.cant as 'cantidad'.nom_clie desc.cant*d. articulo.fecha)=2007 Se quiere saber los artículos que compraron los clientes que empiezan con p . Liste cliente.cod_arti wherec. d.cod_arti=a.pre_unit as 'total' from facturas f inner join detalle d on f.nro_factu=f.descripcion desc ---------------------------------------------------------------------------SUB-CONSULTAS Subconsultas: Es una consulta que aparece dentro de la cláusula WHERE ó HAVING de otra sentencia SQL. a. f. número de factura y fecha.fechaasc . FACTURA. descripcion.fecha as FECHA from clientes c. observaciones y precio unitario. Rotule como CLIENTE. > ) Compara el valor de una expresión con un único valor producido por una subconsulta Test de Pertenencia A Conjunto (IN): Compara un valor de datos con una columna de valores producida por una subconsulta.nro_factu=f.cod_clie=f.nom_clie.cod_clie as COD_CLIENTe. NOT EXISTS: esta expresión invierte la lógica. selectcod_arti. EJERCICIOS: Se quiere saber que artículos no fueron vendidos el año pasado y que el precio unitario del artículo oscile entre 2 y 6. Ordene por nombre de cliente y fecha selectc.< . pre_unit fromarticulos wherepre_unitbetween 2 and 6 and cod_artinot in (selectdistinctcod_arti from facturas f.cod_clie and year (fecha)=2008 and 5<(selectcount (*) from facturas f1 where f1.Test De Comparación: (= . Este test sólo se utiliza en subconsultas.cod_clie and year (fecha)=2008 ) orderbyc. NOT IN: esta expresión significa que no está incluida en la lista de valores generada por la subconsulta. Muestre el nombre del cliente. detalle d whered. facturas f wherec. f. Test de Cuantificados: ANY y ALL: Ambos tests comparan un valor de datos con la columna de valores producidos por una subconsulta.nro_factu as FACTURAS.cod_clie=c. FECHA VENTA. Muestre el nombre del artículo. Test de Existencia (EXISTS): Comprueba si una subconsulta produce alguna fila de resultados. c. f.nom_clie as CLIENTES . observaciones.nro_factu and year(fecha)=2008) Se quiere saber que clientes vinieron más de 5 veces el año pasado. fecha) ) Muestre el número de factura.nro_factu) Se quiere saber que vendedores nunca atendieron a estos clientes:6. [e-mail] from clientes c. selectf.nro_factu = d.cant) from detalle d1 where d1. c.Se quiere saber que clientes vinieron entre el 12/12/2004 y el 13/7/2007.cod_clie=f.pre_unit*d. Ordene por nombre de cliente. detalle d wherea. Rotule como FACTURA. d. el artículo y el importe para los casos en que para esa factura su importe total sea superior o igual a 150.nro_factu as FACTURA .nro_factu and 150 < = ( select sum (d1.descripcion . Muestre el nombre del cliente y su dirección de mail. f. 1. la fecha de venta. Rotule como VENDEDOR. Ordene por cliente y fecha. c.nom_clie.cod_clie. [e-mail] from clientes c wherecod_clie in (selectcod_cliefrom facturas where fecha between '12/12/2004' and '13/7/2007') Liste número de factura.fecha as FECHA_VENTA from facturas f where 9 > ( selectcount(*) from facturas f1 whereyear (f. selectc. Muestre solamente el nombre del vendedor. FECHA VENTA.nro_factu .cod_arti = d. articulos a .pre_unit*d1. a. .nom_clie. selectdistinctc. fecha y cliente para los casos en que todas las veces que vino a comprar haya sido en el mes de febrero.cod_clie and fecha between '12/12/2004' and '13/7/2007' Muestre el número de factura y la fecha de venta para los casos en que por año se hayan hecho menos de 9 ventas.cod_arti and f. f.cant from facturas f . selectf.fecha) = year (f1.fecha .cod_clie. facturas f wherec.nro_factu = d. select * from vendedores v wherev. observaciones as OBSERVACIONES fromarticulos a where 80 < ( selectavg (pre_unit*cant) from detalle d wherea.cod_arti from detalle d) and a.cod_arti) Que artículos nunca se vendieron?.cod_arti = d. Tenga además en cuenta que su nombre comience con letras que van de la d a la p . OBSERVACIONES. Rotule como ARTICULO. para los casos en que su promedio de ventas sea superior al importe promedio global. selectdescripcion fromarticulos a wherecod_artinot in ( selectdistinctd.6) ) Se quiere saber de que artículos superó el promedio de ventas de 80.cod_vend from facturas f wherecod_clie in (1. Rotule como . Muestre el nombre del artículo y sus observaciones.descripcionlike '[d-p]%' orderbydescripcion´ ------------------------------------------------- SUB-CONSULTAS CON HAVING EJERCICIOS: Se quiere saber la fecha de la primer venta y el importe de ventas por vendedor. Muestre solamente la descripción de artículo.cod_vendnot in ( selectf. selectdescripcion as ARTICULOS . avg(d.cod_clie and f.cod_vend=f. min(fecha). Rotule como FECHA VENTA.cod_arti) Se quiere saber la cantidad vendida. CLIENTE. 22 y que ese importe promedio sea inferior al importe promedio de ese artículo. nom_clie. detalle d wheref. nom_clie. detalle d. sum(d. el importe vendido y el promedio vendido por fecha.nro_factu and c.cod_arti having sum(pre_unit*cant) > (selectavg(pre_unit*cant) from detalle ) Se quiere saber el importe vendido. Rotule como FECHA VENTA.22) groupbydescripcion.cod_arti and nro_factunot in (10.nro_factu and v. clientes c.pre_unit*cant) fromarticulos a. 7. la cantidad vendida por artículo.nro_factu= d.cod_arti = d. sum(pre_unit*cant). PROMEDIO. Ordene por fecha en forma descendente. sum(pre_unit*cant). avg(pre_unit*cant) from facturas f.nro_factu =d. d. selectnom_vend.cod_arti havingavg(d. detalle d wheref.pre_unit*cant) < (selectavg(d1. SELECT fecha.2. PROMEDIO.nro_factu=d. IMPORTE. para los casos en que los números de factura que oscilen entre 20 y 35 y que ese importe de ventas sea superior o igual al promedio global. avg(pre_unit*cant) from facturas f. CANTIDAD.pre_unit*cant) from detalle d1 where d1. SELECT descripcion.cod_arti= d. vendedores v wheref. sum(pre_unit*cant). detalle d wherea. d.nro_factu groupby fecha having sum(cant) > (selectavg(cant) from detalle) Se quiere saber el promedio vendido por fecha y artículo para los casos en que las cantidades . siempre que esa cantidad vendida sea superior al promedio de la cantidad global.VENDEDOR. 10.pre_unit*cant). para los casos en que los números de factura no sean uno de los siguientes:2.cod_vend groupbynom_vend havingavg(pre_unit*cant) > (selectavg(pre_unit*cant) from detalle) Se quiere saber el importe promedio y el importe de ventas por fecha y cliente.7. sum(cant).13. select fecha. IMPORTE.nro_factubetween 20 and 35 groupby fecha. 13. avg(pre_unit*cant) from facturas f.cod_clie = f. TOTAL VENTAS. SELECT fecha.nro_factu and a. detalle d wheref. ARTICULO. descripcion. avg(d.cod_arti =d. selectcount (cod_clie) as cantidad Fromdbo. Rotule como FECHA VENTA.nro_factu = d.cod_arti = d.pre_unit*cant) from facturas f.cod_arti having sum(d.nro_factu group by fecha having avg(pre_unit*cant) < (select avg(pre_unit*cant) from detalle) ------------------------------------------------------------SUMARIAS EJERCICIOS: Se quiere saber la cantidad de clientes que hay en la empresa. Rotule como FECHA. . articulos a.cod_arti) Se quiere saber el importe vendido por fecha para los casos en que ese promedio vendido sea inferior al importe promedio global. descripcion. d.cod_arti and cantbetween 5 and 20 groupby fecha. sum(pre_unit*cant) from detalle d.nro_factu = d. IMPORTE. PROMEDIO.pre_unit*cant) from detalle d1 where d1. FEC PRIMER VENTA. select fecha.clientes Se quiere saber la cantidad de artículos que hay en la empresa.pre_unit*cant) > (selectavg(d1.facturas f where f.vendidas oscilen entre 5 y 20 y que ese importe sea superior al importe promedio de ese artículo. cant) as 'Cantidad total vendida' . min (cant) as 'Minima venta' fromdbo. selectcount (cod_vend) as cantidad fromdbo. avg (d.facturas Se quiere saber cual fue la máxima y la mínima cantidad que se vendió para el artículo 10. select sum(cant) as 'Cantidad vendida'. select sum (d.detalle wherenro_factu=10 Se quiere saber cual fue la fecha de la primera y última venta.vendedores v wherev. la cantidad de ventas y el importe para la factura 10. Rotule como PRIMERVENTA.vendedores Se quiere saber la cantidad de ventas que hizo el vendedor de código 3. selectmax(cant) as 'Maxima venta'. selectmax (fecha) as 'ultima venta' .sum(pre_unit*cant) as Importe fromdbo. selectcount (nro_factu) as cantidad fromdbo.pre_unit*d.detalle d.detalle wherecod_arti = 10 Se quiere saber la cantidad total vendida. el monto y el importe promedio total. min (fecha) as 'primera venta' fromdbo. para vendedores cuyo nombres comienzan con letras que van de la d a la l .nom_vendlike '[d-l]%' Se quiere saber el promedio del importe vendido.articulos Se quiere saber que cantidad de vendedores hay en la empresa.selectcount (cod_arti) as cantidad fromdbo.count (nro_factu) as 'Cantidad de ventas'.cant) as 'Importe promedio total' fromdbo. ULTIMA VENTA.facturas wherecod_vend = 3 Se quiere saber la cantidad vendida. dbo. sum (d.pre_unit) as 'Monto'. el promedio de . el total del importe vendido. avg(d.clientes c wherec.cant) as 'Monto total' fromdbo.facturas f .articulos a wherea. select sum(d.nro_factu not in (13. sum(cant) as 'Total cantidad vendida' fromdbo.cant*pre_unit)as 'Importe total' . avg(d.pre_unit) 'Importe promedio' from dbo.33.nom_clielike 'Abarca%' Se quiere saber el importe total vendido y el importe promedio vendido para números de factura que no sean los siguientes: 13. sum(d. selectcount(f.fecha) as 'Fecha primer venta'. sum(pre_unit*cant) as 'Importe total'. sum(d.cant) as 'Cantidad total '.detalle d.facturas f wheref.cant) as 'Total vendido'. avg(cant) as 'Promedio cantidad vendida'. 5.detalle d.detalle d. selectavg(pre_unit*cant) as 'Promedio importe'. dbo. dbo. select min(f.5. dbo. la cantidad total vendida y el monto total vendido para los artículos que empiecen con c .cod_clie = 3 Se quiere saber la fecha de la primera venta.clientes c wherec.fecha) as 'Ultima visita' fromdbo.descripcionlike 'c%' Se quiere saber la cantidad total vendida y el monto total vendido para el periodo del 15/06/2005 al 15/03/2007.la cantidad vendida y el total de la cantidad vendida. el promedio vendido y la cantidad total vendida para el cliente de código 3.29) . 33.detalle Se quiere saber el total vendido. 24. select sum(d.nro_factu= f.pre_unit) as 'Monto total' fromdbo.nro_factu and f. dbo.cant) as 'Cant total vendida'.nro_factu) as 'Cantidad de veces' .cant*d. dbo. dbo. select sum(d. max(f. sum(d.facturas f where d.17.pre_unit*d.cant) as 'Promedio vendido' fromdbo.fechabetween '15/06/2005' and '15/03/2007' Se quiere saber la cantidad de veces y la última vez que vino el cliente de apellido Abarca. 17.facturas f.detalle d. cod_vend) as CANTIDAD_VENTAS.cant) as IMPORTE from facturas f. (d.pre_unit*d. IMPORTE. la cantidad e importe.cant) as IMPORTE . articulos a. a. CODIGO_VENDEDOR.nro_factu as NRO_FACTURA. NRO_FACTURA. el codigo y nombre del vendedor. ARTICULO. sum(d. v. CANTIDAD.---------------------------------------------------- VISTAS EJERCICIOS: Cree las siguientes vistas: Detalle_Ventas_Vendedor: Liste la fecha. Rotule como VENDEDOR. createview [subtotales_ventas_vendedor] as ( selectcount (v. createview [Detalle_ventas_vendedor] as ( selectf. f. CANTIDAD_VENDIDA. la factura.pre_unit*d.cod_vend as CODIGO_VENDEDOR.nom_vend as NOMBRE_VENDEDOR. v.cant as CANTIDAD. el articulo.nom_vend . vendedores v. detalle d whereyear (fecha) = 2009) select * from [Detalle_ventas_vendedor] Subtotales_Ventas_Vendedor: Se quiere saber el importe vendido y la cantidad de ventas por vendedor. OMBRE_VENDEDOR. Rotule como FECHA. d.descripcion as ARTICULO. para lo que va del año. v. IMPORTE_VENDIDO.fecha as FECHA. agréguele la condición de que solo tome lo del año en curso y que también muestre el promedio vendido y el código del vendedor. sum(d.cod_vend and f. . v.cod_vend) select * from [subtotales_ventas_vendedor] Consulta las vistas según el siguiente detalle: Llame a la vista creada en el punto 1. detalle d.nom_vend .cod_vend = v. select * from [Detalle_ventas_vendedor] where IMPORTE <= 20 Llame a la vista creada en el punto 1.nro_factu and year (fecha) = 2009 groupbyv.cant) as IMPORTE.from facturas f.b filtrando para el vendedor Miranda.nom_vend ) select * from [subtotales_ventas_vendedor] Modifique las vistas según el siguientes detalle: La vista creada en el punto b. v. detalle d.a pero filtrando por importes inferiores a $20.pre_unit*d. v.cant) as PROMEDIO_VENDIDO.nro_factu = d. alter view [subtotales_ventas_vendedor] as ( selectcount (v. select * from [subtotales_ventas_vendedor] wherenom_vendlike 'Miranda%' Llama a la vista creada en el punto 1.pre_unit*d.nro_factu = d.nro_factu groupbyv. avg(d.nom_vend.cod_vend = v.b filtrando para promedios superiores a 100.cod_vend from facturas f.cod_vend) as CANTIDAD_VENTAS. vendedores v wheref. vendedores v wheref.cod_vend and f. f.nro_factu = d. el cliente.nom_vend. @fecha2 as smalldatetime as selectf. (d.descripcion.cod_arti = d.cod_arti and v.select * from [subtotales_ventas_vendedor] where PROMEDIO_VENDIDO > 40 Elimine las vistas creadas en el punto 1 (no se olvide de colocar el nombre como corresponde) dropview [Detalle_ventas_vendedor] dropview [subtotales_ventas_vendedor] ---------------------------------------------------- PROCEDIMIENTOS ALMACENADOS EJERCICIOS: Cree los siguientes SP: LEGAJO-Detalle_Ventas: liste la fecha.cant*d.cod_clie = f.nro_factu and c.pre_unit) from clientes c. articulos a. vendedores v.nro_factu. d.cant.cod_vend = f. cantidad e importe. createproceduredetalle_venta @fecha1 as smalldatetime. Este SP recibirá como parámetros de E un rango de fechas. v.'13/11/2009' CantidadArt_Cli : este SP me debe devolver la cantidad de artículos o clientes (según se pida) .cod_vend and fecha between @fecha1 and @fecha2 executedetalle_venta '20/03/2008'. la factura. c. detalle d wheref.cod_clie and a.nom_clie. el artículo. el vendedor. a.fecha. facturas f. null. 4205889. fec_nac) values (@nom_vend. @nro_tel as int. @fec_nac) set @cod_vend = @@identity end declare @a as int executeINS_Vendedores @a output. @dir as nvarchar (50). @nro_tel. 'Pedro Perez'. nro_tel. 'Lavalleja 250'. @dir.que existen en la empresa. @e_mail as nvarchar (50). createprocedureINS_Vendedores @cod_vend as int output. direccion. createprocedureUPD_Vendedor @cod_vendint. '20/03/2001' UPD_Vendedor: cree un SP que le permita modificar un vendedor cargado. @fec_nac as smalldatetime as begin insertinto vendedores (nom_vend. @nom_vend as nvarchar (50). @nro_telint. @dirnvarchar (50). @nom_vendnvarchar (50). createprocedureCantidadArt_Clie @opcion1 int as begin if (@opcion1 = 1) selectcount (*) fromArticulos as Articulos else selectcount (*) from Clientes as Clientes end executeCantidadArt_Clie '1' INS_Vendedor: Cree un SP que le permita insertar registros en la tabla vendedores. . @correo nvarchar (50). 'Pedro Perez'. [e-mail]= @correo. 'Lavalleja 250'. direccion = @dir. nro_tel = @nro_tel. @fec_nacsmalldatetime as update vendedores set nom_vend = @nom_vend. 4205889. createprocedureDEL_Vendedores @cod_vend as int as deletefrom vendedores wherecod_vend = @cod_vend execDEL_Vendedores '13' . fec_nac = @fec_nac wherecod_vend = @cod_vend executeUPD_Vendedor 12. null. '20/03/2001' DEL_Vendedor: cree un SP que le permita eliminar un vendedor ingresado.
Copyright © 2024 DOKUMEN.SITE Inc.