lunes, 16 de octubre de 2017

mysql

                                                                         “ LA TIENDA DE INFORMATICA”

INSTRUCCIONES: En el siguiente ejercicio se describen cada uno de  los comandos para llevar a cabo cada una de las consultas solicitadas, ejecuta cada uno de ellos en el compilador de MySQL.

ACTIVIDADES A REALIZAR

1.       Crea una base de datos llamada TIENDA
CREATE DATABASE TIENDA;

 




2.       Muestra las Bases de datos almacenadas




SHOW DATABASES;

 





3.       Habilita la Base de datos TIENDA
USE TIENDA;

CREATE TABLE FABRICANTES (Clave_fabricante INT NOT NULL, Nombre VARCHAR(30), PRIMARY KEY (Clave_fabricante));

 




4.       Genera las siguientes tablas:

FABRICANTES

NOMBRE DE COLUMNA
TIPO DE DATO
Clave Principal
Clave_fabricante
Int

Nombre
Varchar(30)





CREATE TABLE ARTICULOS (Clave_articulo INT NOT NULL, Nombre VARCHAR(30), Precio INT, Clave_fabricante INT, PRIMARY KEY (Clave_articulo), FOREING KEY(Clave_fabricante) REFERENCES FABRICANTES (Clave_fabricante));

 


ARTICULOS



NOMBRE DE COLUMNA
TIPO DE DATO
Clave Principal
Clave_articulo
Int

Nombre
Varchar(30)

Precio
Int
Clave Foránea
Clave_fabricante
Int







5.       Muestra las tablas de la Base de datos TIENDA
SHOW TABLES;

 




6.       Muestra los atributos de la tabla ARTICULOS;
DESCRIBE ARTICULOS;

 




7.       Introduce los siguientes datos en cada tabla:

TABLA: FABRICANTES
CLAVE_FABRICANTE
NOMBRE
1
Kingston
2
Adata
3
Logitech
4
Lexar
5
Seagate
INSERT INTO FABRICANTES VALUES ( 2 , ‘Adata’);
INSERT INTO FABRICANTES VALUES ( 3 , ‘Longitech’);
INSERT INTO FABRICANTES VALUES ( 4 , ‘Lexar’);










TABLA: ARTICULOS
CLAVE_ARTICULO
NOMBRE
PRECIO
CLAVE_FABRICANTE
1
Teclado
$ 100
3
2
Disco duro 300 Gb
$ 500
5
3
Mouse
$ 80
3
4
Memoria USB
$ 140
4
5
Memoria RAM
$ 290
1
6
Disco duro extraíble 250 Gb
$ 650
5
7
Memoria USB
$ 279
1
8
DVD Rom
$ 450
2
9
CD Rom
$ 200
2
10
Tarjeta de red
$ 180
3












INSERT INTO ARTICULOS VALUES (  1 , ‘Teclado’, 100 , 3 );

 





8.       Genera las siguientes consultas:

a)       Obtener todos los datos de los productos de la tienda
SELECT * FROM FABRICANTES;

 





b)       Obtener los nombres de los productos de la tienda
SELECT Nombre FROM ARTICULOS;

 





c)       Obtener los nombres y precio de los productos de la tienda
SELECT Nombre,Precio  FROM ARTICULOS;

 





d)       Obtener los nombres de los artículos sin repeticiones
SELECT DISTINCT  Nombre  FROM ARTICULOS;

 





e)       Obtener todos los datos del  artículo cuya clave de producto es ‘5’
SELECT  *  FROM ARTICULOS WHERE Clave_articulo=5;

 





f)         Obtener todos los datos del  artículo cuyo nombre del producto es ‘’Teclado”
SELECT  *  FROM ARTICULOS WHERE Nombre=’Teclado’;

 





g)       Obtener todos los datos de la Memoria RAM y memorias USB
SELECT  *  FROM ARTICULOS WHERE Nombre=’Memoria RAM’ OR Nombre=’Memoria USB’ ;

 






h)       Obtener todos los datos de los artículos que empiezan con ‘M’
SELECT  *  FROM ARTICULOS WHERE Nombre LIKE ‘M%’;
 





i)         Obtener el nombre de los productos donde el precio sea  $ 100
SELECT  Nombre  FROM ARTICULOS WHERE Precio = 100;
 





j)         Obtener el nombre de los productos donde el precio sea mayor a $ 200
SELECT  Nombre  FROM ARTICULOS WHERE Precio > 200;
 





k)       Obtener todos los datos de los artículos cuyo precio este entre $100 y $350   
/* OPERADOR AND */

SELECT  *  FROM ARTICULOS WHERE Precio >= 100 AND Precio<=350;

/* OPERADOR BETWEEN */

SELECT  *  FROM ARTICULOS WHERE Precio BETWEEN 100 AND 350;

 











l)         Obtener el precio medio de todos los productos
SELECT  AVG(Precio)  FROM ARTICULOS;
 





m)     Obtener el precio medio de los artículos cuyo código de fabricante sea 2
SELECT  AVG(Precio)  FROM ARTICULOS WHERE Clave_fabricante=3;
 





n)       Obtener el nombre y precio de los artículos ordenados por Nombre
SELECT  Nombre, Precio  FROM ARTICULOS ORDER BY Nombre;
 





o)       Obtener todos los datos de los productos ordenados descendentemente por Precio
SELECT  *  FROM ARTICULOS ORDER BY Precio DESC;
 





p)       Obtener el nombre y precio de los artículos cuyo precio sea mayor a $ 250 y ordenarlos descendentemente por precio y luego ascendentemente por nombre
SELECT  Nombre, Precio  FROM ARTICULOS
WHERE Precio >= 250 ORDER BY Precio DESC, Nombre;
 









q)       Obtener un listado completo de los productos, incluyendo por cada articulo los datos del articulo y del fabricante
SELECT  *  FROM ARTICULOS, FABRICANTES
WHERE ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
 






r)        Obtener la clave de producto, nombre del producto y nombre del fabricante de todos los productos en venta
SELECT  ARTICULOS.Clave_articulo, ARTICULOS.Nombre, FABRICANTES.Nombre
FROM ARTICULOS, FABRICANTES
WHERE ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante

 








s)       Obtener el nombre y precio de los artículos donde el fabricante sea Logitech ordenarlos alfabéticamente por nombre del producto
SELECT  ARTICULOS.Nombre, ARTICULOS.Precio FROM ARTICULOS, FABRICANTES
WHERE FABRICANTES.Nombre=’Logitech’ AND
 ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
ORDER BY ARTICULOS.Nombre;

 









t)         Obtener el nombre, precio y nombre de fabricante de los productos que son marca Lexar o Kingston ordenados descendentemente por precio
SELECT  ARTICULOS.Nombre, ARTICULOS.Precio, FABRICANTES.Nombre
FROM ARTICULOS, FABRICANTES
WHERE FABRICANTES.Nombre=’Lexar’ OR  FABRICANTES.Nombre=’Kingston’
AND  ARTICULOS.Clave_fabricante=FABRICANTES.Clave_fabricante
ORDER BY ARTICULOS.Precio DESC;

 










u)       Añade un nuevo producto: Clave del producto 11, Altavoces de $ 120  del fabricante 2
INSERT INTO ARTICULOS VALUES (11 ,’Altavoces’, 120, 2);

 






v)       Cambia el nombre del producto 6 a ‘Impresora Laser’
UPDATE ARTICULOS SET Nombre=’Impresora Laser’
WHERE Clave_articulo = 8

 







w)      Aplicar un descuento del 10% a todos los productos.
UPDATE ARTICULOS SET Precio=Precio *0.10

 







x)       Aplicar un descuento de $ 10 a todos los productos cuyo precio sea mayor o igual a $ 300
UPDATE ARTICULOS SET Precio=Precio – 10 WHERE   Precio >= 300

 






y)       Borra el producto numero 6
DELETE FROM ARTICULOS WHERE Clave_articulo= 6

 








Intro a SQL y MySQL - Ejercicio 1 - Ejercicio resuelto con 1 tabla
Vamos a aplicar buena parte de lo que conocemos para hacer un ejercicio de repaso que haga distintas manipulaciones a una única tabla. Será 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 (por si alguien se atreve a intentarlo antes de ver la solución) serán:
  • Crear la base de datos
  • Comenzar a usarla
  • Introducir 3 datos de ejemplo
  • Mostrar todos los datos
  • Mostrar los datos que tienen un cierto nombre
  • Mostrar los datos que comienzan por una cierta inicial
  • Ver sólo el nombre y el precio de los que cumplen una condición (precio > 22)
  • Ver el precio medio de aquellos cuyo nombre comienza con "Silla"
  • Modificar la estructura de la tabla para añadir un nuevo campo: "categoría"
  • Dar el valor "utensilio" a la categoría de todos los productos existentes
  • Modificar los productos que comienza por la palabra "Silla", para que su categoría sea "silla"
  • Ver la lista categorías (sin que aparezcan datos duplicados)
  • Ver la cantidad de productos que tenemos en cada categoría



Damos por sentado que MySQL está instalado. El primer paso es crear la base de datos:
CREATE DATABASE productos1;
Y comenzar a usarla:
USE productos1;
Para crear la tabla haríamos:
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');
Podemos ver todos los datos para 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 cuales 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 |
+----------------+--------+
Precio medio 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... quizá no sea la mejor opción. Parece más razonable añadir un nuevo dato: la "categoría". 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 mismo, todas las categorías tienen el valor NULL, y eso no es muy útil. Vamos a dar el valor "utensilio" a la categoría de todos los productos existentes
UPDATE productos SET categoria='utensilio';
Y ya que estamos, 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 |
+-----------+----------+

NOTA : EJERCICIOS

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
| tienda             |
+--------------------+
4 rows in set (0.20 sec)

mysql> USE TIENDA;
Database changed
mysql> SHOW TABLES;
+------------------+
| Tables_in_tienda |
+------------------+
| fabricantes      |
+------------------+
1 row in set (0.06 sec)

mysql> CREATE TABLE ARTICULOS (Clave_art
Precio INT, Clave_fabricante INT, PRIMAR
Query OK, 0 rows affected (0.28 sec)

mysql> INSERT INTO FABRICANTES VALUES (
Query OK, 1 row affected (0.39 sec)

mysql> INSERT INTO FABRICANTES VALUES (
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO FABRICANTES VALUES (
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO FABRICANTES VALUES (
Query OK, 1 row affected (0.05 sec)

mysql>
mysql> SELECT * FROM ARTICULOS;






Empty set (0.00 sec)

mysql> SELECT * FROM FABRICANTES;
+------------------+-----------+
| Clave_fabricante | Nombre    |
+------------------+-----------+
|                1 | Kingston  |
|                2 | Adata     |
|                3 | Longitech |
|                4 | Lexar     |
+------------------+-----------+
4 rows in set (0.00 sec)

mysql>








No hay comentarios:

Publicar un comentario