SQL Joins, explicación
En el Lenguaje de Consultas Estructurado (SQL) existen varios tipos de JOINS. A continuación, se muestra una visualización gráfica.
Para realizar los ejemplos, partiremos de las siguientes tablas:
TABLA_A Id Valor ---- ---------- 1 EEUU 2 PORTUGAL 3 ITALIA 6 FRANCIA 7 POLONIA 5 ALEMANIA 4 RUSIA 10 CHINA TABLA_B Id Valor ---- ---------- 1 LUXEMBURGO 2 ITALIA 3 SUECIA 6 RUSIA 7 EMIRATOS ÁRABES 8 POLONIA 9 ESPAÑA 11 FRANCIA
Inner JOIN
SELECT A.Id AS A_Id, A.Valor AS A_Valor, B.Valor AS B_Valor, B.Id AS B_Id FROM TABLA_A A INNER JOIN TABLA_B B ON A.Id = B.Id
Resultado:
A_Id | A_Valor | B_VALOR | B_ID |
1 | EEUU | LUXEMBURGO | 1 |
2 | PORTUGAL | ITALIA | 2 |
3 | ITALIA | SUECIA | 3 |
6 | FRANCIA | RUSIA | 6 |
7 | ALEMANIA | EMIRATOS ÁRABES | 7 |
Left JOIN
SELECT A.id AS A_id, A.Valor AS A_Valor, B.Valor AS B_Valor, B.id AS B_id FROM TABLA_A A LEFT JOIN TABLA_B B ON A.id = B.id
Resultado:
A_Id | A_Valor | B_VALOR | B_ID |
1 | EEUU | LUXEMBURGO | 1 |
2 | PORTUGAL | ITALIA | 2 |
3 | ITALIA | SUECIA | 3 |
6 | FRANCIA | RUSIA | 6 |
7 | ALEMANIA | EMIRATOS ÁRABES | 7 |
5 | EEUU | Null | Null |
4 | RUSIA | Null | Null |
10 | CHINA | Null | Null |
Right JOIN
SELECT * FROM TABLA_A A RIGHT JOIN TABLA_B B ON A.Id = B.Id
Resultado:
Id | Valor | Id | Valor |
1 | EEUU | 1 | LUXEMBURGO |
2 | PORTUGAL | 2 | ITALIA |
3 | ITALIA | 3 | SUECIA |
6 | FRANCIA | 6 | RUSIA |
7 | ALEMANIA | 7 | EMIRATOS ÁRABES |
Null | Null | 8 | POLONIA |
Null | Null | 9 | ESPAÑA |
Null | Null | 11 | FRANCIA |
Outer JOIN
SELECT * FROM TABLA_A A FULL OUTER JOIN TABLA_B B ON A.Id = B.Id
Resultado:
Id | Valor | Id | Valor |
1 | EEUU | 1 | LUXEMBURGO |
2 | PORTUGAL | 2 | ITALIA |
3 | ITALIA | 3 | SUECIA |
6 | FRANCIA | 6 | RUSIA |
7 | ALEMANIA | 7 | EMIRATOS ÁRABES |
5 | EEUU | Null | Null |
4 | RUSIA | Null | Null |
10 | CHINA | Null | Null |
Null | Null | 8 | POLONIA |
Null | Null | 9 | ESPAÑA |
Null | Null | 11 | FRANCIA |
Left Excluding JOIN
SELECT * FROM TABLA_A A LEFT JOIN TABLA_B B ON A.Id = B.Id WHERE B.Id IS NULL
Resultado:
Id | Valor | Id | Valor |
5 | EEUU | Null | Null |
4 | RUSIA | Null | Null |
10 | CHINA | Null | Null |
Right Excluding JOIN
SELECT * FROM TABLA_A A RIGHT JOIN TABLA_B B ON A.Id = B.Id WHERE B.Id IS NULL
Resultado:
Id | Valor | Id | Valor |
Null | Null | 8 | POLONIA |
Null | Null | 9 | ESPAÑA |
Null | Null | 11 | FRANCIA |
Outer Excluding JOIN
SELECT * FROM TABLA_A A FULL OUTER JOIN TABLA_B B ON A.Id = B.Id WHERE A.Id IS NULL OR B.Id IS NULL