sql >> Base de Datos >  >> RDS >> Mysql

Cómo unir dos tablas en MySQL

En la entrega anterior de esta serie de MySQL, demostré cómo puede obtener datos utilizando cláusulas de MySQL. En esta parte, aprenderemos sobre la función Joins en MySQL, por qué se usan y cómo usarlas. Comencemos.

¿Cómo puedo vincular dos tablas en MySQL

MySQL Joins le permite acceder a datos de varias tablas. Un MySQL Join se realiza cada vez que se unen dos o más tablas en una instrucción SQL. MySQL Joins incluye:MySQL Inner Join (también conocido como Simple Join), MySQL Left Outer Join (también llamado Left Join, devuelve registros coincidentes de la tabla de la izquierda), Right Join (esto devuelve los registros coincidentes de la tabla izquierda). tabla de la derecha) y la combinación completa (esto devuelve registros coincidentes de todas las tablas). Con MySQL JOIN, podrá unir más de dos mesas.

En MySQL, la unión interna es la unión predeterminada. En palabras clave dadas en ese punto, elige todas las filas de ambas tablas, siempre que haya una coordenada entre las columnas de ambas tablas.

A diferencia de SQL, MySQL no considera la combinación externa como un tipo de combinación independiente. Para obtener los mismos resultados que la unión externa, debe unir la unión externa izquierda y la unión externa derecha.

Cuántas tablas se pueden unir en MySQL

De acuerdo con la documentación oficial de MySQL 8.0, la cantidad máxima de tablas en una declaración JOIN es 61. Sin embargo, tenga en cuenta que las declaraciones JOIN pueden requerir una gran cantidad de recursos del servidor a medida que aumenta la cantidad de tablas. Si este es el caso de su consulta, le recomiendo dividirla en varias consultas para reducir la carga en el servidor.

Comencemos agregando una nueva tabla en nuestra base de datos que contendrá el mensaje junto con la identificación del usuario que envió este mensaje, lo llamaremos mensajes. El esquema de nuestra tabla es:

CREAR TABLA `mensajes` (

 `id` int(11) NO NULO,

 `mensaje` varchar(255) NO NULO

)

Usaremos la misma función selectdata que hemos creado en nuestro crud.php expediente. Ahora comencemos uniendo estas dos tablas. También puedes llenar tu tabla para que puedas practicarlo.


Deje de perder el tiempo en los servidores

Cloudways maneja la administración del servidor por usted para que pueda concentrarse en crear excelentes aplicaciones y mantener contentos a sus clientes.

Empezar gratis

Unión interna

Inner Join une la tabla de tal manera que solo muestra los resultados que coinciden con la condición dada y oculta otros. La estructura de las consultas de Inner Join son:

SELECCIONE nombre(s) de columna

DE la tabla 1

INNER JOIN table2

ON table1.column_name=table2.column_name;

La combinación interna y la combinación simple son iguales. También puede escribir su consulta de esta manera:

SELECCIONE nombre(s) de columna

DE la tabla 1

ÚNETE a la mesa2

ON table1.column_name=table2.column_name;

Ahora busquemos el Nombre y el mensaje de nuestra base de datos usando Inner join. La consulta será así

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
INNER JOIN messages 
ON myguests.id = messages.id";

El CONCAT La función se usa para unir dos columnas de cadenas en MySQL. Ahora abra su index.php que hemos creado previamente y copie el siguiente código en él.

<table>

	<tr>

		<td> &nbsp;&nbsp;Name</td>

		<td> &nbsp;&nbsp;Email</td>

		<td> &nbsp;&nbsp;Message</td>

		<!-- <td> &nbsp;&nbsp;Message</td>

		<td> &nbsp;&nbsp;Date</td>!-->

	</tr>

<?php

include 'crud.php';

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
		From myguests 
		INNER JOIN messages 
		ON myguests.id = messages.id";

$result = selectdata($sql);

	if($result != "zero")

	{

		while($row = $result->fetch_assoc())

		{

			echo "<tr>";

			echo "<td>" . $row['name'] . "</td>";

			echo "<td>" . $row['email'] . "</td>";

			if($row['message'] === null){echo "<td>" . &nbsp;'null'. "</td>";} else { echo "<td>" . &nbsp;$row['message']. "</td>"; } ;

			echo "</tr>";

		}

	}

	else

		{

			echo $result;

	}

?>

</table>

?>

Cuando ejecute esta página en su servidor de alojamiento web PHP, su resultado se verá así:

Como puede ver claramente, ha devuelto solo aquellos resultados que coinciden con user_id y donde mensajes no es nulo.

UNIÓN DERECHA

RIGHT JOIN une las dos tablas de tal manera que devuelve todo el valor de la derecha y el valor coincidente de las tablas de la izquierda y también devuelve un valor nulo en la tabla de la izquierda cuando no se encuentra ninguna coincidencia. La estructura para RIGHT JOIN es:

SELECCIONE nombre(s) de columna

DE la tabla 1

JUNTA DERECHA table2

ON table1.column_name=table2.column_name;

Ahora busquemos el Nombre y el mensaje de nuestra base de datos creando mensajes en nuestra mesa derecha y myguests en nuestra tabla izquierda.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
RIGHT JOIN messages 
ON messages.id = myguests.id";

Ahora abra index.php y reemplace $sql Consulta con lo anterior. Cuando lo ejecute, su resultado será:

Si echas un vistazo a mensajes verá algunas ID que no coincidirán con ninguna ID de usuario, por eso esta consulta devuelve un valor nulo en la columna de nombre y correo electrónico donde no encontrará ninguna coincidencia en la columna izquierda.

ÚNETE A LA IZQUIERDA

LEFT Joins une las dos tablas de tal manera que devuelve todo el valor de la izquierda y el valor coincidente de las tablas de la derecha y también devuelve un valor nulo en la tabla de la derecha cuando no se encuentra ninguna coincidencia. La estructura para LEFT JOIN es:

SELECCIONE nombre(s) de columna

DE la tabla 1

LEFT JOIN table2

ON table1.column_name=table2.column_name;

Ahora busquemos el Nombre y el mensaje de nuestra base de datos haciendo mensajes en nuestra mesa derecha y mis invitados nuestra mesa izquierda.

$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message 
From myguests 
LEFT JOIN messages 
ON messages.id = myguests.id";

Ahora abra index.php y consulte en lugar de $sql con lo anterior. Cuando lo ejecute, su resultado será:

Si echas un vistazo a mensajes encontrará algunas ID que no coincidirán con ninguna ID de usuario, por eso esta consulta devuelve un valor nulo en la columna Mensaje donde no encontrará ninguna coincidencia en la columna derecha.

UNIÓN

UNION en MySQL se usa para unir múltiples columnas de diferentes tablas en una sola columna. La estructura de la consulta UNION para seleccionar valores únicos es:

SELECCIONE column_name(s) FROM table1

UNIÓN

SELECCIONE column_name(s) FROM table2;

Y para seleccionar valores repetidos de columnas es:

SELECCIONE column_name(s) FROM table1

UNIR A TODOS

SELECCIONE column_name(s) FROM table2;

Ahora busquemos los ID de nuestras tablas.

$sql = "SELECT id FROM myguests 
UNION 
SELECT id FROM messages";

Ahora abra index.php y reemplace $sql Consulta con lo anterior. Cuando lo ejecute, su resultado será:

La consulta nos ha proporcionado todos los ID únicos que se encuentran en ambas tablas.

Cross JOIN o producto cartesiano

Este tipo de JOIN devuelve el producto cartesiano de filas de las tablas en Join. Devolverá una tabla que consta de registros que combinan cada fila de la primera tabla con cada fila de la segunda tabla.

La sintaxis cruzada de JOIN es,

SELECT column-name-list

from table-name1

CROSS JOIN

table-name2;

ÚNETE a ti mismo

Un self JOIN es un join normal, pero la tabla se une consigo misma.

SELECT column_name(s)

FROM table1 T1, table1 T2

WHERE condition;

UNIÓN EXTERNA COMPLETA

La palabra clave FULL OUTER JOIN devuelve todos los registros cuando hay una coincidencia en los registros de la tabla izquierda (tabla 1) o derecha (tabla 2).

Nota:¡FULL OUTER JOIN puede devolver conjuntos de resultados muy grandes!

SELECT column_name(s)

FROM table1

FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;

Unirse a varias mesas

En los blogs anteriores, aprendió cómo unir dos tablas usando diferentes consultas de combinación SQL. Pero si está trabajando en una aplicación grande, es decir, construyendo una tienda de comercio electrónico y creando varias tablas en ella, como clientes, pedidos y productos, definitivamente puede surgir la complejidad de unir tablas. Para resolver esto, debe obtener todos los productos pedidos por clientes específicos. El esquema es el mismo, así que no lo declararé aquí. Veamos la consulta:

SELECT * FROM table1

LEFT JOIN table2

ON table2.id = table1.id

LEFT JOIN table3

ON table3.id = table1.id

Primero unimos la tabla 1 y la tabla 2 que generan una tabla temporal con datos combinados de la tabla 1 y la tabla 2, que en ese momento se une a la tabla 3. Esta ecuación se puede extender a más de 3 tablas a N tablas, solo necesita asegurarse de que la consulta SQL debe tener N-1 declaración de unión en el arreglo para unir N tablas.

La consulta anterior le permitirá hacer coincidir las filas de la tabla 1 (en cualquier caso) con las filas de otras dos tablas. El uso de LEFT JOIN le permite unir table2 y table3 con table1 (no solo table2 con table1 y table3 con table2).
También puede agregar condiciones como WHERE, AND y ORDERBY

SELECT * FROM table1

LEFT JOIN table2

   ON table2.id = table1.id

LEFT JOIN table3

   ON table3.id = table2.id

WHERE month = 'numberHere'

   AND (table2.email IS NOT NULL OR table3.email IS NOT NULL)

ORDER BY submitdate DESC

Conclusión:

En este tutorial, aprendimos sobre las uniones que se usan mucho en bases de datos relacionales. Las uniones no solo se usan para dos mesas y puede unir más de dos mesas usando la misma técnica. En la octava y última entrega de esta serie de MySQL, hablaré sobre cómo usar expresiones regulares (REGEX) para obtener y clasificar datos en MySQL. Para eso, suscríbase a nuestro boletín de noticias del blog y también puede suscribirse a nuestra pila PHP administrada y comenzar a probar estos tutoriales en nuestros servidores optimizados para PHP.

Preguntas frecuentes

P. ¿Cómo puedo unir dos mesas?

Respuesta: La unión de dos tablas en SQL se puede realizar de cuatro formas principales:unión interna (devuelve filas con columnas coincidentes), unión izquierda (TODOS los registros de la tabla de la izquierda y registros coincidentes de la tabla de la derecha), unión derecha (TODOS los registros de la tabla de la derecha). y registros coincidentes en la tabla de la izquierda) y Unión (elimina los duplicados).

P. ¿Qué comando SQL puedes usar para unir dos tablas?

Respuesta: Se pueden unir dos tablas usando la instrucción INNER JOIN que devuelve registros coincidentes de ambas tablas.

P. ¿Cómo puedo unir dos tablas en SQL sin uniones?

Respuesta: Puede usar la siguiente declaración para unir tablas sin usar realmente la declaración JOIN

SELECT *

FROM TableA a, TableB b