Ver Mensaje Individual
  #4 (permalink)  
Antiguo 16/03/2012, 10:34
veneno_yea
 
Fecha de Ingreso: marzo-2012
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Dudas sobre JOIN

http://dbasqlserver.wordpress.com/

Es senshishito,

primero debes saber que un JOIN es la cruza de informacion de dos tablas, y esta se hace a partir de un campo en comun con el cual se puedan vincular sus datos, por ejemplo:

Tienes la tabla Alumno
Tienes la tabla calificacion
Tienes la tabla Materia

y estan estructuradas asi:

Alumno
______
NumAlumno
Nombre
Semestre
**********
Materia
______
IDmateria
Salon
Profesor


Calificacion
_________
IDMateria
NumAlumno
Calificación




Ahora tomando en cuenta que te solicitan investigar los datos del alumno su nombre y su numero de alumno:

Pues facil no : select Numalumno, nombre from Alumno


Pero que pasa si te solicitan la calificacion y nombre del alumno x de la materia 1 y ademas el nombre del profesor de la materia


vamos por partes,
requieres la calificación de donde la obtines de la tabla calificación

entonces empiezas algo asi select Calificacion.calificación
(el punto es para distinguir de donde obtendras el campo cuando haces cruza de varias tablas podria encontrarse el nombre del campo en varias tablas en este caso no se da pero es una buena practica que siempre lo hagas asi para evitar ambiguedades)

ahora requieres el nombre del alumno este lo sacaras de la tabla alumno:
select Calificacion.calificación, Alumno.nombre

el ultimo campo que te solicitan es el nombre del profesor, este lo obtienes de la tabla materia entonces agregas

select Calificacion.calificación, Alumno.nombre, Materia.profesor


hasta ahi le hemos dicho al query que queremos campos requerimos que salgan,

ahora le tienes que decir de donde obtendras la informacion y como haras para que los campos de las distintas tablas se vinculen correctamente,

entonces viene el JOIN

select Calificacion.calificación, Alumno.nombre, Materia.profesor
FROM Calificacion JOIN Alumno ON Calificacion.NumAlumno = Alumno.NumAlumno
(basicamente lo que le estas indicando aqui es uneme tabla alumno y tabla calificacion (ON) donde los campos en comun son NumAlumno)

hasta solo has vinculado las tablas para obtener los datos de calificacion y alumno nos falta el profesor que esta en la tabla materia entonces a nuestro query le agregamos otro JOIN para poder enlanzar todos los datos y tenerlos como si estuvieran en una sola tabla


select Calificacion.calificación, Alumno.nombre, Materia.profesor
FROM Calificacion JOIN Alumno ON Calificacion.NumAlumno = Alumno.NumAlumno

JOIN Materia ON Materia.IDmateria = Calificacion.IDmateria
(con la palabra Join le indicamos que lo que ya traemos atras se unira tambien con la tabla Materia y
le indicamos que el campo IDmateria es el campo en comun con otra de las tablas que ya unimos que es Calificacion)

con esto ya tendriamos una resultado de consulta de la union de las tablas, pero nos hace falta un criterio de busqueda que se nos pidio, que se filtre por el nombre del alumno: x y de la materia 1

le agregamos un where al final de todo

where Alumno.nombre = 'x' and IDMateria = 1

y listooo ooo asi queda el queyr final:


select Calificacion.calificación, Alumno.nombre, Materia.profesor
FROM Calificacion JOIN Alumno ON Calificacion.NumAlumno = Alumno.NumAlumno
JOIN Materia ON Materia.IDmateria = Calificacion.IDmateria
where Alumno.nombre = 'x' and IDMateria = 1


JOIN ES LA PALABRA RESERVADA PARA HACER CRUZES la siguiente consulta es equivalente a la anterior lo unico que cambia es el INNER JOIN,

select Calificacion.calificación, Alumno.nombre, Materia.profesor
FROM Calificacion INNER JOIN Alumno ON Calificacion.NumAlumno = Alumno.NumAlumno
INNER JOIN Materia ON Materia.IDmateria = Calificacion.IDmateria
where Alumno.nombre = 'x' and IDMateria = 1



pero esa es otra historia y tiene que ver con performance y consultas mas complejas te aconsejo primero entender bien el sentido de un simple JOIN y despues cuando lo domines investiga las diferencias entre los distintos JOIN que existen


http://dbasqlserver.wordpress.com/