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

Dudas sobre JOIN

Estas en el tema de Dudas sobre JOIN en el foro de SQL Server en Foros del Web. Buenas tardes, Alguien amable por favor que me pueda explicar los usos del JOIN. Se que me dirán pero hay muchos manuales, leelos... justamente he ...
  #1 (permalink)  
Antiguo 13/03/2012, 14:39
Avatar de Agrevio  
Fecha de Ingreso: septiembre-2008
Ubicación: Perú
Mensajes: 80
Antigüedad: 16 años, 2 meses
Puntos: 2
Dudas sobre JOIN

Buenas tardes,

Alguien amable por favor que me pueda explicar los usos del JOIN. Se que me dirán pero hay muchos manuales, leelos... justamente he leido algunos que al final me confunden... quisiera que lo hagan con un ejemplo en SQL sencillo.

Gracias mis hermanos

Saludos!!
  #2 (permalink)  
Antiguo 14/03/2012, 09:13
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Dudas sobre JOIN

Hola Agrevio:

Desde mi punto de vista, Salta Wikipedia tiene una de las mejores formas para mostrar el uso de los diferentes JOIN's...

http://es.wikipedia.org/wiki/Join

Tratando de expresar con palabras cómo funcionan los JOIN's sería más o menos así:

Código:
FROM TablaA INNER JOIN TablaB on TablaA.campo = TablaB.campo
Traer sólo los elementos de la TablaA que tengan uno o más registros en la TablaB, si no existen en ambas tablas, no se muestran

Código:
FROM TablaA LEFT JOIN TablaB on TablaA.campo = TablaB.campo
Traer TODOS los elementos de la TablaA unidos a su equivalente en la tabla B, asignando nulos a los registros que no existan en la Tabla B

Código:
FROM TablaA RIGTH JOIN TablaB on TablaA.campo = TablaB.campo
Traer TODOS los elementos de la TablaB unidos a su equivalente en la tabla A, asignando nulos a los registros que no existan en la Tabla B

Ahora bien, si continuas con dudas sería conveniente que nos digas qué es exactamente lo que no entiendes, para tratar de enfocarnos sobre ese problema en específico.

Saludos
Leo.
  #3 (permalink)  
Antiguo 16/03/2012, 10:32
Avatar de Agrevio  
Fecha de Ingreso: septiembre-2008
Ubicación: Perú
Mensajes: 80
Antigüedad: 16 años, 2 meses
Puntos: 2
Respuesta: Dudas sobre JOIN

Hola leonardo_josue

Gracias por responder hermano, me ayudaste mucho.

Saludos!!
  #4 (permalink)  
Antiguo 16/03/2012, 10:34
 
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/

Etiquetas: dudas, join, sql
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 13:45.