Principales respuestas
Consulta de un inner join relacionar tablas

Pregunta
-
tengo 3 tablas
personas
id_persona
nombre
alumnos
id_alumno
nombre
y carreras
id_carrera
nombre_carrera
necesito relacionarlas para que me muestre nombre del alumno que esta guardada en la tabla personas, relacionarla a la tabla carreras para que me muestre el nombre de la carrera a la que esta inscrito
me mostraria id del alumno nombre del alumno y nombre de la carrera
lunes, 12 de junio de 2017 21:17
Respuestas
-
Tienes un error en el modelo, la entidad Alumno no se relaciona de manera directa con la entidad Carrera sino mediante la entidad Matricula, entiendo que la entidad Personas es la generalización del alumno.
- Creación de objetos (acercamiento básico)
CREATE TABLE dbo.Personas (idPersona int PRIMARY KEY, Nombre varchar(100), Direccion varchar(100)); CREATE TABLE dbo.Alumnos (idAlumno int PRIMARY KEY, idPersona int REFERENCES dbo.Personas(idPersona), CodigoAlumno int); CREATE TABLE dbo.Carreras (idCarrera int PRIMARY KEY, Codigo varchar(10), Nombre varchar(100)); CREATE TABLE dbo.Matricula (idMatricula int PRIMARY KEY, idAlumno int REFERENCES dbo.Alumnos(idAlumno), idCarrera int REFERENCES dbo.Carreras(idCarrera)) GO
- Consulta de selección
SELECT p.Nombre AS NombreAlumno, c.Nombre AS NombreCarrera FROM Personas p INNER JOIN Alumnos a ON p.idPersona = a.idPersona INNER JOIN Matricula m ON a.idAlumno = m.idAlumno INNER JOIN Carreras c ON m.idCarrera = c.idCarrera GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator martes, 13 de junio de 2017 16:47
- Marcado como respuesta Joyce_ACModerator viernes, 16 de junio de 2017 15:33
lunes, 12 de junio de 2017 22:36
Todas las respuestas
-
Saludos.
Inicialmente pienso que con 2 tablas tienes, Alumnos y Carreras, ya si quieres una tercera tabla seria algo como tipo.
Usuario, Tipo y Carrera
Donde un usuario Puede tener un Tipo y una carrera puede tener multiples Usuarios.
Te quedaria algo como.
TblTipo:
- tipo_id int
- tipo_nombre varchar (100)
Datos tabla Tipo(1,docente)
Datos tabla Tipo(2,estudiante)
Datos tabla Tipo(3,coordinador)
TblUsuario:
- usuario_id int
- usuario_tipo_id int
- usuario_nombre varchar(200)
Datos tabla usuario(1,2,pepito perez)
Datos tabla usuario(2,1,humberto gonzalez)
Datos tabla usuario(3,3,camilo p.)TblCarrera:
- carrera_id int
- carrera_usuario_id
- carrera_nombre varchar(200)
- carrera_descripcion varchar(200)
Datos tabla carrera(1,1,ingenieria,ingenieria de sw por ciclos), solo seria un solo registro suponiendo que en la tabla carreras solo pueden estudiar las personas de tipo estudiante.
Para realizar la relacion de las tablas serial algo como
FOREIGN KEY (carrera_usuario_id) REFERENCES usuarios(usuario_id)
Espero sea de ayuda.
- Editado Jose Fdo Londoño lunes, 12 de junio de 2017 21:46
lunes, 12 de junio de 2017 21:41 -
Hola, para relacionar las tablas en una consulta según el modelo que te han propuesto deberías utilizar los oepradores join
Si la respuesta te fue útil vótala como tal,y si fue respuesta márcala.Solo dejo mis respuestas en el foro si son votadas o respuesta, de lo contrario por mantener el orden las borro.Saludos. Lima-Perú.
lunes, 12 de junio de 2017 22:06 -
select al.nombre,al.idalumno,al.nombre,ca.nombre from personas pe
inner join alumnos al on al.idpersona=pe.idpersona
inner join carreras ca on ca.idalumno=al.idalumno
lunes, 12 de junio de 2017 22:23 -
Hola Manuel120294:
Veo que se trata de una tarea, en la cual debes buscar la forma de relacionar las tablas, luego aparecen las reglas de negocio o los requermientos que se dice:
Un alumno es lo mismo que una persona (en tu sistema)?
Una persona con cuantos alumnos se relaciona?
Un alumno con cuantas materias se relaciona (un alumno - una materia), (un alumno - varias materias) (varios alumnos - varias materias)?
Normalmente para esta relación se da la ultima opción, osea muchos a muchos, lo que se conoce como relación debil, luego necesitas crear una tabla de relación que rompa la relación débil (MateriasPorAlumno o como la quieras llamar); en esta tabla van las claves primarias de las tablas materias y alumnos.
Luego para lo solicitado acá:
"me mostraria id del alumno nombre del alumno y nombre de la carrera"
Es cuestion de que hagas uso del INNER JOIN, osea algo como:
SELECT a.id ,a.nombre as [Nombre Alumno] ,c.nombre as [Nombre de la carrera] FROM Alumnos a INNER JOIN MateriasXAlumno ma on a.id=ma.idAlumno INNER JOIN Materias m ON ma.idMateria = m.id /* -- seccion de filtros segun necesidad de la tarea. WHERE a.nombre like '%%' OR a.nombre like 'Juan%' OR a.nombre like '%Juan' */
Saludos cordiales.
Camilo Villa
lunes, 12 de junio de 2017 22:27 -
Tienes un error en el modelo, la entidad Alumno no se relaciona de manera directa con la entidad Carrera sino mediante la entidad Matricula, entiendo que la entidad Personas es la generalización del alumno.
- Creación de objetos (acercamiento básico)
CREATE TABLE dbo.Personas (idPersona int PRIMARY KEY, Nombre varchar(100), Direccion varchar(100)); CREATE TABLE dbo.Alumnos (idAlumno int PRIMARY KEY, idPersona int REFERENCES dbo.Personas(idPersona), CodigoAlumno int); CREATE TABLE dbo.Carreras (idCarrera int PRIMARY KEY, Codigo varchar(10), Nombre varchar(100)); CREATE TABLE dbo.Matricula (idMatricula int PRIMARY KEY, idAlumno int REFERENCES dbo.Alumnos(idAlumno), idCarrera int REFERENCES dbo.Carreras(idCarrera)) GO
- Consulta de selección
SELECT p.Nombre AS NombreAlumno, c.Nombre AS NombreCarrera FROM Personas p INNER JOIN Alumnos a ON p.idPersona = a.idPersona INNER JOIN Matricula m ON a.idAlumno = m.idAlumno INNER JOIN Carreras c ON m.idCarrera = c.idCarrera GO
Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.- Propuesto como respuesta Joyce_ACModerator martes, 13 de junio de 2017 16:47
- Marcado como respuesta Joyce_ACModerator viernes, 16 de junio de 2017 15:33
lunes, 12 de junio de 2017 22:36