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
Publicar un comentario