
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 gratisUnió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> Name</td> <td> Email</td> <td> Message</td> <!-- <td> Message</td> <td> 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>" . 'null'. "</td>";} else { echo "<td>" . $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 frecuentesP. ¿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