elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra  (Leído 3,164 veces)
astinx

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra
« en: 2 Noviembre 2011, 18:05 pm »

Hola, tengo una duda bastante generalizada de SQL, se trata de como hacer una consulta cuando nos topamos con la siguiente situaciones; tenemos que listar los elementos de una tabla que están presentes en todos los elementos de otra.

Por ejemplo: "Listar solo los alumnos que hayan cursado todas las materias"

Imaginense que tenemos las siguientes tablas:

PERSONA = (DNI, Apellido, Nombre, Fecha_Nacimiento, Estado_Civil, Genero)
ALUMNO = (DNI, Legajo, Año_Ingreso)
PROFESOR = (DNI, Matricula, Nro_Expediente)
TITULO = (Cod_Titulo, Nombre, Descripción)
TITULO-PROFESOR = (Cod_Titulo, DNI, Fecha)
CURSO = (Cod_Curso, Nombre, Descripción, Fecha_Creacion, Duracion)
ALUMNO-CURSO = (DNI, Cod_Curso, Año, Desempeño, Calificación)
PROFESOR-CURSO = (DNI, Cod_Curso, Fecha_Desde, Fecha_Hasta)

Una de mis soluciones fue esta:

Código:
SELECT P.DNI, P.NOMBRE, P.APELLIDO
FROM PERSONA P
INNER JOIN ALUMNOCURSO AC ON (P.DNI = AC.DNI)
GROUP BY P.DNI, P.NOMBRE, P.APELLIDO
HAVING ((COUNT(DISTINCT AC.COD_CURSO))=(SELECT COUNT(DISTINCT AC.COD_CURSO) FROM ALUMNOCURSO AC))

A lo que mi profesor respondio:   >:(  >:(  >:(

Bueno el caso, como muchos de ustedes, conocedores de SQL deben darse cuenta es que es extemadamente ineficiente. Me recomendaron que lo hiciera mediante diferencia de conjuntos, sacar el conjunto de alumnos que no han cursado ninguna materia y restarselo al conjunto general de alumnos, lo que me daría por resultado el conjunto de alumnos que han cursado todas las materias.

En el momento no me di cuenta, pero, ¿Acaso haciendo así no obtendríamos el conjunto de alumnos que han cursado por lo menos una materia?

Y si estoy en lo correcto, ¿Cual seria la manera mas eficiente de hacerlo?

Desde ya muchas gracias por su tiempo y por haberse detenido a leer.  :)



En línea

La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando
fran800m

Desconectado Desconectado

Mensajes: 204



Ver Perfil
Re: Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra
« Respuesta #1 en: 2 Noviembre 2011, 21:44 pm »

Citar
¿Acaso haciendo así no obtendríamos el conjunto de alumnos que han cursado por lo menos una materia?

Tienes razón.

Citar
SELECT P.DNI, P.NOMBRE, P.APELLIDO
FROM
(SELECT COUNT(DISTINCT AC.COD_CURSO) as total FROM ALUMNOCURSO AC)) aux, PERSONA P
INNER JOIN ALUMNOCURSO AC ON (P.DNI = AC.DNI)
GROUP BY P.DNI, P.NOMBRE, P.APELLIDO
HAVING ((COUNT(DISTINCT AC.COD_CURSO))= aux.total

Creo que así sería más eficiente, claro que puedo equivocarme. Mira los planes de ejecución y compara.


En línea

astinx

Desconectado Desconectado

Mensajes: 111



Ver Perfil
Re: Consulta SQL;Listar elementos que estan presentes en TODOS los elementos de otra
« Respuesta #2 en: 2 Noviembre 2011, 23:06 pm »

Si, sería mas eficiente, pero igualmente buscaba una manera diferente de hacerlo. Ahora estoy probando con EXISTS haber si lo puedo sacar en menos operaciones, si llego a lograrlo, lo subiré.
En línea

La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como agregar elementos al psp
Juegos y Consolas
mikixD 1 1,011 Último mensaje 14 Noviembre 2007, 13:58 pm
por IkSeN
¿Cómo ordenar un ArrayList de elementos-registro según uno de sus campos?
Java
reygecko 1 3,600 Último mensaje 17 Enero 2013, 00:00 am
por reygecko
Como añadir elementos a un JList (Java)
Programación General
moleroalex 2 3,667 Último mensaje 24 Noviembre 2013, 19:22 pm
por moleroalex
Eliminar todos los elementos de un vector
Programación C/C++
chihue 5 1,586 Último mensaje 8 Enero 2015, 05:57 am
por crack81
Conocer que elementos están contenidos dentro de otro (Duda JSP)
Java
1mpuls0 5 2,349 Último mensaje 14 Abril 2015, 04:38 am
por Usuario Invitado
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines