lunes, 30 de junio de 2008

Como fusionar datos de varias tablas : INNER JOIN

La sentencia JOIN en SQL permite combinar registros de dos o más tablas en una base de datos relacional. En el Lenguaje de Consultas Estructurado (SQL), hay tres tipo de JOIN: interno, externo, y cruzado.

En casos especiales una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.

Matemáticamente, JOIN es composición relacional, la operación fundamental en el álgebra relacional,y generalizando es una función de composición

Combinación interna (INNER JOIN) Con esta operación es calculado el producto cruzado de todos los registros; así cada registro en la tabla A es combinado con cada registro de la tabla B; pero sólo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifiquen. Este es el tipo de JOIN más utilizado por lo que es considerado el tipo de combinación predeterminado.

SQL:2003 especifica dos formas diferentes para expresar estas combinaciones. La primera, conocida como explícita usa la palabra JOIN, mientras que la segunda es implícita y usa ',' para separar las tablas a combinar en la sentencia FROM de la declaración SELECT. Entonces siempre se genera el producto cruzado del cual se seleccionan las combinaciones que cumplan lo que indica la sentencia WHERE.

Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL.

Como ejemplo, la siguiente consulta toma todos los registros de la tabla Empleado y encuentra todas las combinaciones en la tabla Departamento. La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas. Cuando no existe esta correspondencia entre algunas combinaciones, éstas no se muestran; es decir que si el número de departamento de un empleado no coincide con los números de departamento de la tabla Departamento, no se mostrará el empleado con su respectivo departamento en la tabla resultante.



Regresa una consulta combinando los datos de 2 tablas

A. INNER JOIN EXPLICITA


select [campo1,campo2]
from tabla1
inner join tabla2
on (tabla1.campo=tabla2.campo)
where tabla1.campox=dato1
and tabla1.campox=dato2


selecciona [campo1,campo2]
desde tabla1
ir dentro tabla2
en (tabla1.campo=tabla2.campo)
donde tabla1.campox=dato1
y tabla1.campox=dato2


B. INNER JOIN IMPLICITA

select tipo_trans, T010001a.codigo,T010001.cuenta
from T010001
inner join T010001a
on(T010001.codigo=T010001a.codigo)
where T010001.nremesa=72505
and T010001.nmensajeria=10
and T010001.cuenta='070123100125070001413'


A. Ejemplo de la sentencia INNER JOIN explícita:

SELECT *
FROM base
INNER JOIN bodega
ON base.IDbodega = bodega.IDbase
B. Ejemplo de la sentencia INNER JOIN implícita:

SELECT *
FROM empleado, departamento
WHERE empleado.IDdepartamento = departamento.IDDepartamento

Resultados:


El empleado Gaspar y el departamento de Marketing no son presentados en los resultados ya que ninguno de éstos tiene registros correspondientes en la otra tabla. No existe un departamento con número 36 ni existe un empleado con número de identificación 35


Enlaces:
http://es.wikipedia.org/wiki/JOIN#Combinaci.C3.B3n_interna_.28INNER_JOIN.29

No hay comentarios: