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

Consulta base de datos

Estas en el tema de Consulta base de datos en el foro de Mysql en Foros del Web. Buenas. Revisando mis trabajos anteriores quize volver a empezar desde 0 porque no recuerdo mucho acerca de las bases de datos.. Mi problema es el ...
  #1 (permalink)  
Antiguo 01/08/2014, 17:07
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Consulta base de datos

Buenas. Revisando mis trabajos anteriores quize volver a empezar desde 0 porque no recuerdo mucho acerca de las bases de datos..

Mi problema es el siguiente:

Si yo tengo una base de datos creada llamada "x" , y dentro de esa base de datos. Tengo creada 4 tablas: Alumno, localidad, materia y previas.

ALUMNO:


Materia y previas:



Mi pregunta es: Si yo quisiera LISTAR todos los alumnos que deben materias previas. Como hago esa RELACION entre las tablas y luego lo listo?

No pido que me lo resuelvan, sino que me vallan guiando si es posible.
  #2 (permalink)  
Antiguo 03/08/2014, 19:41
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: Consulta base de datos

Casi no entiendo tu pregunta así que intentaré darte una respuesta(además de lo obvio que parece que ninguna de tus tablas tiene una clave primaria autoincrementable). Lo primero que no entiendo es si solo queres hacer el query de la tabla previas o la de alumnos. Como lo veo solo tenes que hacer lo siguiente
Código MySQL:
Ver original
  1. SELECT pr.anio, ma.cm, ma.nombre, al.legajo, al.nombre
  2. FROM previa pr
  3. LEFT JOIN alumno al ON pr.legajo=al.legajo
  4. LEFT JOIN materia ma ON pr.cm=ma.cm
pr, al, ma son para distinguir a que tabla pertenecen, podenes poner las que queras no precisamente las que puse yo.
  #3 (permalink)  
Antiguo 04/08/2014, 11:57
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Consulta base de datos

Hola, gracias por responder..

Lo que me pasa es esto.
Si yo quisiera por ejemplo dictar todos los alumnos que tengan materia previa Lab. de prog , por ejemplo... Yo haria esto:
Código:
select a.nombre , a.apellido 
from alumno a , materia m , previa p 
where a.legajo=p.legajo and m.cm=1;
Donde "m.cm" seria materia.Codigo materia, es decir que 1 seria Laboratorio de Programacion. Pero haciendo eso me tira todo los nombres de TODOS los alumnos y no respeta la reestriccion.

Se entiende?
  #4 (permalink)  
Antiguo 07/08/2014, 09:39
 
Fecha de Ingreso: agosto-2013
Ubicación: Guatemala
Mensajes: 137
Antigüedad: 10 años, 8 meses
Puntos: 4
Respuesta: Consulta base de datos

Tu consulta está mal hecha porque le estas diciendo que te enseñe todos los resultados y no una union por medio de claves primarias como lo hace LEFT JOIN
tu consulta debería ser así
Código MySQL:
Ver original
  1. SELECT pr.anio, pr.cm, ma.nombre, al.legajo, al.nombre
  2. FROM previa pr
  3. LEFT JOIN alumno al ON pr.legajo=al.legajo
  4. LEFT JOIN materia ma ON pr.cm=ma.cm
  5. WHERE pr.cm=1 ORDER BY pr.cm ASC
Porque lo único que te interesa saber es lo que está en la tabla previa
  #5 (permalink)  
Antiguo 02/09/2014, 09:35
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Consulta base de datos

Claro lo que pasa es que no recuerdo haber aprendido LEFT JOIN... Con esas lineas que tiré yo tendría que poder hacerlo, no hay forma?
  #6 (permalink)  
Antiguo 02/09/2014, 09:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta base de datos

Cita:
lo que pasa es que no recuerdo haber aprendido LEFT JOIN
Que no 0te lo hayan enseñado, no es óbice para que investigues por tu cuenta.... Además, es imposible aprender INNER JOIN y no conocer LEFT y RIGHT. Están en la misma página del manual, y se describen al mismo tiempo.
Cita:
Con esas lineas que tiré yo tendría que poder hacerlo, no hay forma?
El problema es tu planteo inicial:
Cita:
Si yo quisiera LISTAR todos los alumnos que deben materias previas. Como hago esa RELACION entre las tablas y luego lo listo
Es decir, en la tercera tabla están aquellos que deben previas o las previas que deben. Pero como no todos los alumnos deben ni previas ni las mismas, entonces la query requiere, para dar el listado completo, que se use LEFT JOIN... forzosamente.
Si sólo quieres los que efectivamente tienen previas, sin los demás, entonces es un INNER JOIN.

Todo depende de lo que quieras obtener.

Postea un ejemplo de datos de las tablas y también un ejemplo del resultado que según tu deberías obtener para usar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 23/09/2014, 22:42
Avatar de marco96_af  
Fecha de Ingreso: mayo-2014
Ubicación: Buenos Aires, Argentina
Mensajes: 23
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Consulta base de datos

Primero gracias por responder, pero INNER JOIN, LEFT JOIN? Recién empiezo con base de datos y eso no lo vi..

Te doy un ejemplo de uno que ya funciona:

Listar todos los alumnos que tienen materia previas de primer año

Cita:
select distinct a.nombre , a.apellido
from alumno a, materia m, previa p
where a.legajo=p.legajo and (p.anio=1);
Donde: Selecciono
Cita:
a.nombre , a.apellido
(Es decir, alumno.nombre , alumno.apellido)
Luego digo que "a" es alumno...
Cita:
alumno a, materia m, previa p.
Y por ultimo la condicion where:
Cita:
a.legajo
(Alumno.legajo)
Cita:
=p.legajo
(previa.legajo. En otras palabras.. donde el legajo por ejemplo sea "1", ese alumno tendrá previa..) Y luego
Cita:
p.anio=1
(previa.anio=1... Donde el año de la previa sea igual a 1) De esta forma sencilla funciona, y me tienen que funcionar los otros

Creo que me exprese bien

Etiquetas: tabla
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 19:19.