PARTE UNO
JOINS
1. Realiza los Joins para relacionar las tablas de los siguientes modelos:
Reserva
Join 1: cliente.id_clie=reserva.id_cli;
Join 2: reserva.id_res=vehiculo.id_res;
Join 3: vehiculo.placa=garaje.placa;
Academia de Clases
Join 1: empresa.nitemp=alumno.nitemp;
Join 2: profesor.idpro=grupo.idpro;
Join 3: diplomado.coddip=grupo.coddip;
Join 4: alumno.idalu=asistir.idalu
Join 5: grupo.numgru=asistir.numgru
Almacén
Join 1: almacen.numalm=estanteria.numalm;
Join 2: pieza.tippie=estanteria.tippie;
Join 3: pieza.molpie=estanteria.molpie;
Join 4: pieza.tippie= componerse.tippie1
Join 5: pieza.molpie= componerse.molpie1
Join 6: pieza.tippie=componerse.tippie2;
Join 7: pieza.molpie= componerse.molpie2;
Porque siete joins, porque la llave primaria de pieza es compuesta.
Compañía
Join 1: departamento.iddpto=empleado.iddpto;
Join 2: departamento.iddpto=proyecto.iddpto;
Join 3: empleado.rutemp=trabaja.rutemp;
Join 4: proyecto.idpro=trabaja.rutemp;
Diario
Join 1: edicion.numedi=seccion.numedi;
Join 2: seccion.idsec=pagina.idsec;
Join 3: pagina.idpag=articulo.idpag;
Join 4: autor.idaut=articulo.idaut;
Revista Hemisferio
Join 1: usuario.cod_usu=anuncio.cod_usu;
Join 2: usuario.cod_usu=articulo.cod_usu;
Join 3: articulo.cod_art=clasifica.cod_art;
Join 4: categoria.cod_cat=clasifica.cod_cat;
Join 5: usuario.cod_usu=ficha.cod_usu
--Script “Pedidos”
--https://app.box.com/s/9714y7zjuv4tq93s5v9b
--2. Utilizando el script de pedidos responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo.
--a. Muestre las órdenes generadas que contengan productos de
--la categoría de cárnicos.
select ordenes.*
from ordenes,detalleordenes,productos,categorias
where ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
categorias.nombrecat='Carnicos';
--b. Muestre las ordenes solicitadas por el implado Mario Sanchez
--que fueron realizadas en la primera quincena de junio de 2007
select ordenes.*
from empleados,ordenes
where empleados.empleadoid=ordenes.empleadoid and
empleados.nombre='Mario' and
empleados.apellido='Sanchez' and
extract(day from fechaorden) between 1 and 15 and
extract(month from fechaorden)=6 and
extract(year from fechaorden)=2007;
select ordenes.*
from empleados,ordenes
where empleados.empleadoid=ordenes.empleadoid and
empleados.nombre='Mario' and
empleados.apellido='Sanchez' and
fechaorden between '01-06-2007' and '15-06-2007' ;
--c. Liste el nombre y las existencias de los productos suministrados
--por el proveedor Don Diego y que la cantidad en el detalle de la orden
--sea superior a 10.
select productos.descripcion,productos.existencia
from proveedores,productos,detalleordenes,ordenes
where proveedores.proveedorid=productos.proveedorid and
productos.productoid=detalleordenes.productoid and
ordenes.ordenid=detalleordenes.ordenid and
proveedores.nombreprov='Don Diego' and
detalleordenes.cantidad>10;
--d. Obtenga la identificación de la orden, la fecha de la orden,
--el nombre del empleado que realizo la orden, el cliente quien solicito
--la orden y que en su detalle contiene el producto con la descripción de
--Rimmel.
select ordenes.ordenid,
ordenes.fechaorden,
empleados.nombre,
clientes.nombrecontacto,
productos.descripcion as "Producto Buscado"
from empleados,ordenes,clientes,detalleordenes,productos
where empleados.empleadoid=ordenes.empleadoid and
clientes.clienteid=ordenes.ordenid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
productos.descripcion='Rimmel';
--e. Muestra los nombres de los clientes que hayan solicitado
--productos suministrados por el proveedor Almay y que pertenezcan a la
--categoría de Cosmeticos.
select clientes.nombrecontacto,productos.descripcion
from clientes,ordenes,detalleordenes,productos,proveedores,categorias
where clientes.clienteid=ordenes.ordenid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
proveedores.proveedorid=productos.proveedorid and
proveedores.nombreprov='Almay' and
categorias.nombrecat='Cosmeticos';
--Script “Tienda Informática”
--https://app.box.com/s/htt6jpmr4d6azftn2hxr
--3. Utilizando el script de tienda informática responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo.
--f. Obtener la clave y precio del articulo donde su nombre tiene USB
--y fue suministrada por el fabricante Kingston.
select articulos.clavearticulo,articulos.precio
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante and
articulos.nombrearticulo like '%USB%' and
fabricantes.nombre='Kingston';
--g. Obtener todos los datos de los fabricantes donde el precio
--artículos esté entre $100 y $350
select distinct fabricantes.clavefabricante,fabricantes.nombre
from fabricantes,articulos
where fabricantes.clavefabricante=articulos.clavefabricante and
articulos.precio between 100 and 350;
--h. Obtener un listado de artículos, incluyendo el nombre del
--artículo, su precio, y el nombre de su fabricante.
select articulos.nombrearticulo,articulos.precio,fabricantes.nombre
from fabricantes,articulos
where fabricantes.clavefabricante=articulos.clavefabricante;
--i. Obtener un listado completo de artículos, incluyendo los
--de su fabricante.
select *
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante;
--j. Muestre la información de los artículos y fabricantes,
--ya sea el precio de los productos sean menores a 200 o que comienzan por M
--y el fabricante sea Kingston.
select *
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante and
(articulos.precio<200 or (nombrearticulo like 'M%' and fabricantes.nombre='Kingston'));
--PARTE DOS
--FUNCIONES DE AGREGADO
--AVG – SUM – COUNT – MAX – MIN
--Script “Pedidos”
--https://app.box.com/s/9714y7zjuv4tq93s5v9b
--4. Utilizando el script de pedidos responder las siguientes consultas
--utilizando joins para relacionar las tablas del modelo, funciones de agregado
--y subconsultas para responder los ítems.
--k. Muestre el nombre de la categoría y cantidad de productos que pertenecen a ella.
select categorias.nombrecat,count(productoid)
from categorias,productos
where categorias.categoriaid=productos.categoriaid
group by categorias.nombrecat;
--l. Muestre el precio promedio de las distintas categorías.
select categorias.nombrecat,trunc(avg(productos.preciounit),2) as "AVG x Categoria"
from categorias,productos
where categorias.categoriaid=productos.categoriaid
group by categorias.nombrecat;
--m. Obtenga la cantidad de clientes que hayan solicitado productos
--suministrados por el proveedor Almay y que pertenezcan a la categoría de Cosmeticos.
select count(clientes.clienteid)
from clientes,ordenes,detalleordenes,productos,categorias,proveedores
where clientes.clienteid=ordenes.clienteid and
ordenes.ordenid=detalleordenes.ordenid and
productos.productoid=detalleordenes.productoid and
categorias.categoriaid=productos.categoriaid and
proveedores.proveedorid=productos.proveedorid and
proveedores.nombreprov='Almay' and
categorias.nombrecat='Cosmeticos';
--n. Muestre las existencias totales según el proveedor que surtió el producto.
select count(productos.existencia)
from proveedores,productos
where proveedores.proveedorid=productos.proveedorid
group by proveedores.nombreprov;
--o. Muestre el nombre del proveedor y el precio del producto más costoso.
select proveedores.nombreprov,max(productos.preciounit)
from proveedores,productos
where proveedores.proveedorid=productos.proveedorid
group by proveedores.nombreprov;
--Script “Tienda Informática”
--https://app.box.com/s/htt6jpmr4d6azftn2hxr
--5. Utilizando el script de tienda informática responder las siguientes
--consultas utilizando joins para relacionar las tablas del modelo, funciones de agregado
--y subconsultas para responder los ítems.
--p. Obtener el precio medio de los productos por cada fabricante, mostrando
--el nombre del fabricante.
select fabricantes.nombre, trunc(avg(articulos.precio),2)
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante
group by fabricantes.nombre;
--q. Obtener los nombres de los fabricantes de los productos cuyo
--precio medio sea superior o igual a 60. (Sub)
select fabricantes.nombre
from articulos, fabricantes
where (select avg(articulos.precio) from articulos)>=60
group by fabricantes.nombre;
--r. Muestre el nombre del fabricante y la cantidad de productos que provee.
select fabricantes.nombre,
count(articulos.clavearticulo) as "CantidadProductos"
from articulos,fabricantes
where fabricantes.clavefabricante=articulos.clavefabricante
group by fabricantes.nombre;
--s. Obtener el nombre y precio del articulo más barato. (Sub)
select articulos.nombrearticulo,articulos.precio
from articulos
where precio=(select min(articulos.precio) from articulos);
--t. Obtener una lista con el nombre y precio de los artículos más caros de cada proveedor,
--incluyendo el nombre del fabricante.
select fabricantes.nombre,articulos.nombrearticulo,precio
from articulos,fabricantes
where precio=(select max(articulos.precio)
from articulos
where fabricantes.clavefabricante=articulos.clavefabricante);
--Script “Cliclista”
--https://app.box.com/s/rclpz26ndhli9svvq4so
--6. Utilizando el script de ciclista responder las siguientes consultas utilizando joins
-- para relacionar las tablas del modelo, funciones de agregado y subconsultas para responder los ítems.
--u. Obtener el nombre del ciclista más joven
select nombre
from ciclista
where edad=(select min(edad) from ciclista);
--v. Obtener el número de ciclistas de cada equipo
select count(dorsal)
from ciclista
group by nomeq;
--w. Obtener el nombre de los equipos que tengan más de 5 ciclistas.
select nomeq
from ciclista
group by nomeq
having count(dorsal)>5;
--x. Obtener el nombre de los ciclistas que han ganado más de un puerto
select ciclista.nombre, count(puerto.dorsal)
from ciclista,puerto
where ciclista.dorsal=puerto.dorsal
group by puerto.dorsal,ciclista.nombre
having count(puerto.dorsal)>1;
--y. Nombre de los ciclistas que no han ganado ninguna etapa.
select nombre
from ciclista
where dorsal not in(select dorsal from etapa);
--Script “Empleado & Departamento”
--https://app.box.com/s/aet7i391g07ydnlz0ovt
--7. Utilizando el script de Empleado y Departamento responder las siguientes consultas
--utilizando joins para relacionar las tablas del modelo, funciones de agregado y subconsultas
--para responder los ítems.
--z. Para los empleados que tengan como jefe a un empleado con código mayor que el suyo,
--obtén los que reciben de salario más de 1000 y menos de 2000, o que están en el departamento 30.
select *
from empleado
where empsup>empnro and ((empsal>1000 and empsal<2000)or (dptonro=30));
--aa. Obtén el salario más alto de la empresa, el total destinado a comisiones
--y el número de empleados.
select max(empsal) as "Salario Maximo",
sum(comm) as "Sumatorial de Comisiones" ,
count(empnro) as "Cuantos Empleados"
from empleado;
--bb. Halla el salario más alto, el más bajo, y la diferencia entre ellos.
select max(empsal) as "Salario Maximo",
min(empsal) as "Salario Minimo",
(max(empsal)-min(empsal)) as "Resta entre el Max y Min"
from empleado;
--cc. Halla los empleados cuyo salario supera o coincide con la media del salario de la empresa.
select *
from empleado
where empsal>=(select avg(empsal) from empleado);
--dd. ¿Cuántos empleos diferentes, cuántos empleados, y cuantos salarios diferentes
--encontramos en el departamento 30, y a cuánto asciende la suma de salarios de dicho departamento?
select count(distinct empcar) as "Cuantos Empleos",
count(empnom)"Cuantos Empleados",
count(distinct empsal)"Salarios Diferentes",
sum(empsal)"Sumatorias Salarios"
from empleado
where dptonro=30;
--ee. ¿Cuántos empleados tienen comisión?
select count(comm)
from empleado
where comm>0;
0 comments:
Publicar un comentario