
Actividad 5 - Subconsultas
Actividad 5 - Subconsultas
Las subconsultas son consultas dentro de otra consulta más externa o dispuestas de forma anidada, y puedes colocarlas en cualquier parte de un SELECT. Es por esto que tal vez las has visto en la lista de campos de la cláusula SELECT, en la cláusula FROM o dentro de WHERE. Las subconsultas pueden devolver tres tipos de resultados: un valor escalar, una columna o lista de valores y una tabla.
Una subconsulta es una instrucción
SELECT anidada dentro de una instrucción SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra
subconsulta.
Curso SQL. Subconsultas I. Vídeo 10. (2015, 4 octubre). [Vídeo]. YouTube. https://www.youtube.com/watch?v=rGPb5E1UAJA&ab_channel=pildorasinformaticas
Curso SQL. Subconsultas II. Vídeo 11. (2015, 22 octubre). [Vídeo]. YouTube. https://www.youtube.com/watch?v=lCpMJ2LFdLg&ab_channel=pildorasinformaticas
Base de datos para trabajar las subconsultas
Descargar el siguiente archivo y continuar con el manejo de las subconsultas.
https://www.dropbox.com/s/ax8ukkhg4gx6xq1/Explicacion%20de%20subconsultas.txt?dl=0
Ejercicio Subconsultas:
Ejercicio Subconsultas:
1. - calcular valorventa aumentando un 17% del valorunitario.
-tablas a consultar: producto
-comando: update
-sintaxis: update producto set valorventa=(select valorunitario+(valorunitario*0.17) where producto.codigo);
2. Llevar el valorventa a valor de detallefactura segun articulo comprado.
-tablas a consultar: producto y detallefactura
-comando: update
-condición: producto.codigo = detallefactura.codigo
-sintaxis: Update detallefactura set valor = (Select valorventa From producto where producto.codigo = detallefactura.codigo);
3. Calcular el total en la tabla detallefactura (cantidad x valor)
-tablas a consultar: detalle factura
-comando: update
sintaxis: Update detallefactura set total = cantidad * valor;
4. Calcular cuanto es el subtotal de cada factura y guardarlo en el campo respectivo
-tablas a consultar: factura y detallefactura
-comando: update
-condición: detallefactura.nrofactura = factura.nrofactura
-agrupar datos: nro factura
-sintaxis: Update factura set subtotal = (Select sum(detallefactura.total) From detallefactura where detallefactura.nrofactura = factura.nrofactura group by detallefactura.nrofactura);
5. Calcular el iva (16% del subtotal), la retencion(3.5% del subtotal) y el total(subtotal + iva - retencion)
-tablas a consultar: factura
-comando: update
-sintaxis: Update factura set iva = subtotal * 0.16, retencion = subtotal * 0.035, total = subtotal * (1 + 0.16 - 0.035);
6. Calcular cuales son las existencias de cada articulo
-tablas a consultar: producto y detallefactura
-Datos a consultar: existencias de la tabla producto
-Nota: para lograr calcular las existencias de cada articulo, se obtiene de la siguiente manera:
Existencias de la tabla producto menos suma(cantidad) de cada producto de la tabla detallefactura.
-condición: detallefactura.codigo = producto.codigo
-comando: update
-sintaxis: update producto set existencia = cantidad - (select sum(cantidad) from detallefactura where detallefactura.codigo = producto.codigo group by detallefactura.codigo);
7. total de facturas de cada cliente
-tablas a consultar: factura y cliente
-Nota: mostrar Cedula, nombre, sum(total)
-condición: cliente.cedula = factura.cedula
-agrupar datos: cedula y nombre
sintaxis: select c.cedula, c.nombre, sum(f.total) 'Total' from cliente c inner join factura f on f.Cedula = c.Cedula group by c.cedula, c.nombre order by c.nombre;
8. Listar el total de ventas de cada producto
-tablas a consultar: detallefactura y producto
-nota: mostrar codigo, articulo, sum(total)
-condición: detallefactura.codigo = producto.codigo
-agrupar datos: codigo y articulo
-sintaxis: select producto.codigo, producto.articulo, sum(detallefactura.total) 'Total' from producto inner join detallefactura on detallefactura.codigo = producto.codigo group by producto.codigo, producto.articulo order by producto.articulo;
9. Listar las facturas y el valor de cada una segun las compra de alexandra lopez
-tablas a consultar: factura y cliente
-nota: mostrar nrofactura, sum(total)
-condición: cliente.cedula = factura.cedula y seleccionar el cliente con cedula = 100
-agrupar datos: nrofactura
-sintaxis: select factura.nrofactura, sum(factura.total) 'Total' from cliente inner join factura on factura.Cedula = cliente.Cedula where cliente.cedula = 100 group by factura.nrofactura order by factura.nrofactura;
10. Crear una tabla detallado dentro de la base de datos subconsultas con los campos:
-id auto incremento
-cedula
-nrofactura
-totalarticulos
-valortotal
sintaxis: Create table detallado(Id int(4) unsigned zerofill not null auto_increment primary key, cedula int(10) not null, nrofactura int(4) not null, totalarticulos int(4) not null, valortotal float not null)
11. Crear una subconsulta para ingresar estos datos a la tabla nueva.
-cedula del cliente
-numero de facturas del cliente
-suma de los articulos de cada factura
-total pagado de cada factura
sintaxis: insert into detallado(cedula, nrofactura, totalarticulos, valortotal)
select c.cedula, f.nrofactura, sum(df.cantidad), sum(f.total) from cliente c inner join factura f on f.Cedula = c.Cedula inner join detallefactura df on df.nrofactura = f.nrofactura group by c.cedula, f.nrofactura;
12. Eliminar las facturas de los clientes que hayan iniciado vinculo con la empresa antes de 2004.
-tablas a consultar: factura, detallefactura y cliente
-nota: Borrar facturas de las tablas factura y detallefactura, para clientes con fecha de inicio < 2004-01-01
-condición: cliente.cedula = factura.cedula y detallefactura.nrofactura = factura.nrofactura
-comando: Delete
-sintaxis: delete from detallefactura where nrofactura = (select factura.nrofactura from cliente inner join factura on factura.Cedula = cliente.Cedula where cliente.fechainicio < '2004-01-01' and detallefactura.nrofactura = factura.nrofactura);
delete from factura where cedula = (select cliente.cedula from cliente where cliente.Cedula = factura.Cedula and cliente.fechainicio < '2004-01-01');
13. Listar los clientes que no tienen facturas
-tablas a consultar: factura y cliente
-nota: mostrar cedula, nombre
-condición: cliente.cedula = factura.cedula
-sintaxis: select cliente.cedula, cliente.nombre from cliente left join factura on factura.Cedula = cliente.Cedula where factura.cedula is null order by cliente.nombre;
select cliente.nombre 'Nombre de los clientes que no poseen facturas',cliente.cedula,factura.nrofactura from cliente left join factura on cliente.cedula = factura.cedula where factura.nrofactura is null;