Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Practica 09b Consultas SQL

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 8

UNIVERSIDAD PRIVADA DE TACNA

FACULTAD DE INGENIERIA
Escuela Profesional de Ingeniería de Sistemas

PRÁCTICA 09
“EJERCICIOS: REALIZACIÓN DE CONSULTAS SQL”

Curso: Diseño de Base de Datos


Docente: Mg. Oliver Santana Carbajal

Integrantes:
Romero Roque, Angelica Beatriz (2019063327)
Sagua Ramos, Alonso Gustavo (2018062254)
Salluca Valero, Jhon Francisco (2019063633)

Tacna – Perú
2021
Mg. Oliver Santana Carbajal

PRÁCTICA 09b
Ejercicios. Realización de consultas SQL
CASO 3: Gestión de ventas
Modelo entidad/relación.

Base de datos para MySQL


DROP DATABASE IF EXISTS ventas;
CREATE DATABASE ventas CHARACTER SET utf8mb4;
USE ventas;

CREATE TABLE cliente (


id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
apellido1 VARCHAR(100) NOT NULL,
apellido2 VARCHAR(100),
ciudad VARCHAR(100),
categoría INT UNSIGNED
);

CREATE TABLE comercial (


id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
apellido1 VARCHAR(100) NOT NULL,
apellido2 VARCHAR(100),
comisión FLOAT
);

CREATE TABLE pedido (


id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
total DOUBLE NOT NULL,
fecha DATE,
id_cliente INT UNSIGNED NOT NULL,
id_comercial INT UNSIGNED NOT NULL,
FOREIGN KEY (id_cliente) REFERENCES cliente(id),
FOREIGN KEY (id_comercial) REFERENCES comercial(id)
);

INSERT INTO cliente VALUES(1, 'Aarón', 'Rivero', 'Gómez', 'Almería', 100);


INSERT INTO cliente VALUES(2, 'Adela', 'Salas', 'Díaz', 'Granada', 200);
INSERT INTO cliente VALUES(3, 'Adolfo', 'Rubio', 'Flores', 'Sevilla', NULL);
INSERT INTO cliente VALUES(4, 'Adrián', 'Suárez', NULL, 'Jaén', 300);
Mg. Oliver Santana Carbajal
INSERT INTO cliente VALUES(5, 'Marcos', 'Loyola', 'Méndez', 'Almería', 200);
INSERT INTO cliente VALUES(6, 'María', 'Santana', 'Moreno', 'Cádiz', 100);
INSERT INTO cliente VALUES(7, 'Pilar', 'Ruiz', NULL, 'Sevilla', 300);
INSERT INTO cliente VALUES(8, 'Pepe', 'Ruiz', 'Santana', 'Huelva', 200);
INSERT INTO cliente VALUES(9, 'Guillermo', 'López', 'Gómez', 'Granada', 225);
INSERT INTO cliente VALUES(10, 'Daniel', 'Santana', 'Loyola', 'Sevilla', 125);

INSERT INTO comercial VALUES(1, 'Daniel', 'Sáez', 'Vega', 0.15);


INSERT INTO comercial VALUES(2, 'Juan', 'Gómez', 'López', 0.13);
INSERT INTO comercial VALUES(3, 'Diego','Flores', 'Salas', 0.11);
INSERT INTO comercial VALUES(4, 'Marta','Herrera', 'Gil', 0.14);
INSERT INTO comercial VALUES(5, 'Antonio','Carretero', 'Ortega', 0.12);
INSERT INTO comercial VALUES(6, 'Manuel','Domínguez', 'Hernández', 0.13);
INSERT INTO comercial VALUES(7, 'Antonio','Vega', 'Hernández', 0.11);
INSERT INTO comercial VALUES(8, 'Alfredo','Ruiz', 'Flores', 0.05);

INSERT INTO pedido VALUES(1, 150.5, '2017-10-05', 5, 2);


INSERT INTO pedido VALUES(2, 270.65, '2016-09-10', 1, 5);
INSERT INTO pedido VALUES(3, 65.26, '2017-10-05', 2, 1);
INSERT INTO pedido VALUES(4, 110.5, '2016-08-17', 8, 3);
INSERT INTO pedido VALUES(5, 948.5, '2017-09-10', 5, 2);
INSERT INTO pedido VALUES(6, 2400.6, '2016-07-27', 7, 1);
INSERT INTO pedido VALUES(7, 5760, '2015-09-10', 2, 1);
INSERT INTO pedido VALUES(8, 1983.43, '2017-10-10', 4, 6);
INSERT INTO pedido VALUES(9, 2480.4, '2016-10-10', 8, 3);
INSERT INTO pedido VALUES(10, 250.45, '2015-06-27', 8, 2);
INSERT INTO pedido VALUES(11, 75.29, '2016-08-17', 3, 7);
INSERT INTO pedido VALUES(12, 3045.6, '2017-04-25', 2, 1);
INSERT INTO pedido VALUES(13, 545.75, '2019-01-25', 6, 1);
INSERT INTO pedido VALUES(14, 145.82, '2017-02-02', 6, 1);
INSERT INTO pedido VALUES(15, 370.85, '2019-03-11', 1, 5);
INSERT INTO pedido VALUES(16, 2389.23, '2019-03-11', 1, 5);

Consultas multitabla (Composición externa)


Resuelva todas las consultas utilizando las cláusulas LEFT JOIN y RIGHT JOIN.
1. Devuelve un listado con todos los clientes junto con los datos de los pedidos que han realizado. Este
listado también debe incluir los clientes que no han realizado ningún pedido. El listado debe estar
ordenado alfabéticamente por el primer apellido, segundo apellido y nombre de los clientes.
select a.id,a.apellido1,a.apellido2,a.nombre,b.* from ventas.pedido b right join ventas.cliente a on
b.id_cliente = a.id ORDER BY apellido1 ASC, apellido2 ASC, nombre ASC;
Mg. Oliver Santana Carbajal

2. Devuelve un listado con todos los comerciales junto con los datos de los pedidos que han realizado.
Este listado también debe incluir los comerciales que no han realizado ningún pedido. El listado debe
estar ordenado alfabéticamente por el primer apellido, segundo apellido y nombre de los comerciales.

select a.id,a.apellido1,a.apellido2,a.nombre,b.*
from ventas.pedido b

right join ventas.comercial a

on b.id_comercial = a.id

ORDER BY apellido1 ASC, apellido2 ASC, nombre ASC;


Mg. Oliver Santana Carbajal

3. Devuelve un listado que solamente muestre los clientes que no han realizado ningún pedido.

select a.id,a.apellido1,a.apellido2,a.nombre,b.*
from ventas.pedido b
right join ventas.cliente a
on b.id_cliente = a.id
where b.id_cliente is null;

4. Devuelve un listado que solamente muestre los comerciales que no han realizado ningún pedido.
select a.id,a.apellido1,a.apellido2,a.nombre,b.*

from ventas.comercial a

left join ventas.pedido b

on a.id = b.id_comercial

where b.id_comercial is null;

5. Devuelve un listado con los clientes que no han realizado ningún pedido y de los comerciales que no
han participado en ningún pedido. Ordene el listado alfabéticamente por los apellidos y el nombre. En
en listado deberá diferenciar de algún modo los clientes y los comerciales.
SELECT * FROM comercial LEFT JOIN pedido ON comercial.id = pedido.id_comercial WHERE pedido.id_cliente IS
NULL;
SELECT * FROM pedido RIGTH JOIN comercial ON comercial.id = pedido.id_comercial WHERE pedido.id_comercial
IS NULL
UNION
SELECT comercial.apellido1, comercial.apellido2, comercial.nombre FROM comercial LEFT JOIN pedido
ON comercial.id = perdido.id_comercial WHERE pedido.id_comercial IS NULL;
6. ¿Se podrían realizar las consultas anteriores con NATURAL LEFT JOIN o NATURAL RIGHT JOIN? Justifique su
respuesta.
Si se pueden realizar este tipo consultas siempre y cuando el nombre y las listas seleccionada tenga nombre
que no incidan o sean diferentes. Ya que si tienen nombre igual el programa no puede definir a cual nos
referimos.

Consultas resumen
Mg. Oliver Santana Carbajal

1. Calcula la cantidad total que suman todos los pedidos que aparecen en la tabla pedido.

select sum(total) as 'total Pedido'

from pedido;

2. Calcula la cantidad media de todos los pedidos que aparecen en la tabla pedido.

3. Calcula el número total de comerciales distintos que aparecen en la tabla pedido.


4. Calcula el número total de clientes que aparecen en la tabla cliente.
5. Calcula cuál es la mayor cantidad que aparece en la tabla pedido.
6. Calcula cuál es la menor cantidad que aparece en la tabla pedido.
7. Calcula cuál es el valor máximo de categoría para cada una de las ciudades que aparece en la
tabla cliente.
8. Calcula cuál es el máximo valor de los pedidos realizados durante el mismo día para cada uno de los
clientes. Es decir, el mismo cliente puede haber realizado varios pedidos de diferentes cantidades el
mismo día. Se pide que se calcule cuál es el pedido de máximo valor para cada uno de los días en los
que un cliente ha realizado un pedido. Muestra el identificador del cliente, nombre, apellidos, la fecha y
el valor de la cantidad.
9. Calcula cuál es el máximo valor de los pedidos realizados durante el mismo día para cada uno de los
clientes, teniendo en cuenta que sólo queremos mostrar aquellos pedidos que superen la cantidad de
2000 €.
10. Calcula el máximo valor de los pedidos realizados para cada uno de los comerciales durante la
fecha 2016-08-17. Muestra el identificador del comercial, nombre, apellidos y total.
11. Devuelve un listado con el identificador de cliente, nombre y apellidos y el número total de pedidos que
ha realizado cada uno de clientes. Tenga en cuenta que pueden existir clientes que no han realizado
ningún pedido. Estos clientes también deben aparecer en el listado indicando que el número de
pedidos realizados es 0.
12. Devuelve un listado con el identificador de cliente, nombre y apellidos y el número total de pedidos que
ha realizado cada uno de clientes durante el año 2017.
13. Devuelve un listado que muestre el identificador de cliente, nombre, primer apellido y el valor de la
máxima cantidad del pedido realizado por cada uno de los clientes. El resultado debe mostrar aquellos
Mg. Oliver Santana Carbajal

clientes que no han realizado ningún pedido indicando que la máxima cantidad de sus pedidos
realizados es 0. Puede hacer uso de la función IFNULL.
14. Devuelve cuál ha sido el pedido de máximo valor que se ha realizado cada año.
15. Devuelve el número total de pedidos que se han realizado cada año.

Subconsultas
Con operadores básicos de comparación
1. Devuelve un listado con todos los pedidos que ha realizado Adela Salas Díaz. (Sin utilizar INNER JOIN).
Select * from pedido where id_cliente = (select id from cliente where nombre = 'Adela' and apellido1 =
'Salas' and apellido2 = 'Diaz');

2. Devuelve el número de pedidos en los que ha participado el comercial Daniel Sáez Vega. (Sin
utilizar INNER JOIN)
Select count(*) from pedido where id_comercial = (Select id from comercial where nombre = 'Daniel'
and apellido1 = 'Sáez' and apellido2 = 'Vega');

3. Devuelve los datos del cliente que realizó el pedido más caro en el año 2019. (Sin utilizar INNER JOIN)
Select * from cliente where id = (select id_cliente from pedido where total = (select MAX(total) from
pedido where year(fecha) = 2019));

4. Devuelve la fecha y la cantidad del pedido de menor valor realizado por el cliente Pepe Ruiz Santana.
Select fecha, total from cliente inner join pedido on cliente.id = pedido.id_cliente where cliente.nombre
= 'Pepe' and apellido1 = 'Ruiz' and apellido2 = 'Santana' and pedido.total = (select MIN(total) from
cliente inner join pedido on cliente.id = pedido.id_cliente where cliente.nombre = 'Pepe' and apellido1
= 'Ruiz' and apellido2 = 'Santana');

5. Devuelve un listado con los datos de los clientes y los pedidos, de todos los clientes que han realizado
un pedido durante el año 2017 con un valor mayor o igual al valor medio de los pedidos realizados
durante ese mismo año.
Select * from cliente inner join pedido on cliente.id = pedido.id_cliente where year(pedido.fecha) =
2017 and pedido.total >= (select avg(total) from pedido where year(fecha)=2017);
Mg. Oliver Santana Carbajal

Subconsultas con  ALL  y  ANY


6. Devuelve el pedido más caro que existe en la tabla pedido si hacer uso de MAX, ORDER BY ni LIMIT.
Select * from pedido where total >= all(select total from pedido);

7. Devuelve un listado de los clientes que no han realizado ningún pedido. (Utilizando ANY o ALL).
Select * from cliente where id!= all(select id_cliente from pedido);

8. Devuelve un listado de los comerciales que no han realizado ningún pedido. (Utilizando ANY o ALL).
Select * from comercial where id!= all(select id_comercial from pedido);

Subconsultas con  IN  y  NOT IN


9. Devuelve un listado de los clientes que no han realizado ningún pedido. (Utilizando IN o NOT IN).
Select * from cliente where id not in (select id_cliente from pedido);

10. Devuelve un listado de los comerciales que no han realizado ningún pedido. (Utilizando IN o NOT IN).
Select * from comercial where id not in (select id_comercial from pedido);

Subconsultas con  EXISTS  y  NOT EXISTS


11. Devuelve un listado de los clientes que no han realizado ningún pedido. (Utilizando EXISTS o NOT EXISTS).
Select * from cliente where not exists (select id_cliente from pedido where cliente.id =
pedido.id_cliente);

12. Devuelve un listado de los comerciales que no han realizado ningún pedido. (Utilizando EXISTS o NOT
EXISTS).
Select * from comercial where not exists (select id_comercial from pedido where comercial.id =
pedido.id_comercial);

También podría gustarte