Utilisation des jointures MySQl

Dans les chapitres précédents, nous obtenions des données d'une table à la fois. C'est assez bon pour les prises simples, mais dans la plupart des utilisations de MySQL dans le monde réel, vous aurez souvent besoin d'obtenir des données de plusieurs tables dans une seule requête.

Vous pouvez utiliser plusieurs tables dans votre seule requête SQL. L'acte de se joindre à MySQL fait référence à l'écrasement de deux ou plusieurs tables en une seule table.

Vous pouvez utiliser JOINS dans les instructions SELECT, UPDATE et DELETE pour joindre les tables MySQL. Nous verrons également un exemple du LEFT JOIN qui est différent du simple MySQL JOIN.

Utilisation des jointures à l'invite de commande

Supposons que nous ayons deux tables tcount_tbl et tutorials_tbl, dans TUTORIELS. Jetez maintenant un œil aux exemples ci-dessous -

Exemple

Les exemples suivants -

[email protected]# 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>

Nous pouvons maintenant écrire une requête SQL pour joindre ces deux tables. Cette requête sélectionnera tous les auteurs de la tabletutorials_tbl et récupérera le nombre correspondant de tutoriels du 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>

Utilisation des jointures dans un script PHP

Vous pouvez utiliser n'importe laquelle des requêtes SQL mentionnées ci-dessus dans le script PHP. Il vous suffit de passer la requête SQL dans la fonction PHPmysql_query() puis vous récupérerez les résultats de la manière habituelle.

Exemple

L'exemple suivant -

<?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);
?>

JOINT GAUCHE MySQL

Une jointure gauche MySQL est différente d'une simple jointure. Un MySQL LEFT JOIN donne une considération supplémentaire à la table qui est sur la gauche.

Si je fais un LEFT JOIN, J'obtiens tous les enregistrements qui correspondent de la même manière et en plus j'obtiens un enregistrement supplémentaire pour chaque enregistrement inégalé dans la table de gauche de la jointure: assurant ainsi (dans mon exemple) que chaque AUTEUR obtient une mention.

Exemple

Essayez l'exemple suivant pour comprendre LEFT JOIN.

[email protected]# 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)

Vous auriez besoin de faire plus de pratique pour vous familiariser avec JOINS. C'est un concept un peu complexe dans MySQL / SQL et deviendra plus clair en faisant de vrais exemples.