0

Tengo 2 tablas, 1 de alumnos y otra llamada alumno_matricula

necesito hacer un select de la tabla alumnos, obtener su id y con esa id entrar a la tabla de alumno_matricula y mostrar el numero de matricula

la tabla alumnos es asi:

id string,
nombres string,
direccion string,
edad int

y la tabla alumno_matricula es asi

alumno_id,
numero_matricula,
fecha_matricula

necesito mostrar el nombre del alumno y su numero de matricula

por ejemplo

David 2832-1234

Intente hacerla con un select from join pero no me resulta de este modo

SELECT e.nombres, e.id 
FROM alumnos e JOIN alumno_matricula e2 SELECT e2.numero_matricula WHERE e.id = e2.alumno_id
BetaM
  • 30,571
  • 7
  • 32
  • 50
Fabian
  • 175
  • 1
  • 8

4 Answers4

4

Hola puedes usar esto

SELECT e.nombres, e.id, e2.numero_matricula
    FROM alumnos e INNER JOIN alumno_matricula e2 ON e.id = e2.alumno_id

Con esto igualas los id y puedes acceder a el valor de la matricula, en caso de que el alumno no tenga matricula podrias usar algo como esto para mostar el valor en NULL

SELECT e.nombres, e.id, e2.numero_matricula 
FROM alumnos e LEFT JOIN alumno_matricula e2 ON e.id = e2.alumno_id

Y si quisieras mostrar algo en especifico en vez de null podria ser

SELECT e.nombres, e.id, COALESCE(e2.numero_matricula ,'Sin matricula')
FROM alumnos e LEFT JOIN alumno_matricula e2 ON e.id = e2.alumno_id
Edgar Vazquez
  • 1,548
  • 1
  • 3
  • 11
1

Usa un INNER JOIN de este modo:

SELECT alumnos.nombres, alumno_matricula.numero_matricula
FROM alumnos
JOIN alumno_matricula ON alumnos.id = alumno_matriculas.alumno_id;

Explicación

  • Donde para obtener los datos de las tablas, lo haces a través de las columnas que las relacionan que son: llave primaria (alumnos.id) y llave foránea(matricula_alumnos.alumno_id)
  • No necesitas hacer 2 veces un SELECT para obtener los datos, dentro del mismo lo logras solo escribiendo tablaNombre1.columna, tablaNombre2.columna
  • INNER JOIN o solo JOIN lo que hace es obtener los datos de ambas tablas, donde el registro de la izquierda (id) coincida con el registro de la derecha (alumno_id) y descartando a los demás

Noto en tus comentarios que deseas también aquellos que no tienen matrícula; entonces deberás usar LEFT JOIN para que el resultado considere tanto aquellos registros que coinciden en ambas tablas como aquellos registros del lado izquierdo(alumnos) que no tienen vínculo con la tabla de la derecha (matricula_alumnos)

Fuentes de consulta

BetaM
  • 30,571
  • 7
  • 32
  • 50
1

Tienes que indicar que tipo de JOIN es, existen 3 tipos, LEFT JOIN, INNER JOIN, RIGHT JOIN para entender cada tipo te recomiendo buscar información acerca de cada uno que hay en internet, Un ejemplo. En este caso se requiere INNER JOIN, se debe indicar la condición del JOIN con ON, y el select de ambas tablas va en un solo SELECT, no en dos, por lo que tu consulta quedaría

SELECT e.nombres, e.id e2.numero_matricula
FROM alumnos e 
INNER JOIN alumno_matricula e2 ON e.id = e2.alumno_id
Sr1871
  • 4,737
  • 1
  • 8
  • 16
0

Normalmente a mi se me complican un poco los JOIN, por eso suelo usar instrucciones planas... Algo así debería funcionar 100%

   SELECT nombres, id, numero_matricula FROM alumnos, alumno_matricula WHERE alumnos.id= alumno_matricula.alumno_id 
  • Lo que haces es un `JOIN` implícito y aunque es funcional, me parece no forma parte del estandard SQL – BetaM Jul 22 '19 at 19:15
  • Tienes bastante razón .... aquí una explicación amplia del tema ... https://es.stackoverflow.com/questions/52530/cual-es-la-diferencia-entre-joins-impl%c3%adcitos-y-expl%c3%adcitos – user135782 Jul 22 '19 at 20:02