¿Cuál es la diferencia entre INNER JOIN
, LEFT JOIN
, RIGHT JOIN
y FULL JOIN
?
en MySQL?
Leer este artículo original en The Code Project te ayudará mucho: Representación visual de las uniones SQL.
También revisa este post: SQL SERVER - Mejor rendimiento - ¿Junta izquierda o NOT IN?.
Encuentre el original en: Diferencia entre JOIN y OUTER JOIN en MySQL.
INNER JOIN obtiene todos los registros que son comunes entre ambas tablas basándose en la cláusula ON suministrada.
LEFT JOIN obtiene todos los registros de la tabla vinculada IZQUIERDA pero si ha seleccionado algunas columnas de la tabla DERECHA, si no hay registros relacionados, estas columnas contendrán NULL.
RIGHT JOIN es como lo anterior pero obtiene todos los registros de la tabla DERECHA.
FULL JOIN obtiene todos los registros de ambas tablas y pone NULL en las columnas donde no existen registros relacionados en la tabla opuesta.
Una cláusula JOIN de SQL se utiliza para combinar filas de dos o más tablas basándose en un campo común entre ellas.
Hay diferentes tipos de uniones disponibles en SQL:
INNER JOIN: devuelve filas cuando hay una coincidencia en ambas tablas.
JUNTO IZQUIERDO: devuelve todas las filas de la tabla izquierda, incluso si no hay coincidencias en la tabla derecha.
JOIN DERECHO: devuelve todas las filas de la tabla derecha, incluso si no hay coincidencias en la tabla izquierda.
FULL JOIN: Combina los resultados de las uniones externas izquierda y derecha.
La tabla unida contendrá todos los registros de ambas tablas y rellenará con NULL las coincidencias que falten en cada lado.
SELF JOIN: se utiliza para unir una tabla a sí misma como si se tratara de dos tablas, renombrando temporalmente al menos una tabla en la sentencia SQL.
CARTESIAN JOIN: devuelve el producto cartesiano de los conjuntos de registros de las dos o más tablas unidas.
Podemos tomar cada una de las cuatro primeras uniones en Detalles :
Tenemos dos tablas con los siguientes valores.
TablaA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
**Tabla B
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
PERTENENCIA A LA RED
Nota :da la intersección de las dos tablas, es decir, las filas que tienen en común en la TablaA y la TablaB
Sintaxis
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Aplíquelo en nuestra tabla de ejemplo :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
El resultado será
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
JUNTO IZQUIERDO
Nota : dará todas las filas seleccionadas en la TablaA, más las filas comunes seleccionadas en la TablaB.
Sintaxis
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Aplíquelo en nuestra tabla de ejemplo :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Resultado
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
JUNTO DERECHO
Nota : dará todas las filas seleccionadas en la TablaB, además de las filas comunes seleccionadas en la TablaA.
Sintaxis
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Aplíquelo en nuestra tabla de ejemplo :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Resultado
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Nota :Se devolverán todos los valores seleccionados de ambas tablas.
Sintaxis
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Aplíquelo en nuestra tabla de ejemplo :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Resultado
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Interesante hecho
Para las uniones INNER el orden no importa
Para las uniones OUTER (LEFT, RIGHT o FULL), el orden es importante
Mejor ir a ver este Link le dará detalles interesantes sobre el orden de las uniones