sábado, 27 de julio de 2013

Ejercicio para Base de datos 1(Despresurizado)

Ejercicio 1
Crearemos una tabla que contenga datos de productos: código, nombre, precio y fecha de alta, para que podamos trabajar con datos de texto, numéricos y de tipo fecha.

Los pasos que realizaremos son los siguientes:

  1. Crear la base de datos
  2. Comenzar a usarla
  3. Introducir 3 datos de ejemplo
  4. Mostrar todos los datos
  5. Mostrar los datos que tienen un cierto nombre
  6. Mostrar los datos que comienzan por una cierta inicial
  7. Ver sólo el nombre y el precio de los que cumplen una condición (precio > 22)
  8. Ver el precio medio de aquellos productos cuyo nombre comienza con "Silla"
  9. Modificar la estructura de la tabla para añadir un nuevo campo: "categoría"
  10. Dar el valor "utensilio" a la categoría de todos los productos existentes
  11. Modificar los productos que comienza por la palabra "Silla", para que su categoría sea "silla"
  12. Ver la lista categorías (sin que aparezcan datos duplicados)
  13. Ver la cantidad de productos que tenemos en cada categoría


Suponiendo que MySQL está instalado. El primer paso es crear la base de datos:

CREATE DATABASE abarrotes;

Y comenzar a usarla:
USE abarrotes;

Para crear la tabla productos:
create table productos (
  codigo varchar(3),
  nombre varchar(30),
  precio decimal(6,2),
  fechaalta date,
  primary key (codigo)
);

Para introducir varios datos de ejemplo:
INSERT INTO productos VALUES ('a01','Afilador', 2.50, '2007-11-02');
INSERT INTO productos VALUES ('s01','Silla mod. ZAZ', 20, '2007-11-03');
INSERT INTO productos VALUES ('s02','Silla mod. XAX', 25, '2007-11-03');

Para visualizar todos los datos y comprobar que son correctos:
SELECT * FROM productos;

y deberíamos obtener

+--------+----------------+--------+------------+
| codigo | nombre      | precio | fechaalta  |
+--------+----------------+--------+------------+
| a01    | Afilador        |   2.50 | 2007-11-02 |
| s01    | Silla mod. ZAZ |  20.00 | 2007-11-03 |
| s02    | Silla mod. XAX |  25.00 | 2007-11-03 |
+--------+----------------+--------+------------+

Para ver qué productos se llaman "Afilador":

SELECT * FROM productos WHERE nombre='Afilador';

+--------+----------+--------+------------+
| codigo | nombre   | precio | fechaalta  |
+--------+----------+--------+------------+
| a01    | Afilador |   2.50 | 2007-11-02 |
+--------+----------+--------+------------+



Si queremos saber cuáles comienzan por S:
SELECT * FROM productos WHERE nombre LIKE 'S%';

+--------+----------------+--------+------------+
| codigo | nombre      | precio | fechaalta  |
+--------+----------------+--------+------------+
| s01    | Silla mod. ZAZ |  20.00 | 2007-11-03 |
| s02    | Silla mod. XAX |  25.00 | 2007-11-03 |
+--------+----------------+--------+------------+

Si queremos ver cuales tienen un precio superior a 22, y además no deseamos ver todos los campos, sino sólo el nombre y el precio:
SELECT nombre, precio FROM productos WHERE precio > 22;

+--------------------+--------+
| nombre             | precio |
+--------------------+--------+
| Silla mod. XAX |  25.00 |
+----------------+--------+

Promedio de los precios de las sillas:
SELECT avg(precio) FROM productos WHERE LEFT(nombre,5) = 'Silla';

+-------------+
| avg(precio) |
+-------------+
|   22.500000 |
+-------------+

Esto de mirar las primeras letras para saber si es una silla o no... tal vez no sea la mejor opción. Parece más razonable añadir un nuevo campo: la "categoría". Para eso vamos a modificar la estructura de la tabla, para hacerlo:
ALTER TABLE productos ADD categoria varchar(10);

Comprobamos qué ha ocurrido con un "SELECT" que muestre todos los datos:
SELECT * FROM productos;

+--------+----------------+--------+------------+-----------+
| codigo | nombre         | precio | fechaalta  | categoria |
+--------+------------ ----+--------+------------+-----------+
| a01    | Afilador         |   2.50 | 2007-11-02 | NULL      |
| s01    | Silla mod. ZAZ |  20.00 | 2007-11-03 | NULL      |
| s02    | Silla mod. XAX |  25.00 | 2007-11-03 | NULL      |
+--------+----------------+--------+------------+-----------+

Ahora, todas las categorías tienen el valor NULL, vamos a dar el valor "utensilio" a la categoría de todos los productos existentes
UPDATE productos SET categoria='utensilio';

Modificaremos los productos que comienza por la palabra "Silla", para que su categoría sea "silla"
UPDATE productos SET categoria="silla" WHERE LEFT(nombre,5) = 'Silla';

+--------+----------------+--------+------------+-----------+
| codigo | nombre         | precio | fechaalta  | categoria |
+--------+----------------+--------+------------+-----------+
| a01    | Afilador       |   2.50 | 2007-11-02 | utensilio |
| s01    | Silla mod. ZAZ |  20.00 | 2007-11-03 | silla     |
| s02    | Silla mod. XAX |  25.00 | 2007-11-03 | silla     |
+--------+----------------+--------+------------+-----------+




Para ver la lista categorías (sin que aparezcan datos duplicados), deberemos usar la palabra "distinct"
SELECT DISTINCT categoria FROM productos;

+-----------+
| categoria |
+-----------+
| utensilio |
| silla     |
+-----------+

Finalmente, para ver la cantidad de productos que tenemos en cada categoría, deberemos usar "count" y agrupar los datos con "group by", así:
SELECT categoria, count(*) FROM productos group by categoria;

+-----------+----------+
| categoria | count(*) |
+-----------+----------+
| silla     |        2 |
| utensilio |        1 |

+-----------+----------+

No hay comentarios: