Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

METRO

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 13

31V

METRO

DIANA VANESSA
LAZCANO PEREZ
BASE DE DATOS II
31V
METRO

Se desea recoger información de las líneas de metro de una


determinada ciudad. Los supuestos considerados son los siguientes:
Una línea está compuesta por una serie de estaciones en un orden
determinado, siendo muy importante recoger la información de este orden.
Cada estación pertenece al menos a una línea, pudiendo pertenecer a varias.
Una estación nunca puede dejar de pertenecer a una línea a la que
anteriormente perteneciera (por ejemplo Portazgo que pertenece a la línea 1
nunca podrá dejar de pertenecer a esta).
Cada estación puede tener varios accesos, obviamente un acceso sólo puede
pertenecer a una estación. Un acceso nunca podrá cambiar de estación.
Cada línea tiene asignados una serie de trenes, no pudiendo suceder que un
tren esté asignado a más de una línea, pero sí que no esté asignado a ninguna.
Cada línea tiene asignados como mínimo tantos trenes como estaciones tenga
y como máximo el doble del número de estaciones.
Algunas estaciones tienen asignadas cocheras, y cada tren tiene asignada una
cochera.
Un tren puede cambiar de cochera, pero no quedar sin ella. Interesa conocer
todos los accesos de cada línea.
EJEMPLO propuesto de consulta SQL sobre la BD de líneas de metro
Tipo: consulta de tipo 3 (según enunciado).
Enunciado: Escribe una consulta SQL que obtenga 3 columnas:
(1) identificador de estación.
(2) número de accesos a la estación .
(3) número de líneas que pasan por la estación.
Sólo deben figurar en el resultado estaciones con 3 o más trenes detenidos en
sus andenes. Cuando un tren está detenido en un andén (línea-estación-
sentido) existe una fila del tren en la tabla llegada donde fechaHoraS contiene
el valor nulo.
Solución:
select LE.estacion, count(distinct A.numero) as “andenes”, count(distinct
LE.linea) as “lineas”
from ( lineaEstacion LE join
acceso A on A.estacion=LE.estacion ) left join
llegada LL on LL.linea=LE.linea and LL.estacion=LE.estacion and
LL.fechaHoraS is null
group by LE.estacion
having count(distinct LL.id) >= 3.
Tipo: Consulta de tipo 1 (según enunciado).
Enunciado: El valor nulo. Escribe una consulta SQL que obtenga el
identificador de los trenes que hayan visitado todas las estaciones
pertenecientes a líneas que pasan por la estación de nombre ‘Esperanza’ en
los últimos 10 días (considerar sólo la hora de llegada como fecha de visita).
Solución:
select T.id as ‘Tren’
from tren T
where not exists
( select LE.estacion
from estacion E join
lineaEstacion LEsp on LEsp.estacion=E.id join
lineaEstacion LE on LEsp.linea=LE.linea
where E.nombre=’Esperanza’ and LE.estacion not in
( select L.estacion
from llegada L
where L.fechaHoraLl>=sysdate-10 and L.tren=T.id – correlacion )
)

Se ha usado not in porque mysql no admite except o minus

También podría gustarte