Nombre y apellidos: EXAMEN TEMAS 3, 4 y 5. CREACIÓN Y EXPLOTACIÓN DE UNA BASE DE DATOS 1. Crear la base de datos tiendas y, en ella, crear las tablas que se indican a continuación. Utilizar para todas las tablas el motor de base de datos InnoDB. (3 puntos) create database tiendas; use tiendas; EMPLEADO: dni (texto, máximo 15 caracteres, no nulo) nombre (texto, máximo 60 caracteres, no nulo) teléfono (texto, máximo 15 caracteres) La clave primaria de esta tabla es el campo dni. Crear un índice único para el campo nombre. CREATE TABLE empleado (dni VARCHAR (15) NOT NULL, nombre VARCHAR(60) NOT NULL, telefono VARCHAR (15), PRIMARY KEY (dni), UNIQUE (nombre)) ENGINE=InnoDB; TRABAJO: dni (texto, máximo 15 caracteres, no nulo) codtienda (numérico, no nulo) horas (numérico, valor por defecto 40) sueldo (decimal (2 decimales)) La clave primaria de esta tabla son los campos dni y codtienda. El campo dni es clave ajena de la tabla empleado. En la definición de la clave ajena indica que el campo dni tome el valor cascade para borrado y actualización.
El campo codtienda es clave ajena de la tabla tienda. En la definición de la clave ajena indica que el campo codtienda tome el valor cascade para borrado y actualización. CREATE TABLE trabajo (dni VARCHAR (15) NOT NULL, codtienda INT NOT NULL, horas INT DEFAULT 40, sueldo FLOAT (10,2), PRIMARY KEY (dni, codtienda), FOREIGN KEY (dni) REFERENCES empleado (dni) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY (codtienda) REFERENCES tienda (codtienda) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB; TIENDA: codtienda (numérico, no nulo) nombre (texto, máximo 60 caracteres) calle (texto, máximo 60 caracteres) numero (numérico) ciudad (texto, máximo 60 caracteres) La clave primaria de esta tabla es el campo codtienda. CREATE TABLE tienda (codtienda INT NOT NULL, nombre VARCHAR (60), calle VARCHAR (60), numero INT, ciudad VARCHAR (60), PRIMARY KEY (codtienda)) ENGINE=InnoDB; 2. Insertar los siguientes datos en las tablas creadas en el ejercicio anterior (1 punto): EMPLEADO: 35.876.234-M María Dolores García Trasmonte 632 45 67 85 40.112.432-L José Manuel Marín López 611 20 15 90 12.874.754-R Pedro Rodríguez Cárdenas 654 43 53 87 INSERT INTO empleado VALUES ( 35.876.234-M, María Dolores García Trasmonte, 632 45 67 85 ), ( 40.112.432-L, José Manuel Marín López, 611 20 15 90 ), ( 12.874.754-R, Pedro Rodríguez Cárdenas, 654 43 53 87 ); TRABAJO: 35.876.234-M 1 20 812,34 35.876.234-M 2 20 315,08 40.112.432-L 3 40 1208,25 12.874.754-R 4 20 620,87 12.874.754-R 5 20 601,43
INSERT INTO trabajo VALUES ( 35.876.234-M, 1, 20, 812.34), ( 35.876.234- M, 2, 20, 315.08), ( 40.112.432-L, 3, 40, 1208.25), ( 12.874.754-R, 4, 20, 620.87), ( 12.874.754-R, 5, 20, 601.43); TIENDA: 1 Madrid C/Montera 12 - Madrid 2 Alcorcón Plaza de España 25 - Alcorcón 3 Sevilla C/Sierpes 115 - Sevilla 4 Badajoz C/Menacho 37 - Badajoz 5 Zafra C/Sevilla 23 - Zafra INSERT INTO tienda VALUES (1, Madrid, C/Montera, 12, Madrid ), (2, Alcorcón, Plaza de España, 25, Alcorcón ), (3, Sevilla, C/Sierpes, 115, Sevilla ), (4, Badajoz, C/Menacho, 37, Badajoz ), (5, Zafra, C/Sevilla, 23, Zafra ); 3. Realizar las siguientes consultas sobre la base de datos (4 puntos): a) Contar cuántos empleados trabajan en la tienda de Zafra. select count(empleado.dni) from empleado, trabajo, tienda where empleado.dni=trabajo.dni and trabajo.codtienda = tienda.codtienda and ciudad= Zafra ; b) Listar el código y el nombre de las tiendas en las que algún empleado trabaje media jornada (20 horas). select tienda.codtienda, tienda.nombre from tienda, trabajo where trabajo.codtienda = tienda.codtienda and horas = 20; c) Listar los nombres de los empleados que trabajan en la tienda de Badajoz. Listar también al lado las horas que trabajan en dicha tienda. select empleado.nombre, horas from empleado, trabajo, tienda where empleado.dni = trabajo.dni and trabajo.codtienda = tienda.codtienda and ciudad= Badajoz ; d) Muestra un listado de los empleados y, al lado, el sueldo total recibido (tener en cuenta que hay empleados que trabajan en varias tiendas, no en una sola). select empleado.nombre, sum(sueldo) from empleado, trabajo where empleado.dni = trabajo.dni group by empleado.nombre; e) Muestra un listado de los empleados, la tienda en la que trabajan y el sueldo recibido en dicha tienda. El listado debe estar ordenado ascendentemente
primero por nombre del empleado, luego por nombre de la tienda y luego por sueldo recibido. select empleado.nombre, tienda.nombre, sueldo from empleado, trabajo, tienda where empleado.dni=trabajo.dni and trabajo.codtienda=tienda.codtienda order by empleado.nombre, tienda.nombre, sueldo; f) Mostrar el nombre y el sueldo del empleado que gane más, teniendo en cuenta sólo a los empleados que trabajan media jornada (20 horas). select max(sueldo), empleado.nombre from empleado, trabajo where empleado.dni = trabajo.dni and horas=20; g) Mostrar el sueldo medio de los empleados que trabajan media jornada (20 horas). select avg(sueldo) from empleado, trabajo where empleado.dni=trabajo.dni and horas=20; h) Listar los empleados que ganen más de 1200 euros. En el listado mostrar el nombre del alumno y el sueldo. Tener en cuenta que algunos empleados reciben sueldo por trabajar en más de una tienda. select empleado.nombre, sum(sueldo) as sueldototal from empleado, trabajo where empleado.dni = trabajo.dni group by empleado.nombre having sueldototal>=1200; 4. Realizar las siguientes modificaciones sobre la base de datos (1 punto): a) La tienda de Madrid se ha trasladado de la C/ La Montera 12 a la C/La Montera 20. Actualizarlo en la base de datos. update tienda set numero=20 where numero=12; b) El 2014 ha sido un buen año desde el punto de vista económico y el dueño de la cadena de tiendas ha decidido subirle a sus empleados un 5% el sueldo. Realizar esta actualización en la base de datos. update trabajo set sueldo=sueldo*1.05; 5. Para poder sacar un listado de los empleados en una aplicación web necesitamos crear una vista que muestre los siguientes campos de las tablas de la base de datos: nombre del empleado, tienda en la que trabaja, horas que trabaja y sueldo. Diseñar la vista para esta aplicación. (1 punto)
create view listadoempleados as select empleado.nombre as nombreempleado, tienda.nombre as nombretienda, horas, sueldo from empleado, tienda, trabajo where empleado.dni = trabajo.dni and trabajo.codtienda = tienda.codtienda;