Combinaciones internas - INNER JOIN
Las
combinaciones internas se realizan mediante la instrucción INNER JOIN.
Devuelven únicamente aquellos registros/filas que tienen valores idénticos en
los dos campos que se comparan para unir ambas tablas. Es decir aquellas que
tienen elementos en las dos tablas, identificados éstos por el campo de
relación.
La mejor
forma de verlo es con un diagrama de Venn que ilustre en qué parte de la
relación deben existir registros:
INNER-JOIN
En este caso
se devuelven los registros que tienen nexo de unión en ambas tablas.
Esto puede
ocasionar la desaparición del resultado de filas de alguna de las dos tablas,
por tener valores nulos, o por tener un valor que no exista en la otra tabla
entre los campos/columnas que se están comparando.
Su sintaxis es:
SELECT T1.Col1, T1.Col2, T1.Col3,
T2.Col7
FROM Tabla1 T1 INNER JOIN Tabla2 T2
ON T1.Col1 = T2.Col1
Por ejemplo
suponiendo tenemos las siguientes tablas (Carro, Carroceria)
IdCarro
|
NombreCarro
|
IdCarroceria
|
1
|
Hiunday i35
|
1
|
2
|
Chevrolet Spark GT
|
2
|
3
|
Mazda 3
|
2
|
4
|
Renault Stepway
|
3
|
5
|
Ford Explorer
|
NULL
|
6
|
Nissan Sentra
|
NULL
|
IdCarroceria
|
NombreCarroceria
|
1
|
Sedan
|
2
|
HastBack
|
3
|
Camioneta
|
4
|
Convertible
|
5
|
Limosina
|
6
|
Furgoneta
|
Al momento
de ejecutar la sgte Consulta con INNER JOIN:
SELECT T1. IdCarro, T1. NombreCarro,
T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro
T1
INNER JOIN Carroceria T2 ON T1. IdCarroceria=
T2. IdCarroceria
Se obtendrá
INNER JOIN
IdCarro
|
NombreCarro
|
IdCarroceria
|
IdCarroceria
|
NombreCarroceria
|
1
|
Hiunday i35
|
1
|
1
|
Sedan
|
2
|
Chevrolet Spark GT
|
2
|
2
|
HastBack
|
3
|
Mazda 3
|
2
|
2
|
HastBack
|
4
|
Renault Stepway
|
3
|
3
|
Camioneta
|
Combinaciones externas (OUTER JOIN)
Las combinaciones
externas se realizan mediante la instrucción OUTER JOIN. Como enseguida
veremos, devuelven todos los valores de la tabla que hemos puesto a la derecha,
los de la tabla que hemos puesto a la izquierda o los de ambas tablas según el
caso, devolviendo además valores nulos en las columnas de las tablas que no
tengan el valor existente en la otra tabla.
Es decir,
que nos permite seleccionar algunas filas de una tabla aunque éstas no tengan
correspondencia con las filas de la otra tabla con la que se combina. Ahora lo
veremos mejor en cada caso concreto, ilustrándolo con un diagrama para una
mejor comprensión.
La sintaxis
general de las combinaciones externas es:
FROM Tabla1 [LEFT/RIGHT/FULL]
[OUTER] JOIN Tabla2 ON Condiciones_Vinculos_Tablas
Como vemos
existen tres variantes de las combinaciones externas.
En todas
estas combinaciones externas el uso de la palabra OUTER es opcional. Si
utilizamos LEFT, RIGHT o FULL y la combinación de columnas, el sistema
sobreentiende que estamos haciendo una combinación externa.
Variante LEFT JOIN
Se obtienen
todas las filas de la tabla colocada a la izquierda, aunque no tengan
correspondencia en la tabla de la derecha.
Así, para
seleccionar todas las filas de la Tabla1, aunque no tengan correspondencia con
las filas de la Tabla2, suponiendo que se combinan por la columna Col1 de ambas
tablas escribiríamos:
SELECT T1.Col1, T1.Col2, T1.Col3,
T2.Col7
FROM Tabla1 T1 LEFT [OUTER] JOIN
Tabla2 T2 ON T1.Col1 = T2.Col1
Esto se
ilustra gráficamente de la siguiente manera:
Volviendo a
nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro,
T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro
T1
LEFT JOIN Carroceria T2 ON T1. IdCarroceria=
T2. IdCarroceria
Se obtendrá
IdCarro
|
NombreCarro
|
IdCarroceria
|
IdCarroceria
|
NombreCarroceria
|
1
|
Hiunday i35
|
1
|
1
|
Sedan
|
2
|
Chevrolet Spark GT
|
2
|
2
|
HastBack
|
3
|
Mazda 3
|
2
|
2
|
HastBack
|
4
|
Renault Stepway
|
3
|
3
|
Camioneta
|
5
|
Ford Explorer
|
NULL
|
NULL
|
NULL
|
6
|
Nissan Sentra
|
NULL
|
NULL
|
NULL
|
Variante RIGHT JOIN
Análogamente,
usando RIGHT JOIN se obtienen todas las filas de la tabla de la derecha, aunque
no tengan correspondencia en la tabla de la izquierda.
Así, para
seleccionar todas las filas de la Tabla2, aunque no tengan correspondencia con
las filas de la Tabla1 podemos utilizar la cláusula RIGHT:
SELECT T1.Col1, T1.Col2, T1.Col3,
T2.Col7
FROM Tabla1 T1 RIGHT [OUTER] JOIN
Tabla2 T2 ON T1.Col1 = T2.Col1
El diagrama
en este caso es complementario al anterior:
Volviendo a
nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro,
T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro
T1
RIGTH JOIN Carroceria T2 ON T1. IdCarroceria=
T2. IdCarroceria
Se obtendrá
IdCarro
|
NombreCarro
|
IdCarroceria
|
IdCarroceria
|
NombreCarroceria
|
1
|
Hiunday i35
|
1
|
1
|
Sedan
|
2
|
Chevrolet Spark GT
|
2
|
2
|
HastBack
|
3
|
Mazda 3
|
2
|
2
|
HastBack
|
4
|
Renault Stepway
|
3
|
3
|
Camioneta
|
NULL
|
NULL
|
NULL
|
4
|
Convertible
|
NULL
|
NULL
|
NULL
|
5
|
Limosina
|
NULL
|
NULL
|
NULL
|
6
|
Furgoneta
|
Variante
FULL JOIN
Se obtienen
todas las filas en ambas tablas, aunque no tengan correspondencia en la otra
tabla. Es decir, todos los registros de A y de B aunque no haya correspondencia
entre ellos, rellenando con nulos los campos que falten:
FULL-JOIN
Es
equivalente a obtener los registros comunes (con un INNER) y luego añadirle los
de la tabla A que no tienen correspondencia en la tabla B, con los campos de la
tabla vacíos, y los registros de la tabla B que no tienen correspondencia en la
tabla A, con los campos de la tabla A vacíos.
Su sintaxis es:
SELECT T1.Col1, T1.Col2, T1.Col3,
T2.Col7
FROM Tabla1 T1 FULL [OUTER] JOIN
Tabla2 T2 ON T1.Col1 = T2.Col1
Volviendo a
nuestro ejemplo al momento de ejecutar la sgte Consulta con LEFT JOIN:
SELECT T1. IdCarro,
T1. NombreCarro, T1. IdCarroceria, T2. IdCarroceria, T2. NombreCarroceria
FROM Carro
T1
RIGTH JOIN Carroceria T2 ON T1. IdCarroceria=
T2. IdCarroceria
Se obtendrá
IdCarro
|
NombreCarro
|
IdCarroceria
|
IdCarroceria
|
NombreCarroceria
|
1
|
Hiunday i35
|
1
|
1
|
Sedan
|
2
|
Chevrolet Spark GT
|
2
|
2
|
HastBack
|
3
|
Mazda 3
|
2
|
2
|
HastBack
|
4
|
Renault Stepway
|
3
|
3
|
Camioneta
|
5
|
Ford Explorer
|
NULL
|
NULL
|
NULL
|
6
|
Nissan Sentra
|
NULL
|
NULL
|
NULL
|
NULL
|
NULL
|
NULL
|
4
|
Convertible
|
NULL
|
NULL
|
NULL
|
5
|
Limosina
|
NULL
|
NULL
|
NULL
|
6
|
Furgoneta
|
No hay comentarios:
Publicar un comentario