English version (when available)
select * from area;
select * from habitacion;
select * from habitacion h, area a;No, no tienen apenas sentido. Has cruzado todas las habitaciones con todas las áreas. Eso NO relaciona las habitaciones con el área a la que pertenecen.
Has obtenido 4800 filas (600 habitaciones por 8 áreas)
select a.*,h.id habitacion, dimension from habitacion h, area a where h.idArea = a.id order by a.id,h.id;Hemos relacionado las habitaciones con el área a la que pertenecen. El resultado son 600 filas, 600 habitaciones, todas pertenecen a algún área.
select * from habitacion where idArea = 5 order by idArea,id;Fíjate en que no hemos utilizado la tabla AREA para nada, toda la información requerida se encuentra en HABITACION
select h.* from habitacion h, area a where h.idArea = a.id and tipo = 'traumatología' order by h.id;Ahora sí necesitamos la tabla AREA, tenemos que comprobar un dato que solo está en ella. Puedes ejecutar "select * from habitacion h, area a where h.idArea = a.id and tipo = 'traumatología' order by h.id" para ver qué, efectivamente, son las habitaciones correctas.
select t.colegiado,apellidos,nombre,direccion,ciudad from trabajador t, medico m where m.colegiado = t.colegiado and provincia = 'Alicante' order by ciudad,apellidos;Solución alternativa:La tabla MEDICO solo la necesitamos para comprobar que el trabajador lo es. De ahí la solución alternativa que es más eficiente en MySQL —aunque esto no nos preocupa de momento—.select colegiado,apellidos,nombre,direccion,ciudad from trabajador where colegiado IN (select colegiado from medico) and provincia = 'Alicante' order by ciudad,apellidos;
select e.id, e.tipo, t.colegiado,apellidos,nombre,direccion,ciudad from trabajador t, medico m, especialidad e where m.colegiado = t.colegiado and provincia = 'Alicante' and m.idEspecialidad = e.id order by e.tipo,apellidos;Ahora necesitamos 3 tabla. Al añadir ESPECIALIDAD igualmente la tenemos que enlazar con alguna de las otras dos. En este caso, el único enlace posible es con MEDICO.
select * from historial h, diagnostico d where h.id = d.idH;El propósito de este ejercicio es que te des cuenta de que NO es obligatorio seguir la cadena de claves ajenas en algunas consultas. Aquí la tabla LINEA_HISTORIAL no hace falta para nada.
Si la utilizaras, lo que te sería penalizado en nuestra asignatura, habría que enlazarla debidamente con alguna de las otras tablas.
select d.*,l.fecha,l.idMedico from diagnostico d, linea_historial l where l.idHistorial = d.idH and l.id = d.idL;¡Cuidado! La clave ajena que va desde DIAGNOSTICO hasta LINEA_HISTORIAL es compuesta, se define con 2 columnas.
select d.*,l.fecha,l.idMedico,apellidos,nombre from diagnostico d, linea_historial l,trabajador t where l.idHistorial = d.idH and l.id = d.idL and l.idMedico = t.colegiado;Nuevamente, la tabla MEDICO no es necesaria, ya tenemos toda la información útil en esas 3 tablas
select d.*,l.fecha,l.idMedico,t.apellidos,t.nombre, sip "sip paciente", p.apellidos, p.nombre from diagnostico d, linea_historial l,trabajador t, tiene_un tu, paciente p where l.idHistorial = d.idH and l.id = d.idL and l.idMedico = t.colegiado and tu.idhistorial = l.idHistorial and tu.idpaciente = p.sip;NO hacen falta las tablas MEDICO e HISTORIAL.
select sip,apellidos,nombre,medicacion from paciente p, tiene_un tu, tratamiento t where p.sip = tu.idpaciente and tu.idhistorial = t.idH;
select sip,apellidos,nombre,medicacion, fecha from paciente p, tiene_un tu, tratamiento t, linea_historial l where p.sip = tu.idpaciente and tu.idhistorial = t.idH and l.idhistorial = t.idH and l.id = t.idL;
select colegiado,nif,apellidos,nombre from trabajador where ciudad = 'Benidorm';
select colegiado,nif,apellidos,nombre, idturno from trabajador t, asignado a where ciudad = 'Benidorm' and a.idtrabajador = t.colegiado;
select colegiado,nif,apellidos,nombre, idturno,tipo from trabajador t, asignado a, turno tr where ciudad = 'Benidorm' and a.idtrabajador = t.colegiado and tr.id = a.idturno;
select t.colegiado,nif,apellidos,nombre, idturno,tipo from trabajador t, asignado a, turno tr, enfermero e where ciudad = 'Benidorm' and a.idtrabajador = t.colegiado and tr.id = a.idturno and t.colegiado = e.colegiado;Solución alternativa:select colegiado,nif,apellidos,nombre, idturno,tipo from trabajador t, asignado a, turno tr where ciudad = 'Benidorm' and a.idtrabajador = t.colegiado and tr.id = a.idturno and colegiado in (select colegiado from enfermero);