manual mysql 2

6
7/17/2019 Manual Mysql 2 http://slidepdf.com/reader/full/manual-mysql-2 1/6 01. Un almacén de distribución de artículos desea mantener información sobre las ventas hechas por las tiendas que compran al almacén. Dispone de las siguientes tablas para mantener esta información: ARTICULOS: almacena cada uno de los artículos que el almacén puede abastecer a las tiendas. Cada artículo viene determinado por las columnas:  ARTICULO (PK entero corto),  COD_FABRICANTE (PK FK entero corto),  PESO (entero corto) y  CATEGORIA (ENUM). La categoría puedeser 'PRIMERA', 'SEGUNDA' o 'TERCERA'. CREATE TABLE `ARTICULOS` ( `ARTICULO` TINYINT(2)  NOT NULL, `COD_FAB` TINYINT(2)  NOT NULL , `PESO` TINYINT(2)  NULL DEFAULT NULL, `CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA')  NULL DEFAULT NULL, PRIMARY KEY (`ARTICULO``COD_FAB`), INDEX `FK_ARTICULOS_FABRICANTE` (`COD_FAB`), CONSTRAINT `FK_ARTICULOS_FABRICANTE`  FOREIGN KEY (`COD_FAB`) REFERENCES `FABRICANTE` (`COD_FAB`) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; FABRICANTES: contiene los países de origen de los fabricantes de artículos. Cada COD_FABRICANTE (PK entero corto) tiene su  MARCA (UNICO de 20 caracteres) y su NOMBRE_PAIS (UNICO de 20 caracteres). Código CREATE TABLE `FABRICANTE` ( `COD_FAB` TINYINT(2)  NOT NULL, `MARCA`  VARCHAR (20)  NULL DEFAULT NULL, `NOMBRE_PAIS`  VARCHAR (20)  NULL DEFAULT NULL, PRIMARY KEY (`COD_FAB`), UNIQUE INDEX `MARCA` (`MARCA`), UNIQUE INDEX `NOMBRE_PAIS` (`NOMBRE_PAIS` ) ) COLLATE='utf8_general_ci' ENGINE=InnoDB; TIENDAS: almacena los datos de las tiendas que venden artículos. Cada tienda se identifica por su  NIF (PK entero largo) y almacena además su PROVINCIA (20 caracteres). CREATE TABLE `TIENDAS` ( `NIF`  VARCHAR (10)  NOT NULL, `PROVINCIA`  VARCHAR (20)  NULL DEFAULT NULL, PRIMARY KEY (`NIF`) ) COLLATE ='utf8_general_ci' ENGINE=InnoDB; PEDIDOS: son los pedidos que realizan las tiendas al almacén. Cada pedido almacenará:  NIF (PK FK entero largo),  ARTICULO (PK FK entero corto), COD_FABRICANTE (PK FK entero corto),  PESO (entero corto),  CATEGORIA (ENUM 'PRIMERA','SEGUNDA','TERCERA') y  FECHA_PEDIDO (TIMESTAMP con valor por defecto FECHA ACTUAL). Cada fila de la tabla representa un pedido. CREATE TABLE `PEDIDOS` ( `NIF`  VARCHAR (10)  NOT NULL, `ARTICULO` TINYINT(2)  NOT NULL, `COD_FAB` TYNYINT(2)  NOT NULL, `PESO`  SMALLINT (10)  NULL DEFAULT NULL , `CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA')  NULL DEFAULT NULL, `FECHA_PEDIDO`  TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`NIF``ARTICULO``COD_FAB`), INDEX `FK_PEDIDOS_ARTICULOS` (`ARTICULO`),

Upload: anonymous-t9wzc18c

Post on 07-Jan-2016

221 views

Category:

Documents


0 download

DESCRIPTION

.

TRANSCRIPT

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 1/6

01. Un almacén de distribución de artículos desea mantener información sobre las ventas hechas por las

tiendas que compran al almacén. Dispone de las siguientes tablas para mantener esta información:

ARTICULOS: almacena cada uno de los artículos que el almacén puede abastecer a las tiendas. Cada

artículo viene determinado por las columnas:  ARTICULO (PK entero corto),  COD_FABRICANTE(PK FK entero corto),   PESO (entero corto) y   CATEGORIA (ENUM). La categoría puede ser

'PRIMERA', 'SEGUNDA' o 'TERCERA'.CREATE TABLE `ARTICULOS` (`ARTICULO` TINYINT(2)   NOT NULL,

`COD_FAB` TINYINT(2)   NOT NULL,`PESO` TINYINT(2)   NULL DEFAULT NULL,`CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA')   NULL DEFAULT NULL,PRIMARY KEY (`ARTICULO`, `COD_FAB`),INDEX `FK_ARTICULOS_FABRICANTE` (`COD_FAB`),CONSTRAINT `FK_ARTICULOS_FABRICANTE`   FOREIGN KEY (`COD_FAB`)

REFERENCES `FABRICANTE` (`COD_FAB`)

)COLLATE='utf8_general_ci'

ENGINE=InnoDB;

FABRICANTES: contiene los países de origen de los fabricantes de artículos. CadaCOD_FABRICANTE (PK entero corto) tiene su   MARCA (UNICO de 20 caracteres) y su

NOMBRE_PAIS (UNICO de 20 caracteres).

CódigoCREATE TABLE `FABRICANTE` (`COD_FAB` TINYINT(2)   NOT NULL,`MARCA`   VARCHAR (20)   NULL DEFAULT NULL,`NOMBRE_PAIS`   VARCHAR (20)   NULL DEFAULT NULL,PRIMARY KEY (`COD_FAB`),UNIQUE INDEX `MARCA` (`MARCA`),UNIQUE INDEX `NOMBRE_PAIS` (`NOMBRE_PAIS`)

)COLLATE='utf8_general_ci'

ENGINE=InnoDB;

TIENDAS: almacena los datos de las tiendas que venden artículos. Cada tienda se identifica por su  NIF

(PK entero largo) y almacena además su PROVINCIA (20 caracteres).CREATE TABLE `TIENDAS` (`NIF`   VARCHAR (10)   NOT NULL,`PROVINCIA`   VARCHAR (20)   NULL DEFAULT NULL,PRIMARY KEY (`NIF`)

)

COLLATE='utf8_general_ci'ENGINE=InnoDB;

PEDIDOS: son los pedidos que realizan las tiendas al almacén. Cada pedido almacenará:  NIF (PK FK

entero largo),  ARTICULO (PK FK entero corto), COD_FABRICANTE (PK FK entero corto),  PESO

(entero corto),  CATEGORIA (ENUM 'PRIMERA','SEGUNDA','TERCERA') y  FECHA_PEDIDO

(TIMESTAMP con valor por defecto FECHA ACTUAL). Cada fila de la tabla representa un pedido.CREATE TABLE `PEDIDOS` (`NIF`   VARCHAR (10)   NOT NULL,`ARTICULO` TINYINT(2)   NOT NULL,`COD_FAB` TYNYINT(2)   NOT NULL,

`PESO`   SMALLINT(10)   NULL DEFAULT NULL,`CATEGORIA` ENUM('PRIMERA','SEGUNDA','TERCERA')   NULL DEFAULT NULL,`FECHA_PEDIDO`   TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (`NIF`, `ARTICULO`, `COD_FAB`),INDEX `FK_PEDIDOS_ARTICULOS` (`ARTICULO`),

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 2/6

INDEX `FK_PEDIDOS_FABRICANTE` (`COD_FAB`),CONSTRAINT `FK_PEDIDOS_ARTICULOS`   FOREIGN KEY (`ARTICULO`)

REFERENCES `ARTICULOS` (`ARTICULO`),CONSTRAINT `FK_PEDIDOS_FABRICANTE`   FOREIGN KEY (`COD_FAB`)

REFERENCES `FABRICANTE` (`COD_FAB`)

)COLLATE='utf8_general_ci'

ENGINE=InnoDB;

02. Crea una tablaVENTAS, a partir de PEDIDOS, que almacena las ventas de artículos que hace cada unade las tiendas. Cada venta se identifica por:  NIF (PK FK entero largo),  ARTICULO (PK FK entero

corto),  COD_FABRICANTE (PK FK entero corto), PESO (entero corto),  CATEGORIA (ENUM

'PRIMERA','SEGUNDA','TERCERA') y   FECHA_PEDIDO (TIMESTAMP con valor por defecto

FECHA ACTUAL). Cada fila de la tabla representa una venta.CREATE TABLE VENTAS (SELECT *   FROM  PEDIDOS);

03. Modifica las tablas   PEDIDOS y VENTAS para que incluyan un campo donde almacenar

UNIDADES_PEDIDAS (entero corto) y UNIDADES_VENDIDAS (entero corto) respectivamente. ALTER TABLE VENTAS   ADD COLUMN UNIDADES_VENDIDAS TINYINT(10)   NOT NULL

AFTER FECHA_PEDIDO;

 ALTER TABLE PEDIDOS   ADD COLUMN UNIDADES_PEDIDAS TINYINT(10)   NOT NULLAFTER FECHA_PEDIDO;

04. Introduce en las tablas los siguientes datos:INSERT INTO `ARTICULOS` (`ARTICULO`, `COD_FAB`, `PESO`, `CATEGORIA`)   VALUES

(1, 1, 20, 'PRIMERA'),   │ (2, 1, 45, 'TERCERA'),(3, 1, 10, 'TERCERA'),   │ (4, 1, 15, 'PRIMERA'),(5, 2, 100, 'SEGUNDA'),   │ (6, 2, 15, 'PRIMERA'),(7, 2, 30, 'PRIMERA'),   │ (8, 2, 80, 'TERCERA'),(9, 3, 25, 'TERCERA'),   │ (10, 3, 25, 'PRIMERA'),(11, 3, 70, 'SEGUNDA'),   │ (12, 3, 90, 'SEGUNDA');

INSERT INTO `FABRICANTE` (`COD_FAB`, `MARCA`, `NOMBRE_PAIS`)   VALUES

(1, 'FELVI', 'ITALIA'),   │ (2, 'CANTIER', 'FRANCIA'),(3, 'PEDROSA', 'ESPAÑA');

INSERT INTO `PEDIDOS` (`NIF`, `ARTICULO`, `COD_FAB`, `PESO`, `CATEGORIA`,`FECHA_PEDIDO`, `UNIDADES_PEDIDAS`)   VALUES

('2222-A', 12, 3, 90, 'SEGUNDA', '0000-00-00 00:00:00', 20),('4545-C', 1, 1, 20, 'PRIMERA', '2009-03-11 00:00:00', 10),('5555-B', 1, 1, 20, 'PRIMERA', '2009-03-09 00:00:00', 40),('5555-B', 2, 1, 45, 'TERCERA', '2009-03-11 00:00:00', 20),('7788-D', 3, 1, 10, 'TERCERA', '2010-03-12 00:00:00', 40);

INSERT INTO `TIENDAS` (`NIF`, `PROVINCIA`)   VALUES('1111-A', 'SEVILLA'),   │ ('2222-A', 'TOLEDO'),('4545-C', 'MADRID'),   │ ('5555-B', 'PONTEVEDRA'),('7788-D', 'TOLEDO'),   │ ('9911-H', 'TOLEDO');

INSERT INTO  `VENTAS` (`NIF`,  `ARTICULO`, `COD_FAB`, `PESO`,  `CATEGORIA`,`FECHA_PEDIDO`, `UNIDADES_VENDIDAS`)   VALUES

('2222-A', 12, 3, 90, 'SEGUNDA', '2012-03-16 00:00:00', 10),('4545-C', 1, 1, 20, 'PRIMERA', '2009-11-04 00:00:00', 5),('5555-B', 1, 1, 20, 'PRIMERA', '2009-12-03 00:00:00', 20),('5555-B', 2, 1, 45, 'TERCERA', '2009-03-13 00:00:00', 20),('7788-D', 3, 1, 10, 'TERCERA', '2011-03-11 00:00:00', 30);

05. Realiza las siguientes operaciones:

a) Da de alta un nuevo artículo de 'PRIMERA' categoría para los fabricantes de 'FRANCIA' y abastece con 5unidades de ese artículo a todas las tiendas y en la fecha de hoy.#primero doy de alta un articulo nuevo

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 3/6

INSERT INTO ARTICULOSSELECT (13,(SELECT A.COD_FAB   FROM  ARTICULOS A, FABRICANTE F   WHERE F.NOMBRE_PAIS

LIKE'FRANCIA'   AND A.COD_FAB=F.COD_FAB   LIMIT 1), NULL,'PRIMERA';

INSERT INTO PEDIDOSSELECT TIENDAS.NIF, 13, FABRICANTES.COD_FAB, 40, 'PRIMERA', NOW(), 5

FROM  TIENDAS, FABRICANTES

 WHERE FABRICANTES.NOMBRE_PAIS='FRANCIA';[/code=SQL]

[SIZE=10pt][i][b]b) Inserta un pedido de 20 unidades en la tienda'1111-A' con el artículo que mayor número de ventashaya realizado.[/b][/i][/SIZE]

[code=SQL]INSERT INTO PEDIDOS (`NIF`,`ARTICULO`,`COD_FAB`,`UNIDADES_PEDIDAS`)   VALUES

('1111-A',(SELECT   ARTICULO   FROM    VENTAS   WHERE   UNIDADES_VENDIDAS   = (SELECT

 MAX(UNIDADES_VENDIDAS)   FROM  VENTAS)),(SELECT COD_FAB   FROM  ARTICULOS   WHERE ARTICULO = (SELECT ARTICULO   FROM  VENTAS

 WHERE UNIDADES_VENDIDAS = (SELECT MAX(UNIDADES_VENDIDAS)   FROM  VENTAS))),20)

#AINSERT INTO PEDIDOS (`NIF`,`ARTICULO`,`COD_FAB`,`UNIDADES_PEDIDAS`)   VALUES

('1111-A',ARTICULO,COD_FAB,CATEGORIA,NOW(),20FROM  VENTAS   GROUP BY ARTICULO   ORDER BY SUM (UNIDADES_VENDIDAS)   DESC LIMIT 1;)

c ) Da de alta una tienda en la provincia de 'MADRID' y abastécela con 20 unidades de cada uno de los

 artículos existentes.Código:INSERT INTO TIENDASVALUES ('1111-E','MADRID');

INSERT INTO PEDIDOSSELECT '1111-E',ARTICULO,COD_FAB,PESO,CATEGORIA,NOW(),20FROM ARTICULOS;

 d) Da de alta dos tiendas en la provincia de 'SEVILLA' y abastécelas con 30 unidades de artículos de la

 marca de fabricante 'CANTIER'.Código1.   INSERT INTO TIENDAS2.   VALUES

3. ('2222-F','SEVILLA'),4. ('3333-G','SEVILLA');5.6.   INSERT INTO PEDIDOS7.   SELECT   '2222-

F',ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(),308.   FROM  ARTICULOS,FABRICANTES9.   WHERE (FABRICANTES.MARCA='CANTIER')10.   AND (FABRICANTES.COD_FAB=ARTICULOS.COD_FAB);

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 4/6

11.12.   INSERT INTO PEDIDOS13.   SELECT   '3333-G',   ARTICULOS.ARTICULO,

ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(),3014.   FROM  ARTICULOS,FABRICANTES   WHERE

15. (FABRICANTES.MARCA='CANTIER')16.   AND

17. (FABRICANTES.COD_FAB = ARTICULOS.COD_FAB);

18.

e) Realiza una venta para todas las tiendas de 'TOLEDO' de 10 unidades en los artículos de 'PRIMERA'

 categoría.Código1.   INSERT INTO VENTAS2.   SELECT   TIENDAS.NIF,

ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGORIA,SYSDATE(), 103.   FROM  (ARTICULOS.CATEGORIA='PRIMERA');

4.

f  ) Para aquellos artículos de los que se hayan vendido más de 30 unidades, realiza un pedido de 10

unidades para la tienda con NIF '5555-B' con la fecha actual.

Código1.   ALTER TABLE   PEDIDOS   DROP PRIMARY KEY, ADD PRIMARY

KEY(NIF,ARTICULO,COD_FAB,FECHA_PEDIDO);

2.3.   INSERT INTO PEDIDOS4.   SELECT DISTINCT '5555-B',

5. ARTICULOS.ARTICULO,ARTICULOS.COD_FAB,ARTICULOS.PESO,ARTICULOS.CATEGOR

IA,SYSDATE(),106.   FROM  ARTICULOS,VENTAS,7. (SELECT SUM (VENTAS.UNIDADES_VENDIDAS)   AS A,8. VENTAS.ARTICULO   AS B   FROM  VENTAS   GROUP BY VENTAS.ARTICULO)   AS C,9.   WHERE ARTICULO.ARTICULO=VENTAS.ARTICULO10.   AND A>3011.   AND C.B = ARTICULOS.ARTICULO;

12.

 g) Cambia los datos de la tienda con NIF '1111-A' igualándolos a los de la tienda con NIF '2222-A'.Código

1.   UPDATE TIENDAS   AS A, (SELECT PROVINCIA   FROM  TIENDAS   WHERE NIF='2222-a')   AS B2.   SET A.PROVINCIA = B.PROVINCIA3.   WHERE NIF = 1111

4.

 h) Cambia todos los artículos de 'PRIMERA' categoría a 'SEGUNDA' categoría del país 'ITALIA'.Código1.   UPDATE ARTICULOS A2.   SET A.CATEGORIA = 'SEGUNDA'3.   WHERE A.CATEGORIA = 'PRIMERA'

4.   AND A.COD_FAB = (SELECT  COD_FAB   FROM   FABRICANTE   WHERE   NOMBRE_PAISLIKE 'ITALIA')

5.

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 5/6

i) Modifica aquellos pedidos en los que la cantidad pedida sea superior a las existencias del artículo,

 asignando el 20 por 100 de las existencias a la cantidad que se ha pedido.Código1.   ALTER TABLE   ARTICULOS   ADD COLUMN EXISTENCIAS   INT(10)   NULL DEFAULT

10000 AFTER CATEGORIA;2.3.   UPDATE PEDIDOS   AS P, ARTICULOS   AS AR,

4. (SELECT P.UNIDADES_PEDIDAS   FROM  PEDIDOS   GROUP BY P.ARTICULO),5. (SELECT AR.ARTICULO   AS A   FROM  ARTICULOS, PEDIDOS,6. (SELECT SUM (P.UNIDADES_PEDIDAS)   AS B, P.ARTICULO   AS C   FROM  PEDIDOSGROUP BY P.ARTICULO)   AS D   WHERE AR.EXISTENCIAS<B7.   AND

8. AR.ARTICULO=P.ARTICULO   AND D.C=AR.ARTICULO   GROUP BY P.ARTICULO)   AS E9.   SET   P.UNIDADES_PEDIDAS=(P.UNIDADES_PEDIDAS*(20/100))   WHERE

P.ARTICULO=E.A;10.

 j) Elimina aquellas tiendas que no hayan realizado ventas.

Código1.   DELETE FROM  TIENDAS2.   WHERE NIF3.   NOT IN(SELECT DISTINCT NIF   FROM  VENTAS);

4.

 k) Elimina los artículos que no hayan tenido ni compras ni ventas.Código1.   DELETE FROM  ARTICULOS2.   WHERE ARTICULO   NOT IN (SELECT DISTINCT ARTICULO   FROM  VENTAS)3.   AND

4. ARTICULO   NOT IN (SELECT DISTINCT ARTICULO   FROM  PEDIDOS);5. [/code=SQL]

6.7. [SIZE=10pt][i][b]l)   Borra los pedidos de  'PRIMERA'   categoría cuyo

país de procedencia sea 'FRANCIA'.8. [/b][/i][/SIZE]9. [code=SQL]10.   DELETE FROM  PEDIDOS11.   WHERE ARTICULO   IN(SELECT ARTICULO   FROM  ARTICULOS   WHERE CATEGORIA =

'PRIMERA')12.   AND

13. COD_FAB  =  ANY(SELECT  COD_FAB   FROM  FABRICANTE   WHERE  NOMBRE_PAIS ='FRANCIA')14.

 m) Resta uno a las unidades de los últimos pedidos de la tienda con NIF '5555-B'.Código1. OPCION B2.   UPDATE PEDIDOS   AS A,(SELECT NIF   FROM  PEDIDOS   WHERE NIF =5555   ORDER BY

FECHA_PEDIDO   DESC LIMIT 1)   AS B3.   SET UNIDADES_PEDIDAS = UNIDADES_PEDIDAS-14.   WHERE

5. A.NIF = B.NIF6.

7/17/2019 Manual Mysql 2

http://slidepdf.com/reader/full/manual-mysql-2 6/6

 n) Crea una tabla INFORME, que contenga en tres columnas las marcas, artículo y la suma total de

unidades vendidas de cada artículo.Código1.   CREATE TABLE INFORME2.   SELECT FABRICANTES.MARCA,ARTICULOS.ARTICULO, NULL,(S,0)3.   FROM  FABRICANTES, ARTICULOS

4.   LEFT OUTER JOIN5. (SELECT VENTAS.ARTICULO   AS B,6.   SUM (VENTAS.UNIDADES_VENDIDAS)   AS S   FROM  VENTAS7.   GROUP BY VENTAS.ARTICULO)   AS A8.   ON ARTICULOS.ARTICULO = A.B9.   WHERE ARTICULOS.COD_FAB=FABRICANTES.COD_FAB

10.

 o) Borra el contenido de la tabla anterior.[

Código

1.   TRUNCATE TABLE INFORME2. code]3.4.5. [SIZE=10pt][i][b]p) Elimina la tabla anterior.[/b][/i][/SIZE]

6.7. [code=SQL]8.   DROP TABLE INFORME

9.