Вы находитесь на странице: 1из 5

DESARROLLO DE APLICACIONES EN ENTORNOS DE CUARTA GENERACIN

EXAMEN EXTRAORDINARIO
15/04/2010

Para aprobar el examen es necesario obtener una nota superior o igual a 5


puntos y al menos 1 punto en cada ejercicio.

1. Descripcin de las tablas:

Tabla DEPARTAMENTOS

DEP_NO INT(2)
DNOMBRE VARCHAR(14)
LOCALIDAD VARCHAR(10)

Tabla EMPLEADOS

EMP_NO INT(4)
APELLIDO VARCHAR(8)
OFICIO VARCHAR(10)
DIRECTOR INT(4)
FECHA_ALTA DATE
SALARIO FLOAT(6,2)
COMISION FLOAT(6,2)
DEP_NO INT (2)

Tabla CLIENTES

CLIENTE_NO INT(4)
NOMBRE VARCHAR(25)
LOCALIDAD VARCHAR(14)
VENDEDOR_NO INT(4)
DEBE FLOAT(9,2)
HABER FLOAT(9,2)
LIMITE_CREDITO FLOAT(9,2)

Tabla PRODUCTOS

PRODUCTO_NO INT(4)
DESCRIPCION VARCHAR(30)
PRECIO_ACTUAL FLOAT(8,2)
STOCK_DISPONIBLE INT(9)

Tabla PEDIDOS

PEDIDO_NO INT(4)
PRODUCTO_NO INT(4)
CLIENTE_NO INT(4)
UNIDADES INT(4)
FECHA_PEDIDO DATE

Estas tablas son las utilizadas para realizar todos los ejercicios del curso con MySQL. Las
tablas se han cargado en la base de datos MySQL con el fichero cargartablas.sql, en este fichero
aparecen los registros insertados en cada tabla y las relaciones, dependencias y restricciones
existentes entre las tablas, que son las mismas que las utilizadas en los ejercicios de clase. Se
puede utilizar phpmyadmin como herramienta a la hora de generar las consultas que se piden a
continuacin.

1. Realiza las siguientes consultas: (2,5 puntos)

1. Obtener aquellos productos de los que el nmero de pedidos que se han realizado, con la
fecha del pedido anterior a 1 de enero del 2000, sea mayor de uno.
SELECT PE.PRODUCTO_NO, COUNT(PEDIDO_NO) "N_PEDIDOS", PR.DESCRIPCION
FROM PEDIDOS PE INNER JOIN PRODUCTOS PR ON PE.PRODUCTO_NO =
PR.PRODUCTO_NO
WHERE YEAR(PE.FECHA_PEDIDO) < 2000
GROUP BY PE.PRODUCTO_NO
having N_PEDIDOS > 1;
2. Obtener los clientes que no pertenezcan a las localidades de sus vendedores. En el listado
visualizar el nombre del cliente y su localidad, y el nombre del vendedor y su localidad
con los alias correspondientes para indicarlo.
SELECT CL.NOMBRE, CL.LOCALIDAD, EM.APELLIDO, DE.LOCALIDAD
FROM CLIENTES CL INNER JOIN EMPLEADOS EM ON CL.VENDEDOR_NO = EM.EMP_NO
INNER JOIN DEPARTAMENTOS DE ON EM.DEP_NO = DE.DEP_NO
WHERE CL.LOCALIDAD <> DE.LOCALIDAD;
3. Visualizar los datos de los departamentos con el nombre del departamento, el salario total
(salario + comision) anual (14 pagas) y la comisin anual total de sus trabajadores,
incluyendo todos los departamentos. Si la comisin total anual es nula se mostrar un
cero.
SELECT DNOMBRE "DEPARTAMENTO", SUM(SALARIO + IFNULL(COMISION,0))*14
"SALARIO_ANUAL", SUM(IFNULL(COMISION,0)) "COMISION_ANUAL"
FROM EMPLEADOS INNER JOIN DEPARTAMENTOS ON EMPLEADOS.DEP_NO =
DEPARTAMENTOS.DEP_NO
GROUP BY DNOMBRE;
4. Obtener los nombres y las localidades de los clientes que tengan pedidos.
SELECT NOMBRE, LOCALIDAD
FROM CLIENTES
WHERE CLIENTE_NO IN (SELECT CLIENTE_NO FROM PEDIDOS);
5. Seleccionar el departamento con menos suma salarial total (salario+comision) de la
empresa, visualizando el nombre del departamento.
SELECT DNOMBRE "DEPARTAMENTO", SUM(SALARIO + IFNULL(COMISION,0)) "SUMA
SALARIAL"
FROM EMPLEADOS EM INNER JOIN DEPARTAMENTOS DE ON EM.DEP_NO = DE.DEP_NO
GROUP BY DNOMBRE
ORDER BY 2 ASC
LIMIT 1
6. Visualizar los apellidos y oficios de los empleados del departamento 10 cuyo oficio sea
idntico al de cualquiera de los empleados del departamento de VENTAS.
SELECT APELLIDO, OFICIO
FROM EMPLEADOS
WHERE DEP_NO = '10' AND OFICIO IN ( SELECT DISTINCT(EM.OFICIO )
FROM EMPLEADOS EM INNER JOIN DEPARTAMENTOS DE
ON EM.DEP_NO = DE.DEP_NO
WHERE DE.DNOMBRE LIKE 'VENTAS')
7. Obtener los datos de los vendedores con ms de dos clientes.
SELECT *
FROM (SELECT VENDEDOR_NO, COUNT(CLIENTE_NO) "N_CLIENTES" FROM CLIENTES
GROUP BY VENDEDOR_NO) VE INNER JOIN EMPLEADOS EM ON VE.VENDEDOR_NO =
EM.EMP_NO
WHERE VE.N_CLIENTES > 2

2. Escribir un procedimiento almacenado que reciba como parmetro de entrada un nmero de


ao y realice las siguientes operaciones en la base de datos turismo: (1,5 puntos)

a. Crear un cursor que contenga las descripciones de los distintos alojamientos


utilizados para ese ao segn esta anotado en la tabla pernoctaciones.

b. Escribir en pantalla para cada uno de los registros que componen ese cursor, la suma
de la media de alquileres ms la media de gasto para ese tipo de alojamiento.

c. Adems si la suma es menor de 30 escribir al lado de la suma Gasto bajo, si la


suma es menor de 80 pero mayor de 50 escribir Gasto medio, si la suma es mayor
de 80 escribir Gasto alto.

d. Introducir en una tabla llamada mconsumos la descripcin del alojamiento, media de


gasto y media de alquileres.

e. Eliminar el cursor y la tabla para que el procedimiento pueda ser llamado de nuevo.

3. Crear disparadores para las tablas zona y procedencia. Los disparadores deben realizar las
siguientes tareas: (2 puntos)

Tabla zona

Debe impedir la insercin o modificacin de registros con un cdigo menor de 0 o mayor de 10,
para hacer esto debis cambiar primero el tipo cdigo de la tabla zona para convertirlo en int.
Cuando se borre una zona se deben borrar todos los registros asociados en la tabla
pernoctaciones. Si se modifica una zona, la modificacin se debe propagar al campo zona de la
tabla pernoctaciones.

Tabla procedencia

Cuando se borre o modifique un registro de esta tabla, el borrado o la modificacin del cdigo de
procedencia asociado a ese registro se debe propagar a las tablas reclamaciones, llegadas y
pernoctaciones.
4. Se pretende generar una encuesta dentro de nuestra pgina librolepe.com para la cual se
utilizar el link opinin que aparece en la pgina principal de la parte pblica. Debemos tener en
cuenta que tanto las preguntas como las posibles respuestas se encuentran almacenadas en
nuestra base de datos books, las tablas que almacenan el cuestionario a presentar al usuario son
las siguientes:

Tabla Preguntas

idpregunta int(3)
pregunta varchar(200)
tipo int(3)
nopciones int(3)

Tabla opcionespre

idpregunta int(3)
texto varchar(50)

Tabla tipopreguntas

tipo int(3)
nombre varchar(10)

Se pide:

a) Generar el formulario que presente las preguntas y las posibles respuestas asociadas.
(1,5 puntos)
b) Comprobar que todas las preguntas han sido respondidas, si alguna pregunta no tiene
respuesta, se le debe hacer saber al usuario mediante un mensaje que indique cual es la respuesta
que esta incompleta. (1 puntos)
c) Almacenar en la base de datos los resultados de las respuestas, anotando tambin el usuario
que realizo la encuesta. (1,5 puntos)

ENCUESTA DE EVALUACION DE NUESTRA PAGINA WEB

Вам также может понравиться