Parctica 3 SQL
Parctica 3 SQL
Parctica 3 SQL
1. Enunciado
En este ejercicio se realizarán consultas SQL que respondan a las preguntas que se
plantearán sin utilizar QBE. Dada una base de datos denominada Empresa y definida por
las siguientes relaciones:
Empleados(DNI: 9, Sueldo: Entero largo)
Domicilios(DNI: 9, Calle: 50, Código postal: 5)
Teléfonos(DNI: 9, Teléfono: 9)
Códigos postales(Código postal: 5, Población: 50, Provincia: 50)
donde la tabla Empleados almacena los empleados de una empresa, la tabla
Domicilios almacena los domicilios de estos empleados, la tabla Teléfonos almacena los
teléfonos de los empleados y la tabla Códigos postales almacena los códigos postales de
España con referencia a la población y provincia correspondientes.
Hay que considerar que un empleado puede tener varios domicilios o que puede
compartir vivienda con otro empleado e incluso que puede no conocerse su domicilio, y
también que puede tener varios (o ningún) teléfonos, así como un teléfono puede estar
compartido por varios empleados.
A continuación se pide resolver en SQL una serie de consultas. Estas consultas se
deben denominar XXY, donde XX es el número del apartado (con un cero a la izquierda si es
menor que 10) e Y la letra del subapartado. Por ejemplo: 03b es el nombre de la consulta del
subapartado b) del apartado 3.
1) Realizar el diseño físico, determinando las claves, restricciones de cardinalidad y de
integridad referencial. (Usar SQL al menos para la creación de las tablas. Las
restricciones de integridad referencial se pueden crear en QBE.)
2) Poblar las tablas con los datos que aparecen al final.
3) Listado de empleados que muestre Nombre, Calle y Código postal ordenados por Código
postal y Nombre de dos formas diferentes:
a) Con SELECT.
b) Con JOIN.
4) Listado de los empleados ordenados por nombre que muestre Nombre, DNI, Calle,
Código postal, Teléfono de dos formas diferentes:
a) Sólo los empleados que tengan teléfono.
b) Los empleados que tengan teléfono como los que no.
1
Bases de datos MTIG
5) Listado de los empleados que muestre Nombre, DNI, Calle, Población, Provincia y
Código postal ordenados por nombre.
6) Listado de los empleados que muestre Nombre, DNI, Calle, Población, Provincia, Código
postal y Teléfono ordenados por nombre.
7) Incrementar en un 10% el sueldo de todos los empleados, de forma que el sueldo
aumentado no supere en ningún caso 1.900 €.
8) Deshacer la operación anterior con una consulta (comprobar que los datos coinciden con
los de la tabla original).
9) Repetir los dos pasos anteriores con el límite 1.600 €.
10) Listado del número total de empleados, el sueldo máximo, el mínimo y el medio.
11) Listado de sueldo medio y número de empleados por población ordenado por población.
12) Listado de provincias con códigos postales ordenado por población. En la cabecera de las
columnas deben aparecer las provincias y en cada columna los códigos postales de las
localidades de cada provincia, de la forma:
13) Agregar restricciones de integridad de dominio con las reglas de validación (el sueldo
debe estar comprendido entre 0 y 120.000 €.)
14) Agregar máscaras de entrada para todos los campos que lo acepten.
15) Agregar formato de salida para todos los campos que lo acepten.
DNI Teléfono
Tabla Teléfonos 12345678C 611111111
2
Bases de datos MTIG
3
Bases de datos MTIG
Solución:
1) Realizar el diseño físico, determinando las claves y restricciones de
unicidad, existencia e integridad referencial. (Usar SQL al menos para la
creación de las tablas. Las restricciones de integridad referencial se pueden
crear en QBE.)
a) Tabla Empleados:
Restricciones:
o Clave: {DNI}
o Unicidad: Ninguna.
o Existencia: {Nombre}
o Integridad referencial: Ninguna.
c) Tabla Teléfonos:
Restricciones:
o Clave: {DNI, Teléfono}
o Unicidad: Ninguna.
o Existencia: {Población}, {Provincia}
o Integridad referencial: {Teléfonos.DNI} ⊆ {Empleados.DNI}.
d) Tabla Domicilios:
Restricciones:
4
Bases de datos MTIG
5
Bases de datos MTIG
6
Bases de datos MTIG
Nota: La cláusula LEFT JOIN más externa (la que aparece en último lugar)
no tendría que ser necesariamente una reunión externa, bastaría con una
interna. Es necesario hacer uso de ella porque Access no permite anidar
reuniones INNER JOIN dentro de reuniones LEFT o RIGHT JOIN.
7
Bases de datos MTIG
se obtiene:
se obtiene:
8
Bases de datos MTIG
Después se crea una nueva consulta que anota las tuplas modificadas:
INSERT INTO [Empleados modificados]
SELECT DNI FROM Empleados WHERE Sueldo*1.1 <= 1600;
El resultado es:
DNI
12345678C
El resultado es:
9
Bases de datos MTIG
El resultado es:
Empleados Sueldo mínimo Sueldo máximo Sueldo medio (AVG) Sueldo medio (SUM)
4 909 5000 2352,25 2352,25
El resultado es:
10
Bases de datos MTIG
El resultado es:
11
Bases de datos MTIG
Y su resultado es:
DNI Número
12345678A 2
12345678C 0
12345678L 1
12345678P 2
12
Bases de datos MTIG
Y su resultado:
Sólo falta hacer los cálculos del sueldo medio y número de empleados
por provincia, teniendo en cuenta los empleados que no tienen domicilio. Se
plantea en la consulta 11c5:
El resultado es:
13
Bases de datos MTIG
El resultado es:
14
Bases de datos MTIG
14) Agregar máscaras de entrada para todos los campos que lo acepten.
15) Agregar formato de salida para todos los campos que lo acepten.
Con respecto a estos dos apartados se pueden añadir máscaras de entrada y
formato a los campos DNI, Sueldo, Código postal y Teléfono de las diferentes
tablas:
15
Bases de datos MTIG
El formato del campo Sueldo se puede ver en la figura del apartado 13.
16