martes, 19 de agosto de 2008

Bases de Datos Tercera Parte (ejercicios)

Continuando con el tutorial de bases de datos (ver parte 1, ver parte 2) en esta tercera parte me enfocare solo a la creación de ejercicios con sus respectivos resultados para que puedan servir de ejemplo.

11.- Obtener un listado de artículos, incluyendo por cada articulo los datos de su nombre, precio y el nombre de su fabricante.
Sentencia SQL:
SELECT art.NOMBRE, art.PRECIO, fab.NOMBRE Nombre_Fabricante from ARTICULOS art, fabricantes fab where art.CODFRABICANTE = fab.CODIGO;

Resultado de la consulta


12.- Obtener el precio medio de los productos de cada fabricante, mostrando el Código del fabricante.
Sentencia SQL:
select CODFRABICANTE, AVG(PRECIO) as promedio from ARTICULOS GROUP by CODFRABICANTE;
NOTA: En esta sentencia se ha incluido un nuevo concepto GROUP by que sirve para agrupar la información, es esta caso se agrupo por fabricantes los cuales son diferenciados por si ID o codigo de fabricante.

Resultado de la consulta


13.- Obtener el precio medio de los productos de cada fabricante, mostrando el nombre del fabricante.
Sentencia SQL:
select FABRICANTES.NOMBRE, AVG(PRECIO) as promedio from ARTICULOS , FABRICANTES WHERE ARTICULOS.CODFRABICANTE = FABRICANTES.CODIGO GROUP by FABRICANTES.NOMBRE;
Resultado de la consulta


14.- Obtener el nombre de los fabricantes que ofrezcan productos cuyo precio medio sea igual a $5445.

Nota: He seleccionado la cantidad de $5445 porque la consulta anterior me devolvió los valores promedio y en consultas anteriores se que insumos nacionales posee mas de un articulo. De lo contrario no se reflejaría la sentencia si un fabricante posee un solo articulo puesto que su promedio seria el mismo valor del articulo
Sentencia SQL:

select fab.NOMBRE as EMPRESA from fabricantes fab inner JOIN articulos art on fab.CODIGO = art.CODFRABICANTE GROUP BY EMPRESA HAVING AVG(precio) = 5445;


Descripción ampliada: (Aqui he incluido nuevos comandos)

* A la tabla Fabricantes le he asignado un alias fab (para no escribir fabrica.nombre)
* A la tabla Articulos le he asignado un alias art (para no escribir articulos.codfrabicante)
* Al campo Fabrica.NOMBRE ó fab.NOMBRE le asige un alias EMPRESA.
* INNER JOIN devuelve todas las filas de ambas tablas, donde hay un Claves en común.
(En las consultas anteriores he escrito todos los componetes de ambas tablas ejemplo:
Select articulos.nombre , articulos.codfrabicante, articulos.precio, fabricantes.codigo, fabricantes.nombre from articulos, fabricantes where ........
* GROUP BAY agrupa los resultado por un nombre de campo.
* HAVING similar al where pero es tratado como función.
* AVG devuelve el promedio.
Resultado de la consulta



14.- Obtener el nombre y precio del producto mas barato.
Sentencia SQL:
select nombre, precio from articulos order by precio limit 1;
Resultado de la consulta


Nota: Podríamos haber hecho subconsultas en el where y enredarnos bastante pero aquí lo mejor es utilizar LIMIT por defecto el ordenamiento es ascendente es por ello que nos entrega el precio mas bajo... si ordenamos descendente "order by nombre desc" nos entregara el producto mas caro.

16.- Obtener una lista con los nombres y precio de los artículos mas caro de cada proveedor (Incluyendo el nombre del proveedor)
Sentencia SQL:
select a.nombre, a.precio, f.NOMBRE as Fabricante from articulos a inner join fabricantes f on a.codfrabicante = codigo group by f.nombre order by precio desc;
Resultado de la consulta


Nota: Aquí nuevamente utilice el limit en orden descendente y además agrupe por fabricantes para mostrar sus productos mas caros.. el inner join me ayuda a traer los registros de la tabla relacionada (fabricantes) el as Fabricantes es solo para darle nombre a la columna.

17.- Añadir un nuevo producto del fabricante 2 lampara USB $7990.
Sentencia SQL:
insert into articulos (codigoart, nombre, precio, codfrabicante)
values (114, 'Lampara USB', 7990, 2);

Resultado de la consulta
Para ver el resultado ahora aremos un select del fabricante 2 con sus productos

select f.codigo, f.nombre, a.nombre, a.precio from fabricantes f inner join articulos a on f.codigo = codfrabicante where f.codigo = 2;

(Este select es muy completo pero solo de referencia para mostrar el registro insertado)

18.- Cambiar el nombre del articulo 108 a Impresora Láser.
select * from articulos where codigoart = 108;

Sentencia SQL:
UPDATE articulos set nombre = 'Impresora Laser' where codigoart = 8;
Resultado de la consulta


19.- Aplicar un descuento de un 10% a todos los productos.
Sentencia SQL:
update articulos set precio = precio * 0.9;

Nota: No necesita explicación todos los productos fueron rebajados en un 10%.

20.- Aplicar un descuento de un $1777 cuyo precio sea mayor o igual $20000.
Sentencia SQL:
update articulos set precio = precio - 1777 where precio >= 20000;

Eso es todo
... Pronto segundo set de 20 ejercicios mas.


2 comentarios:

Lua dijo...

Muy buena información! Que buen blog!!

Lua dijo...
Este comentario ha sido eliminado por el autor.