Tradicionalmente, extrae datos de dos o más tablas usando un WHERE
cláusula en una consulta. Pero en un sistema de base de datos relacional (RDBMS), esto se puede lograr usando un solo SELECT
consulta. Este es el verdadero poder de los sistemas de bases de datos relacionales. En esta guía, aprenderá sobre SQL Joins, una forma poderosa de comparar y seleccionar filas y tablas.
¿Qué es un SQL Join?
En SQL, un join
La cláusula amplía la capacidad de comparar y seleccionar filas de tablas. Utiliza un proceso algebraico de combinar filas de dos o más tablas en función de una columna relacionada en esas tablas. Según la definición de SQL estándar ANSI, hay cinco tipos de uniones:uniones cruzadas , uniones internas , Uniones izquierdas (externas) , Uniones derechas (externas) y Combinaciones completas (externas) . Estas uniones se implementan en todos los sistemas de bases de datos relacionales y se tratan en las secciones a continuación.
Nota Las uniones se pueden realizar en cualquier número de tablas en una consulta determinada. Para mayor brevedad y claridad, esta guía analiza las uniones aplicadas a dos tablas.
Esta guía utiliza dos tablas, Employees
y Address
, respectivamente, para demostrar las uniones SQL. Cada una de estas tablas contiene las siguientes definiciones de columna y datos:
-
Tabla de empleados
EmpleadoId Nombre del empleado 1 Juan 2 María 3 Roberto -
Tabla de direcciones
Id Estado 1 Nueva York 2 Nueva Jersey 3 Idaho 4 Hawái
Nota A menos que se indique lo contrario, todos los comandos de esta guía funcionan bien tanto en MySQL y PostgreSQL bases de datos.
Combinaciones cruzadas de SQL
También conocida como Unión cartesiana , las uniones cruzadas ocurren cuando especifica varias tablas como fuente para su SELECT
lista de columnas En este caso, omite el WHERE
Expresión de unión de cláusula para hacer coincidir las filas. El conjunto de resultados contiene una fila para cada combinación de filas entre las tablas. En un escenario de dos tablas, cada fila de una tabla se empareja con cada fila de la otra tabla. El producto resultante se conoce como Producto cartesiano de las dos mesas. La sintaxis de Cross Join es la siguiente:
(# Rows in Table A) TIMES (# of Rows in Table B)
NotaEn la teoría de conjuntos, el producto cartesiano es una operación de multiplicación que genera todos los pares ordenados de los conjuntos dados. Por ejemplo, considere establecer
A
con elementos{a,b}
y establecerB
con elementos{1,2,3}
. El producto cartesiano deA
yB
se denota porAxB
y el resultado es el siguiente:AxB ={(a,1), (a,2), (a,3), (b,1), (b,2), (b,3)}
La sintaxis SQL para Cross Join es la siguiente:
SELECT ColumnName_1,
ColumnName_2,
ColumnName_N
FROM [Table_1]
CROSS JOIN [Table_2]
De la sintaxis anterior, Column_1
, Column_2
, Column_N
representan las columnas en una tabla, y el CROSS JOIN
cláusula sirve para combinar las dos tablas, Table_1
y Table_2
. De las tablas de ejemplo anteriores, si necesita realizar una unión cruzada en Employees
y Address
tablas, use el siguiente código SQL:
SELECT EmployeeName, State
FROM Employees
CROSS JOIN Address
El resultado del código SQL anterior se parece al siguiente:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| John | New Jersey |
| John | Idaho |
| John | Hawaii |
| John | New York |
| Mary | New York |
| Mary | New Jersey |
| Mary | Idaho |
| Mary | Hawaii |
| Robert | New York |
| Robert | New Jersey |
| Robert | Idaho |
| Robert | Hawaii |
+------------+----------------+
Unión interna de SQL
Una combinación interna devuelve filas que tienen valores coincidentes en ambas tablas. Si no hay registros coincidentes, no se devuelven filas en los resultados.
La sintaxis SQL para Inner Join es la siguiente:
SELECT ColumnName_1,
ColumnName_2,
ColumnName_N
FROM Table_1
INNER JOIN Table_2
ON Table_1.key = Table_2.key;
En el ejemplo anterior, key
es la clave respectiva de las tablas. Si necesita realizar una unión interna en Employees
y Address
tablas, use el siguiente código SQL:
SELECT EmployeeName, State
FROM Employees
INNER JOIN Address
ON Employees.EmployeeId = Address.Id
El resultado del código SQL anterior se parece al siguiente:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
+------------+----------------+
Unión izquierda (externa) de SQL
Una combinación izquierda devuelve un conjunto completo de filas de la tabla de la izquierda junto con las filas coincidentes de la tabla de la derecha. Si no hay registros coincidentes, entonces NULL
los valores se devuelven de la tabla de la derecha.
Nota Algunas implementaciones de bases de datos relacionales usan las palabras clave "Unión externa izquierda", en lugar de "Unión izquierda", pero son funcionalmente equivalentes.
La sintaxis SQL para Left Join es la siguiente:
SELECT * FROM Table_1
LEFT JOIN Table_2
ON Table_1.key = Table_2.key
En el ejemplo anterior, key
es la clave respectiva de las tablas. Si necesita realizar una combinación izquierda en Employees
y Address
tablas, use el siguiente código SQL:
SELECT EmployeeName, State
FROM Employees
LEFT JOIN Address
ON Employees.EmployeeId = Address.Id
El resultado del código SQL anterior es el siguiente:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| Robert | NULL |
+------------+----------------+
Unión SQL derecha (externa)
Un Right Join devuelve un conjunto completo de filas de la tabla de la derecha y las filas coincidentes de la tabla de la izquierda. Esto también se conoce como unión externa derecha. Si no hay registros coincidentes, entonces NULL
los valores se devuelven desde la tabla de la derecha, para las filas afectadas en la tabla de la izquierda.
Nota Algunas implementaciones de bases de datos relacionales usan las palabras clave "Unión externa derecha", en lugar de "Unión derecha", pero son funcionalmente equivalentes.
La sintaxis SQL para una combinación derecha es la siguiente:
SELECT * FROM Table_1
RIGHT JOIN Table_2
ON Table_1.key = Table_2.key
Desde el código anterior, key
es la clave respectiva de las tablas. Si necesita realizar una combinación correcta en Employees
y Address
tablas, use el siguiente código SQL:
SELECT EmployeeName, State
FROM Employees
RIGHT JOIN Address
ON Employees.EmployeeId = Address.Id
El resultado del código SQL anterior es el siguiente:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| NULL | Idaho |
| NULL | Hawaii |
+------------+----------------+
Unión completa (externa) de SQL
Una combinación completa devuelve todas las filas de la tabla de la izquierda, todas las filas de la tabla de la derecha. Esto también se conoce como Full Outer Join. Una combinación completa también devuelve todos los registros coincidentes de ambas tablas cuando estén disponibles. Si no hay registros coincidentes, entonces NULL
los valores se devuelven de la tabla de la izquierda. También devuelve NULL
valores de la tabla de la derecha.
Nota Algunas implementaciones de bases de datos relacionales usan las palabras clave "Full Outer Join", en lugar de "Full Join", pero son funcionalmente equivalentes.
La sintaxis SQL para Full Join es la siguiente:
SELECT * FROM Table1
FULL JOIN Table2
ON Table1.key = Table2.key
En el código anterior, key
es la clave respectiva de las tablas. Si necesita realizar una unión completa en Employees
y Address
tablas, use el siguiente código SQL:
SELECT EmployeeName, State
FROM Employees
FULL JOIN Address
ON Employees.EmployeeId = Address.Id
El resultado del código SQL anterior es el siguiente:
+--------------+--------------+
| EmployeeName | State |
+---------------+-------------+
| John | New York |
| Mary | New Jersey |
| Robert | NULL |
| NULL | Idaho |
| NULL | Hawaii |
+------------+----------------+
Nota Durante los cálculos de unión, si compara los datos de la tabla conNULL
valores, no coinciden entre sí. Por lo tanto,NULL
los valores solo se devuelven como parte de los resultados de Join y se ignoran durante los cálculos de Join.
Comparación de rendimiento de uniones SQL
Teniendo en cuenta las tablas de ejemplo anteriores, la combinación interna suele ser la más rápida de las cinco cláusulas de combinación en términos de rendimiento de la base de datos. Left Join y Right Join son los siguientes más rápidos según el tamaño de las dos tablas. La combinación completa suele ser más lenta que la combinación izquierda o la combinación derecha. Cross Join, que depende del producto cartesiano de las dos tablas, suele ser el más lento en términos de rendimiento de la base de datos. La jerarquía de rendimiento especificada puede diferir según la longitud de la columna de la tabla, el tipo de datos de la columna y las definiciones clave.
Conclusión
El uso de SQL Joins amplía la funcionalidad de poder comparar filas de tablas, sobre WHERE
tradicional Consultas de cláusulas. Las uniones son un mecanismo valioso para aplicar la lógica algebraica a dos o más tablas.