You are on page 1of 45

 Luego analizando los conceptos del documento: Material de apoyo SQL, realizar en su

base de datos ya creada, los problemas del ejercicio 22 de una Oficina Ferretera desde el
1 al 60.

1. Lista el nombre, oficina y fecha de contrato de todos los empleados.

R. se hace la consulta sobre el NOMBRE, OFICINA_REP Y CONTRATO a la tabla REPVENTAS.


SELECT NOMBRE, OFICINA_REP, CONTRATO
FROM REPVENTAS;

2. Obtener un listado de los empleados por orden de antigüedad en la empresa empezado


por lo más reciente incorporados.
R. se hace la consulta del NOMBRE, NUM_EMPL Y CONTRATO el cual se pide un orden
descendente de empleados con menos antigüedad hasta mayor antigüedad en la tabla
REPVENTAS.

SELECT NOMBRE, NUM_EMPL, CONTRATO


FROM REPVENTAS
ORDER BY CONTRATO DESC;

3. Obtener un listado de los empleados ordenados por volumen de ventas sacando primero
los de mayor ventas.
R. Se hace consulta del volumen de ventas sacando primero las mayores ventas en este caso
utilizamos ORDER BY ventas DESC para darle orden a ventas de mayor a menor en la tabla
REPVENTAS.

SELECT NOMBRE NUM_EMPL, VENTAS


FROM REPVENTAS
ORDER BY VENTAS DESC;

4. Muestra las ventas de cada oficina, ordena por orden alfabético de región y dentro de
cada región por ciudad.

R. Se hace la consulta de las ventas por oficina ordenadas por región, ciudad y ventas en la tabla
OFICINAS la cual se ordenará por región y ciudad.

SELECT REGION, CIUDAD, VENTAS


FROM OFICINAS
ORDER BY REGION, CIUDAD;

5. Lista las oficinas clasificadas por región y dentro de cada región por ganancia (ventas –
objetivo) de modo que las de mayor ganancia aparezcan de primeras.
R. Se hace la consulta de las oficinas con clasificación por región de ventas y su objetivo por la
ganancia en donde aparezca la de mayores ganancias primero en la tabla OFICNAS.

SELECT REGION, CIUDAD, (VENTAS - OBJETIVO) AS GANANCIA


FROM OFICINAS
ORDER BY REGION, 3 DESC;

6. Lista el nombre de los empleados de la oficina 12 que tengan más de 30 años.

R. Se hace la consulta del nombre de empleados de la oficina 12 en la tabla REPVENTAS

SELECT NOMBRE
FROM REPVENTAS
WHERE OFICINA_REP ='12'
AND EDAD > 30;

7. Listar los empleados cuya venta supera su cuota.

R. Se hace la consulta de las ventas que superan su cuota en la tabla REPVENTAS.

SELECT NUM_EMPL, NOMBRE


FROM REPVENTAS
WHERE VENTAS > CUOTA;

8. Lista las oficinas cuyas ventas estén por debajo del 80% de su objetivo.
R. Se hace la consulta del 80% de las ventas de las oficinas en base a su objetivo.
SELECT OFICINA
FROM OFICINAS
WHERE VENTAS < OBJETIVO * 0.8;

9. Lista los empleados cuyas ventas estén comprendidas entre 10.000 y 500.00.

R. Se hace la consulta de los empleados cuyas ventas sean entre 100.000 y 500.00 en la tabla
REPVENTAS.

SELECT NUM_EMPL, NOMBRE


FROM REPVENTAS
WHERE VENTAS BETWEEN 100000 AND 5000000;

10. Lista los empleados de las oficinas 12, 14 y 16.

R. Se realiza la consulta de los empleados que están en las oficinas 12, 13 y 16 en la tabla
REPVENTAS.

SELECT NUM_EMPL, NOMBRE, OFICINA_REP


FROM REPVENTAS
WHERE OFICINA_REP IN (12, 13, 16);

11. Lista las oficinas que no tienen director.


R. Se Hace la consulta de las oficinas que no tiene director en este caso sale en blanco porque en
las oficinas todas las oficinas tienen director.

SELECT OFICINA, CIUDAD


FROM OFICINAS
WHERE DIR IS NULL;
12. Lista de los empleados cuyo nombre empiece por Luis.

R. Se hace la consulta de todos los empleados que empiecen con Luis en este caso saldrá en blanco
por tema de que no tenemos creado ningún empleado con este nombre.

SELECT NUM_EMPL, NOMBRE


FROM REPVENTAS
WHERE NOMBRE LIKE 'LUIS%';

13. Obtener una lista de todos los productos, indicando para cada uno su id_fab, id_producto,
descripción_n, precio y precio con IVA (es el precio aumentado en un 16%).
R. Se hace la consulta sobre los productos donde queremos el ID_FAB, ID_PRODUCTO,
DESCRIPCION_N, DESCRIPCION, PREICO Y PRECIO CON IMPUESTO.

SELECT ID_FAB, ID_PRODUCTO, DESCRIPCION_N, PRECIO, (PRECIO * 1.16) AS IVA_INCLUIDO


FROM PRODUCTOS;

14. De cada pedido se requiere saber el numero de pedidos, FAB, PRODCUTOS, CANTIDAD,
PRECIO UNITARIO E IMPORTE.
R. Se realiza consulta sobre los productos al cual queremos saber la cantidad entre el importe para
que nos de el precio por unidad.

SELECT NUM_PEDIDOS, FAB, PRODUCTO, CANT, (IMPORTE / CANT) AS PRECIO_UNITARIO,


IMPORTE
FROM PEDIDOS;

15. Obtener las oficinas ordenadas por orden alfabético de región dentro de cada región por
ciudad, si hay mas de una en la misma ciudad, aparecerá primero la que tenga el número
de oficina mayor.
R. Se realiza la consulta de la tabla OFICINAS donde queremos ordenarlas de la siguiente manera
región, ciudad y oficina.

SELECT * FROM OFICINAS


ORDER BY REGION, CIUDAD, OFICINA DESC;

16. Obtener los pedidos ordenados por fecha de pedido.


R. Se realiza consulta de la tabla PEDIDOS y se le pide un orden por fecha.

SELECT * FROM PEDIDOS


ORDER BY FECHA_PEDIDO;

17. Listar las cuatro líneas de pedido más caras (las de mayor importe).

R. Hacemos la consulta de los 4 importes mayores en la tabla PEDIDOS.

SELECT * FROM (SELECT * FROM PEDIDOS ORDER BY IMPORTE DESC)


WHERE ROWNUM <=4;

En el documento sale otra fórmula que


utilizamos en servidor SQL.
SELECT TOP 4 * FROM PEDIDOS
ORDER BY IMPORTE DESC;

En el documento sale otra fórmula que


utilizamos en servidor MySQl.
SELECT * FROM PEDIDOS
LIMIT 4
ORDER BY IMPORTE DESC;

18. Obtener de los pedidos fab, producto, cantidad, precio unitario e importe, pero sacando
las 5 líneas de pedido de menor precio unitario.
R. Se realiza consulta de los 5 productos vendidos a menor importe unitario.

SELECT * FROM (
SELECT NUM_PEDIDOS, FAB, PRODUCTO, CANT, (IMPORTE / CANT) AS PRECIO_UNITARIO,
IMPORTE
FROM PEDIDOS
ORDER BY PRECIO_UNITARIO
)
WHERE ROWNUM <= 5;

En el documento sale otra fórmula que


utilizamos en servidor SQL.
SELECT TOP 5 NUM_PEDIDOS, FAB,
PRODUCTO, CANT, (IMPORTE/CANT) AS
PRECIO_UNITARIO, IMPORTE
FROM PEDIDOS
ORDER BY 5;

19. Lista los números de los empleados que tienen oficina asignada.
R. Se realiza consulta de los empleados que no tienen oficina asignada.

SELECT NUM_EMPL
FROM REPVENTAS
WHERE OFICINA_REP IS NULL;

20. Lista los números de las oficinas que no tienen director.

R. Se realiza consulta de los números de oficina que no tienen director.


SELECT OFICINA
FROM OFICINAS
WHERE DIR IS NULL;

21. Lista los datos de las oficinas de las regiones del norte y este (tienen que aparecer primero
las del norte y después las del este).

R. Se realiza consulta de la tabla OFICINAS las regiones norte y este donde solamente existe en
este.

SELECT * FROM OFICINAS


WHERE REGION IN ('NORTE','ESTE')
ORDER BY REGION DESC;

22. Lista los empleados de nombre Julia.


R. Se realiza consulta de la tabla REPVENTAS la cual no tenemos ningún empleado que sea Julia.

SELECT * FROM REPVENTAS


WHERE NOMBRE LIKE 'JULIA%'

23. Listar los productos cuyo ID_PRODUCTO ACABE EN X.

R. Se realiza consulta de los ID_PRODUCTOS que acaban en ‘X’.


SELECT * FROM PRODUCTOS
WHERE ID_PRODUCTO LIKE '%X'
24. Listar las oficinas del este indicando para cada una de ellas su número, ciudad, números y
nombres de sus empleados. Hacer una versión en la que aparecen solo las que tienen
empleados, y hacer otra en la que aparezca las oficinas del este que no tienen empleados.

R. Se realizaron 2 consultas inner join y left join.


SELECT OFICINAS.OFICINA, CIUDAD, NUM_EMPL, NOMBRE
FROM OFICINAS INNER JOIN REPVENTAS
ON OFICINAS.OFICINA = REPVENTAS.OFICINA_REP
WHERE REGION = 'ESTE';
SELECT OFICINAS.OFICINA, CIUDAD, NUM_EMPL, NOMBRE
FROM OFICINAS LEFT JOIN REPVENTAS
ON OFICINAS.OFICINA = REPVENTAS.OFICINA_REP
WHERE REGION = 'ESTE';

25. Listar los pedidos mostrando su número, importe, nombre de cliente y el límite de crédito
del cliente correspondiente (todos los pedidos tienen cliente y representante).

R. Se realiza consulta en la tabla pedidos donde queremos que se muestre los datos.

SELECT NUM_PEDIDOS, IMPORTE, CLIENTES.EMPRESA AS CLIENTE, LIMITE_CREDITO


FROM PEDIDOS INNER JOIN CLIENTES
ON PEDIDOS.CLIE = CLIENTES.NUM_CLIE
26. Listar los datos de cada uno de los empleados, la ciudad y la región en donde trabaja.

R. Se realiza consulta de tabla REPVENTAS Y OFICINAS y utilizamos LEFT JOIN para que aparezcan
los empleados que no tienen oficina.

SELECT REPVENTAS.*, CIUDAD, REGION


FROM REPVENTAS LEFT JOIN OFICINAS
ON REPVENTAS.OFICINA_REP = OFICINAS.OFICINA

27. Listar las oficinas con objetivo superior a 600.000 bs. Indicando para cada una de ellas el
nombre de su director.
R. Se consulta las oficinas con un monto objetivo de 600000 y sus directores utilizamos RIGHT JOIN
para que salgan los directores asociados.

SELECT OFICINAS.*, NOMBRE AS DIRECTOR


FROM REPVENTAS RIGHT JOIN OFICINAS
ON REPVENTAS.NUM_EMPL = OFICINAS.DIR
WHERE OBJETIVO > 600000;

28. Listar los pedidos superiores a 25.000 bs, incluyendo el nombre del empleado que tomo el
pedido y el nombre del cliente que solicito.

R. Se realiza consulta de los pedidos superiores a 25000 bs donde incluimos datos de las tablas
REPVENTAS, CLIENTES Y PEDIDOS.
29. Hallar los empleados que realizaron su primer pedido el mismo dia en que fueron
contratados.

R. Se realiza consulta de los pedidos con fecha igual a la contratación del representante de ventas.

SELECT REPVENTAS.*
FROM REPVENTAS INNER JOIN PEDIDOS
ON PEDIDOS.REP = REPVENTAS.NUM_EMPL
WHERE FECHA_PEDIDO <= CONTRATO;

30. Listar los empleados con una cuota superior a la de su jefe; para cada empleado sacar sus
datos y numero, nombre y cuota de su jefe.
31. Listar los códigos de los empleados que tienen una línea de pedido superior a 10.000 bs o
que tengan una cuota inferior a 10.000 bs.

R. Se realiza una consulta sobre los códigos de los empleados que tienen una línea de pedido
superior a 10.000 bs y inferior al mismo monto.

SELECT REP
FROM PEDIDOS
WHERE IMPORTE > 10000
UNION
SELECT NUM_EMPL
FROM REPVENTAS
WHERE CUOTA < 10000;
32. Obtener el importe total de ventas de todos los empleados y el mayor objetivo de las
oficinas asignadas a los empleados.

R. Se realiza consulta donde el total de importe de ventas de todos los empleados y el objetivo
mayor salgan en la consulta.

SELECT SUM(REPVENTAS.VENTAS), MAX(OBJETIVO)


FROM REPVENTAS LEFT JOIN OFICINAS
ON REPVENTAS.OFICINA_REP <= OFICINAS.OFICINA

33. Obtener de cada precio unitario el importe total vendido.


R. Se realiza consulta de precio unitario y el total vendido.

SELECT IMPORTE/CANT, SUM(IMPORTE)


FROM PEDIDOS
GROUP BY IMPORTE/CANT;

34. ¿Cuál es la cuota media y las ventas medias de todos los empleados?

R. Se realiza consulta de la mediana de cuota y ventas con avg.

SELECT AVG(CUOTA) AS CUOTA_MEDIA,


AVG(VENTAS) AS VENTAS_MEDIAS
FROM REPVENTAS;
35. Hallar el importe medio de pedidos, el importe total de pedidos y el precio medio de
ventas (el precio de ventas es el precio unitario en cada pedido).

R. Se realiza consulta de la tabla pedidos donde queremos el precio y ventas promedio con
importe.

SELECT AVG(IMPORTE) AS IMPORTE_MEDIO,


SUM(IMPORTE) AS IMOPRTE_TOTAL,
AVG(IMPORTE/CANT) AS PRECIO_VENTAS_MEDIO
FROM PEDIDOS;

36. Hallar el precio medio de los productos del fabricante ACI.


R. Se realiza consulta sobre el precio medio de los productos ACI Fabricante.

SELECT AVG(PRECIO) AS P_MEDIO_ACI


FROM PRODUCTOS
WHERE ID_FAB= 'ACI';

37. ¿Cuál es el importe total de los pedidos realizados por el empleado PAUL CRUZ?

R. Se realiza consulta de las ventas de paul cruz.

SELECT SUM(IMPORTE) AS TOTAL_PEDIDOS_V_PANTALLA


FROM REPVENTAS INNER JOIN PEDIDOS
ON REPVENTAS.NUM_EMPL <= PEDIDOS.REP
WHERE NOMBRE = 'PAUL CRUZ'
38. Hallar en la fecha en la que se realizo el primer pedido (suponiendo que en la tabla de
pedidos se tienen todos los pedidos realizados hasta la fecha).

R. Se realiza consulta con la sentencia MIN para traer el primer pedido.

SELECT MIN(FECHA_PEDIDO) AS PRIMER_PEDIDO


FROM PEDIDOS

39. Hallar cuantos pedidos hay de más de 250.000 bs.

R. Se realiza consulta con el COUNT para tener la suma de todos los pedidos que son mayores al
monto.
SELECT COUNT(*) AS CUANTOS_PEDIDOS_MAYIRES
FROM PEDIDOS
WHERE IMPORTE > 250.000;

40. Listar cuantos empleados están asignados a cada oficina, indicar el numero de oficinas y
cuantos hay asignados.

R. Se realiza consulta utilizando count para sumar todas las oficinas asignadas con su numero
organizado en group by.

SELECT OFICINA_REP, COUNT(*) AS CUANTOS_EMPLEADOS


FROM REPVENTAS
GROUP BY OFICINA_REP;
41. Para cada empleado, obtener su número, nombre e importe vendido por ese empleado a
cada cliente indicando el número de clientes.

R. Se realiza una consulta sobre el número, nombre e importe vendido por empleado se realiza un
sum para el total y inner join para visualización entre bases de datos.

SELECT NUM_EMPL, NOMBRE, CLIE AS CLIENTE,


SUM(IMPORTE) AS TOTAL_VENDIDO
FROM REPVENTAS
INNER JOIN PEDIDOS
ON PEDIDOS.REP = REPVENTAS.NUM_EMPL
GROUP BY NUM_EMPL, NOMBRE, CLIE;
42. Para cada empleado cuyos pedidos suman más de 300.000 bs, hallar su importe medio de
pedidos. En el resultado indicar el numero de empleados y su importe medio de pedidos.

R. Se realiza consulta donde salgan los empleados con suma de más de 300.000 bs y su importe
medio AVG Y HAVING SUM.

SELECT REP, AVG(IMPORTE) AS IMPORTE_MEDIO


FROM PEDIDOS
GROUP BY REP
HAVING SUM(IMPORTE) > 300.000;
43. Listar de cada producto, su descripción, precio, cantidad total pedida, incluye solo los
productos cuya cantidad total sea superior al 75% del stock y ordenado por cantidad total
pedida.

R. Se realiza consulta sobre el total de pedidos superior al 75% de stock sum sumamos importes
iner join consultamos entre tablas group by agrupamos having sum con order by.

SELECT DESCRIPCION_N, PRECIO, SUM(IMPORTE) AS TOTAL_PEDIDO


FROM PRODUCTOS INNER JOIN PEDIDOS ON PEDIDOS.FAB = PRODUCTOS.ID_FAB AND
PEDIDOS.PRODUCTO = PRODUCTOS.ID_PRODUCTO
GROUP BY ID_FAB, ID_PRODUCTO, DESCRIPCION_N, PRECIO, EXISTENCIA_S
HAVING SUM(IMPORTE) > EXISTENCIA_S * 0.75
ORDER BY 3;
44. ¿Cuántas oficinas tienen empleados con ventas superiores a su cuota, no se quiere saber
cuales si no cuantas hay?

R. Se realiza consulta de empleados con ventas superiores a la cuota, pero no cuales si no cuantas
hay entonces hacemos count para contar las oficinas disctinct para omitir los resultados
duplicados.

SELECT COUNT(*) AS CUANTAS_OFICINAS


FROM (SELECT DISTINCT OFICINA_REP
FROM REPVENTAS
WHERE VENTAS > CUOTA);
45. Listar el numero y nombre de los empleados cuya fecha de contrato sea igual a la primera
fecha de todos los pedidos de la empresa.

R. Se realiza consulta donde la empresa quiere saber primer contrato en fecha por todos los
pedidos hechos con min buscamos fechas.

SELECT NUM_EMPL, NOMBRE


FROM REPVENTAS
WHERE CONTRATO <= (SELECT MIN(FECHA_PEDIDO) FROM PEDIDOS);

46. Listar los nombres de los clientes que tienen asignados el representante BILL ADAMS
(suponiendo que no puede haber representantes con el mismo nombre).
R. Se realiza consulta de los clientes que tiene asignado un representante en específico.

SELECT EMPRESA
FROM CLIENTES
WHERE REP_CLIE <= (SELECT NUM_EMPL
FROM REPVENTAS
WHERE NOMBRE <= 'BILL ADAMS');

47. Listar los vendedores (num_empl, nombre y n° de oficina) que trabajan en oficinas
‘’buenas’’ (las que tienen ventas superiores a su objetivo
R Se realizan 3 soluciones a la consulta las cuales son:

SELECT NUM_EMPL, NOMBRE, OFICINA_REP


FROM REPVENTAS
WHERE OFICINA_REP IN (SELECT OFICINA
FROM OFICINAS
WHERE VENTAS > OBJETIVO);

SELECT NUM_EMPL, NOMBRE, OFICINA_REP


FROM REPVENTAS
WHERE EXISTS (SELECT* FROM OFICINAS
WHERE REPVENTAS.OFICINA_REP <= OFICINAS.OFICINA
AND VENTAS > OBJETIVO);

SELECT NUM_EMPL, NOMBRE, OFICINA_REP


FROM REPVENTAS
WHERE OFICINA_REP <= ANY (SELECT OFICINA
FROM OFICINAS
WHERE VENTAS > OBJETIVO);
48. Listar los vendedores que no trabajan en oficinas dirigidas por el empleado 108.

R. Se realiza consulta de los vendedores dirigida por el empleador 108.

SELECT NUM_EMPL, NOMBRE, OFICINA_REP


FROM REPVENTAS
WHERE OFICINA_REP NOT IN (SELECT OFICINA
FROM OFICINAS
WHERE DIR <= 108);
49. Listar los productos (id_fab, id_producto, descripción) para los cuales no se ha recibido
ningún pedido de 25000 bs o más).

R. Se realiza consulta de los productos con ningún pedido 25000 bs o más.

SELECT ID_FAB, ID_PRODUCTO, DESCRIPCION_N


FROM PRODUCTOS
WHERE NOT EXISTS (SELECT * FROM PEDIDOS
WHERE FAB <= ID_FAB
AND PRODUCTO <= ID_PRODUCTO
AND IMPORTE >= 25000);
50. Listar los clientes asignados a MARY JONES que no han remitido un pedido superior a 3000
bs.

R. Se realiza consulta de los clientes asignado a MARY JONES que no le ah hechos pedidos por
encima de 3000 bs.

SELECT NUM_CLIE, EMPRESA


FROM CLIENTES
WHERE REP_CLIE IN (SELECT NUM_EMPL
FROM REPVENTAS
WHERE NOMBRE <= 'MARY JONES')
AND NUM_CLIE NOT IN (SELECT CLIE
FROM PEDIDOS
WHERE IMPORTE > 3000
AND CLIE IS NOT NULL);
51. Listar las oficinas en donde haya un vendedor cuyas ventas representan mas del 55% del
objetivo de su oficina.

R. Se realiza consulta de los vendedores cuyas ventas están más de 55%.

SELECT * FROM OFICINAS


WHERE EXISTS (SELECT * FROM REPVENTAS
WHERE REPVENTAS.OFICINA_REP <= OFICINAS.OFICINA
AND VENTAS > OBJETIVO * 0.55);

52. Listar las oficinas en donde todos los vendedores tienen ventas que superan el 50% de los
objetivos de la oficina.
R. Se realizan 2 consultas para las oficinas con vendedores que superan el 50%.

SELECT * FROM OFICINAS


WHERE (OBJETIVO * 0.50) <= ALL (SELECT VENTAS
FROM REPVENTAS
WHERE REPVENTAS.OFICINA_REP <= OFICINAS.OFICINA
AND VENTAS IS NOT NULL);

SELECT * FROM OFICINAS


WHERE (OBJETIVO * .50) <= (SELECT MIN(VENTAS)
FROM REPVENTAS
WHERE REPVENTAS.OFICINA_REP <= OFICINAS.OFICINA);
53. Listar las oficinas que tengan un objetivo mayor que la suma de las cuotas de sus
vendedores.

R. Se hace la consulta sobre las cuotas que suman los vendedores con mayor índice.

SELECT * FROM OFICINAS


WHERE OBJETIVO > (SELECT SUM(CUOTA)
FROM REPVENTAS
WHERE REPVENTAS.OFICINA_REP = OFICINAS.OFICINA);

54. Subir un 5% el precio de todos los productos del fabricante ACI.


R. Se actualizo la tabla PRODUCTOS el 5% del precio en los productos fabricados en ACI.

UPDATE PRODUCTOS
SET PRECIO = PRECIO * 1.05
WHERE ID_FAB ='ACI';

55. Añadir una oficina para la ciudad de Caracas, con el numero de oficina 30, con un objetivo
de 100000 y región centro.
R. Se realiza la inserción de la data en la tabla de OFICINAS.

INSERT INTO OFICINAS (OFICINA, REGION, CIUDAD, OBJETIVO)


VALUE (30, 'CENTRO', 'MADRID', 100000);

INSERT INTO OFICINAS (OFICINA, REGION, CIUDAD, DIR, OBJETIVO, VENTAS)


VALUES (30, 'CENTRO', 'MADRID', NULL, 100000, 0);

INSERT INTO OFICINAS VALUES (30, 'CENTRO', 'MADRID', NULL, 100000, 0);

56. Cambiar los empleados de la oficina 21 a la oficina 30.

R. Se realiza actualización en la tabla REPVENTAS de una oficina a otra.

UPDATE REPVENTAS
SET OFICINA_REP = 30
WHERE OFICINA_REP = 21;
57. Eliminar los pedidos del empleado 105.

R. Se realiza unas eliminaciones datos en la tabla pedidos.

DELETE FROM PEDIDOS


WHERE REP = 105;

58. Eliminar las oficinas que no tengan empleados.

59. Recuperar los precios originales a partir de la tabla nuevosproductos.

You might also like