Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda con CUATRO Select (no veo la diferencia entre ellas)

Estas en el tema de Duda con CUATRO Select (no veo la diferencia entre ellas) en el foro de Bases de Datos General en Foros del Web. Hola tengo una duda en el siguiente test. Dan como buena la respuesta b) y seguro que esta bien, pero no consigo ver la diferencia ...
  #1 (permalink)  
Antiguo 25/09/2009, 06:13
Avatar de abmptc  
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 15 años, 2 meses
Puntos: 0
Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola tengo una duda en el siguiente test. Dan como buena la respuesta b) y seguro que esta bien, pero no consigo ver la diferencia entre estas cuatro Select.

¿Cual de las siguientes sentencias SQL obtendría el total de puestos vacantes actualmente, para los que no se exige titulación '010', por unidad y por nivel?

a)
select o.nuni, p.nivel, count(*)
from puesto p, titulaciones o
where p.ffin is null and p.npt =o.npt and o.titulacion <>'010'
and p.npt not in (select npt from actividad a where a.npt=p.npt and a.fces is null)
group by p.nuni, p.nivel

b)
select o.nuni, p.nivel, count(*)
from puesto p
where p.ffin is null and
and p.npt not in (select o.npt from titulaciones o where o.titualciones='010')
and p.npt not in (select npt from actividad a where a.npt=p.npt and a.fces is null)
group by p.nuni, p.nivel

c)
select o.nuni, p.nivel, count(*)
from puesto p, titulaciones o, actividad a
where p.ffin is null and p.npt =o.npt and o.titulacion <>'010'

group by p.nuni, p.nivel

d)
select o.nuni, p.nivel, count(*)
from puesto p, actividad a
where p.ffin is null and
p.npt not in (select o.npt from titulaciones o where o.titualciones='010')
and p.npt=a.npt and a.fces is not null
group by p.nuni, p.nivel


Un saludo.
  #2 (permalink)  
Antiguo 25/09/2009, 06:39
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

La diferencia es toda.

En la a) se hace una anidación de las tablas puesto y titulaciones. En la b) la consulta unicamente se hace sobre la tabla puesto. En la c) sobre puesto, titulaciones y actividad y en la d) entre las tablas puesto y actividad.

Si conocieramos mas la estructura de las tablas y el enunciado completo te podríamos ayudar mejor.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 25/09/2009, 08:28
Avatar de abmptc  
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola,

Perdón por no dar más datos. Lo hice para no liar más el problema, y puse lo que creí que sería suficiente. Añado el resto de datos:

Efectivo:
“NEFE” cod Efectivo
NOM nombre
APE apellidos

Rservicio
“NEFE” cod. Efectivo
“NRS” num relacion
FINI fecha inicio
FFIN Fecha fin
CFIN Causa fin

Situación
“NEFE” cod efectivo
“NRS” num relacion
“NSI” num situacion
FINI fecha inicio
FFIN fecha fin
TSIT Tipo situación

Actividad:
“NEFE” cod. Efectivo
“NRS” numero de relacion
“NAC” numero de actividad
NPT codigo Puesto
FTPO fecha toma posesión
FCES Fecha Cese

Puesto:
“NPT” codigo Puesto
DES Descripcion
FINI Fecha Inicio
FFIN Fecha fin

Titulaciones
“NPT” codigo puesto
TITULACION codigo titulación

La tabla titulaciones almacena las titulaciones exijidas para ocupar ese puesto. Un puesto puede no tener titulación exigida.

(los campos que forman la clave principal van entre comillas)

Saludos.
  #4 (permalink)  
Antiguo 25/09/2009, 09:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Que base de datos tratan en la pregunta?
La b no me suena al hacer un llamado a una tabla externa desde una subconsulta.

Me inclinaría por la d.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 25/09/2009, 09:53
Avatar de abmptc  
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola,

No es ninguna base de datos en particular. Es una pregunta que salió en un Test de una oposición, no fue anulada, y estoy seguro de que la respuesta correcta es la b). Lo que no consigo ver es la diferencia entre estas cuatro Select, cada una de ellas usa mecanismos distintos (subconsultas, Exist, In, Join), pero para mi todas dan el mismo resultado.

¿Agradecería mucho que alguien me pudiera decir la diferencia entre ellas?

Saludos.
  #6 (permalink)  
Antiguo 18/10/2009, 09:48
Avatar de abmptc  
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola,

Os añado el enunciado íntegro del ejercicio en las siguientes imágenes:

img25.imageshack.us/img25/4122/0aprdudacon4select1.jpg
img11.imageshack.us/img11/2423/0aprdudacon4select2.jpg
img269.imageshack.us/img269/7083/0aprdudacon4select3.jpg

Bien, “creo” que ya he conseguido entender la diferencia entre estas Select. Y estoy de acuerdo en que la respuesta correcta es la b). Voy a intenar explicar mis conclusiones:

Una parte del Where es constante para todos los casos: p.ffin is null por lo que no nos plantea problemas.
Esta condición se pone porque si p.ffin tuviera alguna fecha significaría que ese puesto esta cerrado.

Bien, para explicar el problema podríamos centrarnos en 2 partes:

1ª parte: o.titualciones
1.a) p.npt =o.npt and o.titulacion <>'010'
1.b) p.npt not in (select o.npt from titulaciones o where o.titualciones='010')
En la opción 1.a Estaríamos seleccionando todos los puestos cuyas titulaciones sean distintas de 010. Pero hay puestos que no tienen titulación, por lo que la 1.a estaría mal al no coger los puestos para los que no existe titulación.

2ª parte: a.fces
2.a) p.npt not in (select npt from actividad a where a.npt=p.npt and a.fces is null)
2.b) from puesto p, actividad a where p.npt=a.npt and a.fces is not null
Según el enunciado un puesto puede tener varias actividades. Un puesto esta vacante si TODAS sus actividades tienen alguna fecha en fces, en cuanto alguna actividad tenga este campo a null, el puesto no esta vacante. La opción 2b sería incorrecta ya que generaría para cada puesto varias líneas en el resultado final (una por cada actividad en la cual fces no sea nula), y para un puesto en el resultado final solo puede haber como mucho una línea.

“Creo” que esto explica la solución correcta. Os agradecería que comentarais tanto si estáis de acuerdo con este razonamiento como si veis alguna cosa con la que no estéis de acuerdo.

Un saludo.
  #7 (permalink)  
Antiguo 18/10/2009, 10:17
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Los links están rotos.
Gracias por compartir la respuesta.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #8 (permalink)  
Antiguo 18/10/2009, 10:34
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 15 años, 2 meses
Puntos: 214
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola
los links no estan rotos!
bueno, los reviso y edito este post
saludos

Bueno, pues ya revise la info, y con la información adicional que es comentada
diria entonces que la respuesta es la d pues las dos primeras (a y b) usan el a.fces is null por lo cual no se cumple
la parte de las actividades (que tengan fechas)
y c hace que coincidan los npt de puestos y titulaciones y quedan por fuera las que no tienen titulación (a menos que se maneje un registro que se haga llamar ninguna, y en ese caso c seria la opción)
saludos

Última edición por mortiprogramador; 18/10/2009 a las 11:09 Razón: comentarios
  #9 (permalink)  
Antiguo 18/10/2009, 11:24
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Cita:
Iniciado por huesos52 Ver Mensaje
Que base de datos tratan en la pregunta?
La b no me suena al hacer un llamado a una tabla externa desde una subconsulta.

Me inclinaría por la d.
Yo también me incliné por la d la primera vez que te respondí.

Que tan serio es este test?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #10 (permalink)  
Antiguo 18/10/2009, 13:33
Avatar de abmptc  
Fecha de Ingreso: septiembre-2009
Mensajes: 43
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Duda con CUATRO Select (no veo la diferencia entre ellas)

Hola,

Es bastante serio, ya que se trata de un test de una oposición estatal, en la cual las respuestas son recurribles por los opositores en caso de cualquier error. En este caso la pregunta no fue anulada, por eso le he dado tanta credibilidad desde el principio a la veracidad de la respuesta.

P.D.: Los enlaces los he tenido que poner así, porque el foro me dijo que si no tenía 30 mensajes publicados, no podía poner enlaces. Pero copiandolos y pegandolos en la Barra de URL, funcionan correctamente.

Un saludo a todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.