Uso de combinaciones de MySQl

En los capítulos anteriores, obtuvimos datos de una tabla a la vez. Esto es suficientemente bueno para tomas simples, pero en la mayoría de los usos de MySQL en el mundo real, a menudo necesitará obtener datos de varias tablas en una sola consulta.

Puede utilizar varias tablas en su única consulta SQL. El acto de unirse en MySQL se refiere a romper dos o más tablas en una sola tabla.

Puede utilizar JOINS en las sentencias SELECT, UPDATE y DELETE para unir las tablas MySQL. También veremos un ejemplo de LEFT JOIN que es diferente del simple MySQL JOIN.

Uso de combinaciones en el símbolo del sistema

Supongamos que tenemos dos mesas tcount_tbl y tutorials_tbl, en TUTORIALES. Ahora eche un vistazo a los ejemplos que se dan a continuación:

Ejemplo

Los siguientes ejemplos:

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * FROM tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
|      mahran     |       20       |     
|      mahnaz     |      NULL      |        
|       Jen       |      NULL      |          
|      Gill       |       20       |          
|    John Poul    |        1       |      
|     Sanjay      |        1       |        
+-----------------+----------------+
6 rows in set (0.01 sec)
mysql> SELECT * from tutorials_tbl;
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      1      |  Learn PHP     |     John Poul   |    2007-05-24   |   
|      2      |  Learn MySQL   |      Abdul S    |    2007-05-24   |   
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-06   |   
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.00 sec)
mysql>

Ahora podemos escribir una consulta SQL para unir estas dos tablas. Esta consulta seleccionará todos los autores de la tabla.tutorials_tbl y recogerá el número de tutoriales correspondiente del tcount_tbl.

mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a, tcount_tbl b
   -> WHERE a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |        1       |
|      3      |     Sanjay      |        1       |
+-------------+-----------------+----------------+
2 rows in set (0.01 sec)
mysql>

Uso de combinaciones en un script PHP

Puede utilizar cualquiera de las consultas SQL mencionadas anteriormente en el script PHP. Solo necesita pasar la consulta SQL a la función PHPmysql_query() y luego obtendrá los resultados de la forma habitual.

Ejemplo

El siguiente ejemplo:

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
      FROM tutorials_tbl a, tcount_tbl b
      WHERE a.tutorial_author = b.tutorial_author';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Author:{$row['tutorial_author']}  <br> ".
         "Count: {$row['tutorial_count']} <br> ".
         "Tutorial ID: {$row['tutorial_id']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQL LEFT JOIN

Una combinación izquierda de MySQL es diferente de una combinación simple. Un LEFT JOIN de MySQL le da una consideración adicional a la tabla que está a la izquierda.

Si hago un LEFT JOIN, Obtengo todos los registros que coinciden de la misma manera y ADEMÁS obtengo un registro adicional por cada registro no coincidente en la tabla izquierda de la combinación: así me aseguro (en mi ejemplo) que cada AUTOR recibe una mención.

Ejemplo

Pruebe el siguiente ejemplo para comprender la LEFT JOIN.

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
   -> FROM tutorials_tbl a LEFT JOIN tcount_tbl b
   -> ON a.tutorial_author = b.tutorial_author;
+-------------+-----------------+----------------+
| tutorial_id | tutorial_author | tutorial_count |
+-------------+-----------------+----------------+
|      1      |    John Poul    |       1        |
|      2      |     Abdul S     |      NULL      |
|      3      |     Sanjay      |       1        |
+-------------+-----------------+----------------+
3 rows in set (0.02 sec)

Necesitaría practicar más para familiarizarse con JOINS. Este es un concepto un poco complejo en MySQL / SQL y se volverá más claro al hacer ejemplos reales.