Cursos

Interpretacion de Consultas en Mysql

Interpretacion de consultas MySql

En esta oportunidad les traigo una serie de consultas comentadas sobre lo que realizan cada una  obviamente con su base de datos para que ustedes la ejecuten en su programa SQL server.El link de descarga estara al final de los ejercicios resueltos.

1-
/*Se generó un script que permite mostrar los datos de los vendedores (idVendedor, idSupervisor y nombreVendedor) y una columna con el total de contratos asignados a ese vendedor de acuerdo a los edificios vendidos. Para calcular el número de contratos por cada vendedor se utiliza la función COUNT que tiene como parámetro el numcontrato, para esta consulta se utilizan 3 tablas vendedor, inmueble y contratoventa, los datos a mostrar necesitan ser agrupados por cada campo a mostrar.*/
select ven.idvendedor,ven.IDSUPERVISOR,ven.nombrevendedor,count(numcontrato)
from
vendedor ven,
inmueble mueb,
contratoventa cont
where
mueb.IDVENDEDOR=ven.IDVENDEDOR and mueb.IDINMUEBLE=cont.IDINMUEBLE
group by ven.idvendedor,ven.nombrevendedor,ven.IDSUPERVISOR;

2-
/*Se generó un script que muestra los datos del vendedor pero en relación con su supervisor y lo que muestra la tercera columna es cuantas ventas realizaron esos vendedores que están supervisados por otro vendedor. Dentro de la consulta en el where se valida que v1.idvendedor = v2.idsupervisor es por eso que cuenta ventas en relación con el supervisor y entonces se dice que cada supervisor tiene a cargo un numero de vendedores.
*/
select v1.idvendedor,v1.NOMBREVENDEDOR,count(con.numcontrato) 
from vendedor v1,vendedor v2,inmueble inmu,contratoventa con
where
v1.IDVENDEDOR=v2.IDSUPERVISOR and
inmu.IDVENDEDOR=v2.IDVENDEDOR and
con.idinmueble=inmu.idinmueble
group by v1.idvendedor,v1.NOMBREVENDEDOR
order by 3 desc;

3-
/* Actualiza la tabla vendedor, especificamente el campo idsupervisor con el valor nulo, donde el idevendedor sea '00000003'. Se realizaron dos inserciones a la tabla vendedor:  La primera será: IDVENDEDOR=00000007, IDSUPERVISOR=00000003, NOMBREVENDEDOR=ALEXIS AUGUSTO ZUAZO RODRíGUEZ, TELEFONO=99704589, EMAIL=azuzor@ucv.edu.pe.com, EDAD=30, y COMISION=0.05  La segunda será: IDVENDEDOR=00000008, IDSUPERVISOR=00000003, NOMBREVENDEDOR=PEDRO LUIS CÁRDENAS OLIVEROS, TELEFONO=99718945, EMAIL=pcardenas@ucv.edu.pe.com, EDAD=29, y COMISION=0.05*/
update vendedor set idsupervisor=null where idvendedor='00000003';
insert into vendedor (IDVENDEDOR, IDSUPERVISOR, NOMBREVENDEDOR,
TELEFONO, EMAIL, EDAD, COMISION)
values('00000007','00000003','ALEXIS AUGUSTO ZUAZO
RODRíGUEZ','99704589','azuzor@ucv.edu.pe.com',30,0.05);
insert into vendedor (IDVENDEDOR, IDSUPERVISOR, NOMBREVENDEDOR,
TELEFONO, EMAIL, EDAD, COMISION)
values('00000008','00000003','PEDRO LUIS CáRDENAS
OLIVEROS','99718945','pcardenas@ucv.edu.pe.com',29,0.05);

4-
/*Se generó un script para visualizar los Nombres de los clientes, cuyos precios de contratos estén agrupados por A= Mayores a 60000, B= MENORES A 60000, Y C = MENORES A 25000. Todo esto en una misma consulta, es decir unir tres consultas(select), con UNION, que requiere que las consultas a unir compartan las mismas columnas a mostrar o sean especificadas de la misma forma, además que los tipos de datos de las columnas en las 3 consultas (select)sean iguales*/

(select cli.NOMBRE,sum(con.precio),'A'

from
contratoventa con,
inmueble inmu,
cliente cli
where
con.idinmueble=inmu.IDINMUEBLE and
con.IDCLIENTE=cli.IDCLIENTE
group by cli.idcliente,cli.NOMBRE 
having sum(con.precio)>60000 )
union
(select cli.NOMBRE,sum(con.precio),'B'
from
contratoventa con,
inmueble inmu,
cliente cli
where
con.idinmueble=inmu.IDINMUEBLE and
con.IDCLIENTE=cli.IDCLIENTE
group by cli.idcliente,cli.NOMBRE 
having sum(con.precio)>25000 and sum(con.precio)<60000)
union
(select cli.NOMBRE,sum(con.precio),'C'
from
contratoventa con,
inmueble inmu,
cliente cli
where
con.idinmueble=inmu.IDINMUEBLE and
con.IDCLIENTE=cli.IDCLIENTE
group by cli.idcliente,cli.NOMBRE 
having sum(con.precio)<25000)
order by 3 asc,1 asc;

5-
/*Se generó un script para visualizar al cliente, su nombre específicamente y la dirección del inmueble que adquirió mediante contrato, pero además que solo muestre tal información de suma de precios de contratos mayores a 60000.Para ello se utilizó una subconsulta que cumple la función de condicionar la suma del precio de los contratos mencionado anteriormente, lo que permite igualar esa seleccion del idcliente de la subconsulta con el idcliente de la tabla contratoventa.*/

select cli.NOMBRE,inmu.DIRECCION 

from contratoventa con,inmueble inmu,cliente cli
where
con.idinmueble=inmu.IDINMUEBLE and
con.IDCLIENTE=cli.IDCLIENTE and
con.IDCLIENTE 
in (select cli.IDCLIENTE
from
contratoventa con,
inmueble inmu,
cliente cli
where
con.idinmueble=inmu.IDINMUEBLE and
con.IDCLIENTE=cli.IDCLIENTE
group by cli.idcliente,cli.NOMBRE
 having sum(con.precio)>60000 )

6-
/*Primero se genera un script para crear una nueva tabla en la base de datos Inmobiliaria; llamada "notario", la cual contara con las columnas: idnotario de tipo de dato char(8), que no puede tener este campo nulo y nombre de tipo de dato varchar(100). Luego se altera la tabla creada para asignar cual será la llave primaria, en este caso será idnotario. Posteriormente se altera la tabla contratoventa, para agregarle la columna idnotario que necesariamente tiene que ser del mismo tipo que de la tabla notario para poder referenciarla posteriormente, bien al alterar esta tabla(contratoventa) se le dice que la columna idnotario por defecto se le asignara el valor de '00000001' y es un campo que no puede quedar nulo. Seguido se hace la insercion de 4 registros a la tabla notario. Lo último es alterar la tabla contratoventa para realizar la referencia de llave foránea de la columna idnotario de la tabla notario.*/
create table notario
(
idnotario char(8) not null,
nombre varchar(100)
)
ALTER TABLE notario
ADD CONSTRAINT XPK_notario PRIMARY KEY (idnotario) ;
alter table contratoventa add idnotario char(8) default '00000001' not null;
insert into notario (idnotario,nombre) values ('00000001','Antes Nueva Legislacion')
insert into notario (idnotario,nombre) values ('00000002','Notaria Dr. Chantada');
insert into notario (idnotario,nombre) values ('00000003','Noraria Rodriguez Diaz');
insert into notario (idnotario,nombre) values ('00000004','Notaria Belaunde Sayan');
ALTER TABLE contratoventa ADD FOREIGN KEY (idnotario)
REFERENCES notario;

7-
/*En este script se realiza dos consultas pero que no están unidas, guardan la misma sintaxis que la union pero en este caso en la ejecución de este script Aparecen en la tabla resultante las filas de la primera consulta que no aparecen en la segunda, a esto se le conoce como except, que funciona como en teoría de conjuntos lo que se conoce como A - B. Los resultados que muestra son los datos del vendedor, su id y su nombre. Pero en primer lugar lo que hace la consulta 1 es mostrar los vendedores cuya suma de precios de contratos sean mayores a 62000, se usa un having para realizar esa validación de suma ya que WHERE no se puede usar junto con funciones agregadas.  La segunda consulta también mostrara los mismos campos ya que deben cumplir la misma sintaxis, pero en este caso las validaciones están en relación a manejo de fechas, las cuales son condicionadas con la función DateDiff que necesita de un intervalo en este caso en meses, una fecha de inicio, en este caso se usa la función sysdatetime que devuelve la fecha actual, fecha del sistema; y por último la fecha fin que en este caso se pasa la fechaventa; todo esto devolverá valores con la condición que sean menores a 2 meses después de la fecha actual. Además se condiciona un conteo de números de contratos que deben ser menores o iguales a 1. Es decir información de vendedores cuyo número de contratos cerrados o exitosos sean 1 o menos. En conclusión; en la primera consulta se muestran los vendedores 1,3y 4 y en la segunda los vendedores 4 y 6. Por tanto el uso de except hará que, como se mencionó anteriormente la ejecución total solo mostrara lo que se muestra en la consulta 1 que no se muestra en la 2; que son los vendedores 1 y 3.*/

select ven.idvendedor,ven.nombrevendedor
from
vendedor ven,
inmueble mueb,
contratoventa cont
where
mueb.IDVENDEDOR=ven.IDVENDEDOR and
mueb.IDINMUEBLE=cont.IDINMUEBLE
group by ven.idvendedor,ven.nombrevendedor,ven.IDSUPERVISOR
having sum(cont.PRECIO)>62000
except
select ven.idvendedor,ven.nombrevendedor
from
vendedor ven,
inmueble mueb,
contratoventa cont
where
mueb.IDVENDEDOR=ven.IDVENDEDOR and
mueb.IDINMUEBLE=cont.IDINMUEBLE and
DATEDIFF(MONTH,SYSDATETIME(),cont.FECHAVENTA)<2
group by ven.idvendedor,ven.nombrevendedor 
having count(cont.NUMCONTRATO)<=1


Comentarios

Entradas populares