MySQL Unir: Interior, Exterior, Izquierda, Derecha, Cruz

⚡ Resumen inteligente

MySQL Las operaciones JOIN combinan filas de dos o más tablas relacionadas en un único conjunto de resultados. Este recurso explica las operaciones CROSS, INNER, LEFT, RIGHT y OUTER JOIN con consultas ejecutables, datos de ejemplo y tablas de salida claras para facilitar el trabajo práctico con bases de datos.

  • 🔗 Principio básico: Una operación JOIN compara filas de diferentes tablas utilizando relaciones de clave primaria y clave externa.
  • Por qué importa: Una sola consulta JOIN utiliza la indexación y reduce los viajes de ida y vuelta al servidor en comparación con varias consultas separadas.
  • ✖️ Comportamiento de Cross JOIN: Cada fila de la primera tabla se corresponde con cada fila de la segunda, produciendo un producto cartesiano.
  • 🎯 Comportamiento interno de JOIN: Solo se devuelven las filas que cumplen la condición de coincidencia en ambas tablas.
  • ↔️ Comportamiento de JOIN externo: Las operaciones LEFT y RIGHT JOIN también devuelven filas sin coincidencia y rellenan las columnas que faltan con NULL.
  • 🧩 ENCENDIDO versus USANDO: USING requiere nombres de columna idénticos, mientras que ON admite cualquier expresión coincidente.

MySQL Se une

¿Qué son las UNIONES?

Las uniones ayudan a recuperar datos de dos o más tablas de bases de datos.

Las tablas están relacionadas entre sí mediante claves primarias y externas.

Nota: JOIN es el tema que más malentiende quienes aprenden SQL. Para simplificar y facilitar la comprensión, utilizaremos una nueva base de datos para practicar con un ejemplo. Como se muestra a continuación

Todos los ejemplos que aparecen a continuación utilizan estas dos tablas. id_película columna en miembros apunta a la id columna en películas — la relación en la que coincide cada JOIN.

miembros

id nombre de pila apellido id_película
1 Adam Smith 1
2 Ravi Kumar 2
3 Susan Davidson 5
4 Jenny Adrianna 8
5 Lee Pong 10

películas

id título categoría
1 ASSASSIN'S CREED: BRAZAS Animaciones
2 Acero real (2012) Animaciones
3 Alvin y las Ardillas Animaciones
4 Las aventuras de Tintin Animaciones
5 Seguro (2012) Acción:
6 Casa segura (2012) Acción:
7 GIA 18+
8 Fecha límite 2009 18+
9 La imagen sucia 18+
10 marley y yo Romance

¿Por qué deberíamos usar JOINS?

Antes de analizar cada tipo de JOIN, conviene saber por qué se prefiere un JOIN a ejecutar varias consultas.

Ahora puede pensar por qué usamos JOIN cuando podemos realizar la misma tarea ejecutando consultas. Especialmente si tiene algo de experiencia en programación de bases de datos, sabe que podemos ejecutar consultas una por una y utilizar la salida de cada una en consultas sucesivas. Por supuesto, eso es posible. Pero al utilizar JOIN, puede realizar el trabajo utilizando solo una consulta con cualquier parámetro de búsqueda. Por otro lado MySQL puede lograr un mejor rendimiento con JOIN ya que puede usar Indexación. El simple uso de una única consulta JOIN en lugar de ejecutar varias consultas reduce la sobrecarga del servidor. Usar múltiples consultas en su lugar genera más transferencias de datos entre MySQL y aplicaciones (software). Además, también requiere más manipulaciones de datos al final de la aplicación.

Está claro que podemos lograr mejores MySQL y el rendimiento de las aplicaciones mediante el uso de JOIN.

Tipos de JOIN

MySQL Admite varios tipos de JOIN, cada uno de los cuales responde a una pregunta diferente sobre las mismas dos tablas. La tabla siguiente los compara; a continuación, se muestra cada tipo con una consulta y su resultado.

Tipo de unión Las filas regresaron ¿Resultados nulos? Uso típico
UNIÓN CRUZADA Cada fila de la tabla A emparejada con cada fila de la tabla B. No Generando todas las combinaciones posibles
INNER JOIN Solo las filas que coincidan con la condición en ambas tablas. No Miembros que realmente alquilaron una película
LEFT JOIN Todas las filas de la tabla de la izquierda, más los partidos de la derecha. Sí, en el lado derecho. Todas las películas, incluso aquellas que nunca se han alquilado.
UNIRSE A LA DERECHA Todas las filas de la tabla de la derecha, más los partidos de la izquierda. Sí, en el lado izquierdo. Todas las películas, incluso sin ningún miembro asociado

UNIÓN CRUZADA

Cross JOIN es la forma más simple de JOIN que hace coincidir cada fila de una tabla de base de datos con todas las filas de otra.

En otras palabras, nos da combinaciones de cada fila de la primera tabla con todos los registros de la segunda tabla.

Supongamos que queremos comparar todos los registros de miembros con todos los registros de películas, podemos usar el script que se muestra a continuación para obtener los resultados deseados.

Tipos de uniones

SELECT * FROM `movies` CROSS JOIN `members`

Ejecutando el script anterior en MySQL banco de trabajo nos da los siguientes resultados.

id title id first_name last_name movie_id
1 ASSASSIN'S CREED: EMBERS Animations 1 Adam Smith 1
1 ASSASSIN'S CREED: EMBERS Animations 2 Ravi Kumar 2
1 ASSASSIN'S CREED: EMBERS Animations 3 Susan Davidson 5
1 ASSASSIN'S CREED: EMBERS Animations 4 Jenny Adrianna 8
1 ASSASSIN'S CREED: EMBERS Animations 6 Lee Pong 10
2 Real Steel(2012) Animations 1 Adam Smith 1
2 Real Steel(2012) Animations 2 Ravi Kumar 2
2 Real Steel(2012) Animations 3 Susan Davidson 5
2 Real Steel(2012) Animations 4 Jenny Adrianna 8
2 Real Steel(2012) Animations 6 Lee Pong 10
3 Alvin and the Chipmunks Animations 1 Adam Smith 1
3 Alvin and the Chipmunks Animations 2 Ravi Kumar 2
3 Alvin and the Chipmunks Animations 3 Susan Davidson 5
3 Alvin and the Chipmunks Animations 4 Jenny Adrianna 8
3 Alvin and the Chipmunks Animations 6 Lee Pong 10
4 The Adventures of Tin Tin Animations 1 Adam Smith 1
4 The Adventures of Tin Tin Animations 2 Ravi Kumar 2
4 The Adventures of Tin Tin Animations 3 Susan Davidson 5
4 The Adventures of Tin Tin Animations 4 Jenny Adrianna 8
4 The Adventures of Tin Tin Animations 6 Lee Pong 10
5 Safe (2012) Action 1 Adam Smith 1
5 Safe (2012) Action 2 Ravi Kumar 2
5 Safe (2012) Action 3 Susan Davidson 5
5 Safe (2012) Action 4 Jenny Adrianna 8
5 Safe (2012) Action 6 Lee Pong 10
6 Safe House(2012) Action 1 Adam Smith 1
6 Safe House(2012) Action 2 Ravi Kumar 2
6 Safe House(2012) Action 3 Susan Davidson 5
6 Safe House(2012) Action 4 Jenny Adrianna 8
6 Safe House(2012) Action 6 Lee Pong 10
7 GIA 18+ 1 Adam Smith 1
7 GIA 18+ 2 Ravi Kumar 2
7 GIA 18+ 3 Susan Davidson 5
7 GIA 18+ 4 Jenny Adrianna 8
7 GIA 18+ 6 Lee Pong 10
8 Deadline(2009) 18+ 1 Adam Smith 1
8 Deadline(2009) 18+ 2 Ravi Kumar 2
8 Deadline(2009) 18+ 3 Susan Davidson 5
8 Deadline(2009) 18+ 4 Jenny Adrianna 8
8 Deadline(2009) 18+ 6 Lee Pong 10
9 The Dirty Picture 18+ 1 Adam Smith 1
9 The Dirty Picture 18+ 2 Ravi Kumar 2
9 The Dirty Picture 18+ 3 Susan Davidson 5
9 The Dirty Picture 18+ 4 Jenny Adrianna 8
9 The Dirty Picture 18+ 6 Lee Pong 10
10 Marley and me Romance 1 Adam Smith 1
10 Marley and me Romance 2 Ravi Kumar 2
10 Marley and me Romance 3 Susan Davidson 5
10 Marley and me Romance 4 Jenny Adrianna 8
10 Marley and me Romance 6 Lee Pong 10

INNER JOIN

Una combinación cruzada (CROSS JOIN) devuelve todos los emparejamientos posibles, lo cual rara vez es lo que se busca. Una combinación interna (INNER JOIN) reduce el resultado a los pares que realmente están relacionados.

El JOIN interno se utiliza para devolver filas de ambas tablas que satisfacen la condición dada.

Supongamos que quieres obtener una lista de los miembros que han alquilado películas, junto con los títulos de las películas que han alquilado. Para ello, puedes usar una unión interna (INNER JOIN), que devuelve las filas de ambas tablas que cumplen con las condiciones dadas.

INNER JOIN

SELECT members.`first_name` , members.`last_name` , movies.`title`
FROM members ,movies
WHERE movies.`id` = members.`movie_id`

Al ejecutar el script anterior, dé

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me

Tenga en cuenta que el script de resultados anterior también se puede escribir de la siguiente manera para lograr los mismos resultados.

SELECT A.`first_name` , A.`last_name` , B.`title`
FROM `members` AS A
INNER JOIN `movies` AS B
ON B.`id` = A.`movie_id`

UNIONES externas

Una unión interna (INNER JOIN) descarta silenciosamente las filas que no tienen pareja. Cuando esas filas sin pareja son importantes, una unión externa (OUTER JOIN) es la opción correcta.

MySQL Las uniones externas (Outer JOIN) devuelven todos los registros coincidentes de ambas tablas.

Puede detectar registros que no coinciden en la tabla unida. Vuelve NULL valores para los registros de la tabla unida si no se encuentra ninguna coincidencia.

¿Suena confuso? Veamos un ejemplo:

LEFT JOIN

Supongamos que ahora desea obtener los títulos de todas las películas junto con los nombres de los miembros que las alquilaron. Está claro que algunas películas no han sido alquiladas por nadie. Simplemente podemos usar LEFT JOIN con el propósito.

UNIONES externas

LEFT JOIN devuelve todas las filas de la tabla de la izquierda incluso si no se han encontrado filas coincidentes en la tabla de la derecha. Cuando no se han encontrado coincidencias en la tabla de la derecha, se devuelve NULL.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
ON B.`movie_id` = A.`id`

Ejecutando el script anterior en MySQL El entorno de trabajo proporciona lo siguiente: Como puede ver en el resultado devuelto, que se muestra a continuación, para las películas que no se alquilaron, los campos de nombre de miembro tienen valores NULL. Esto significa que no se encontró ningún miembro coincidente en la tabla de miembros para esa película en particular.

title first_name last_name
ASSASSIN'S CREED: EMBERS Adam Smith
Real Steel(2012) Ravi Kumar
Safe (2012) Susan Davidson
Deadline(2009) Jenny Adrianna
Marley and me Lee Pong
Alvin and the Chipmunks NULL NULL
The Adventures of Tin Tin NULL NULL
Safe House(2012) NULL NULL
GIA NULL NULL
The Dirty Picture NULL NULL
Note: Null is returned for non-matching rows on right

UNIRSE A LA DERECHA

UNIRSE DERECHA es obviamente lo opuesto a UNIRSE IZQUIERDA. RIGHT JOIN devuelve todas las columnas de la tabla de la derecha incluso si no se han encontrado filas coincidentes en la tabla de la izquierda. Cuando no se han encontrado coincidencias en la tabla de la izquierda, se devuelve NULL.

En nuestro ejemplo, supongamos que necesita obtener los nombres de los miembros y las películas que alquilaron. Ahora tenemos un nuevo miembro que aún no ha alquilado ninguna película.

UNIRSE A LA DERECHA

SELECT A.`first_name` , A.`last_name`, B.`title`
FROM `members` AS A
RIGHT JOIN `movies` AS B
ON B.`id` = A.`movie_id`

Ejecutando el script anterior en MySQL El banco de trabajo arroja los siguientes resultados.

first_name last_name title
Adam Smith ASSASSIN'S CREED: EMBERS
Ravi Kumar Real Steel(2012)
Susan Davidson Safe (2012)
Jenny Adrianna Deadline(2009)
Lee Pong Marley and me
NULL NULL Alvin and the Chipmunks
NULL NULL The Adventures of Tin Tin
NULL NULL Safe House(2012)
NULL NULL GIA
NULL NULL The Dirty Picture
Note: Null is returned for non-matching rows on left

Cláusulas “ON” y “USING”

Hasta ahora, todas las consultas han coincidido con filas que contienen una cláusula ON. MySQL Ofrece una alternativa más corta cuando las columnas coincidentes comparten el mismo nombre.

En los ejemplos de consulta JOIN anteriores, hemos utilizado la cláusula ON para hacer coincidir los registros entre las tablas.

La cláusula USING también se puede utilizar para el mismo propósito. la diferencia con USO es lo debe tener nombres idénticos para las columnas coincidentes en ambas tablas.

En la tabla "películas" hasta ahora usamos su clave principal con el nombre "id". Nos referimos a lo mismo en la tabla "miembros" con el nombre "movie_id".

Cambiemos el nombre del campo "id" de las tablas "películas" para que tenga el nombre "movie_id". Hacemos esto para tener nombres de campos coincidentes idénticos.

ALTER TABLE `movies` CHANGE `id` `movie_id` INT( 11 ) NOT NULL AUTO_INCREMENT;

A continuación, usemos USING con el ejemplo de UNIÓN IZQUIERDA anterior.

SELECT A.`title` , B.`first_name` , B.`last_name`
FROM `movies` AS A
LEFT JOIN `members` AS B
USING ( `movie_id` )

Aparte de usar ON y USANDO con JOINs puedes usar muchos otros MySQL cláusulas como GRUPO POR, DÓNDE e incluso funciona como SUM, AVG, etc.

Preguntas Frecuentes

Una operación JOIN combina columnas de dos tablas una al lado de la otra, haciendo coincidir las filas mediante una clave. Una operación UNION apila verticalmente los resultados de dos consultas y requiere que las columnas tengan el mismo número y tipo.

Sí. Encadena cláusulas JOIN adicionales, cada una con su propia condición ON. MySQL une las dos primeras tablas, luego une ese resultado intermedio a la siguiente tabla, y así sucesivamente.

Una operación SELF JOIN une una tabla consigo misma utilizando dos alias. Compara filas dentro de una misma tabla, por ejemplo, comparando la fila de un empleado con la fila del gerente de ese empleado.

Sí. Asistentes de IA integrados en editores como MySQL Banco de trabajo Se pueden redactar consultas JOIN a partir de una solicitud en lenguaje natural. Siempre revise las condiciones ON generadas, ya que una clave incorrecta produce resultados erróneos que pasan desapercibidos.

En parte. Los asesores de IA sugieren índices y mejores órdenes de unión, lo que suele reducir el tiempo de ejecución. El optimizador sigue siendo quien elige el plan final, por lo que la correcta indexación de las claves de unión sigue siendo el factor más importante.

Resumir este post con: