English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans les chapitres précédents, nous avons appris à lire des données dans une table, ce qui est relativement simple, mais dans les applications réelles, il est souvent nécessaire de lire des données à partir de multiples tables de données.
Dans ce chapitre, nous vous présenterons comment utiliser JOIN de MySQL pour interroger des données dans deux ou plusieurs tables.
Vous pouvez utiliser JOIN de MySQL dans les requêtes SELECT, UPDATE et DELETE pour joindre des requêtes de multiples tables.
JOIN est divisé en trois catégories principales selon les fonctionnalités :
INNER JOIN (jointure interne, ou jointure équivalente)Obtenir les enregistrements qui correspondent aux relations de champ des deux tables.
LEFT JOIN (jointure gauche) :Obtenir tous les enregistrements de la table de gauche, même si la table de droite n'a pas d'enregistrements correspondants.
RIGHT JOIN (jointure droite) : Au contraire de LEFT JOIN, il est utilisé pour obtenir tous les enregistrements de la table de droite, même si la table de gauche n'a pas d'enregistrements correspondants.
La structure de la base de données utilisée dans ce chapitre et le téléchargement des données :w3codebox-mysql-join-test.sql.
Nous nous trouvons dans w3La base de données codebox contient deux tables tcount_tbl et w3codebox_tbl. Les données des deux tables suivantes sont les suivantes :
Essayer les exemples suivants :
mysql> use w3codebox; Database changed mysql> SELECT * FROM tcount_tbl; +---------------+--------------+ | w3codebox_author | w3codebox_count | +---------------+--------------+ | Tutoriel de base du site Web | 10 | | oldtoolbag.com | 20 | | Google | 22 | +---------------+--------------+ 3 rows in set (0.01 sec) mysql> SELECT * from w3codebox_tbl; +-----------+---------------+---------------+-----------------+ | w3codebox_id | w3codebox_title | w3codebox_author | submission_date | +-----------+---------------+---------------+-----------------+ | 1 | Apprendre PHP | Tutoriel de base du site Web | 2017-04-12 | | 2 | Apprendre MySQL | Tutoriel de base du site Web | 2017-04-12 | | 3 | Apprendre Java | oldtoolbag.com | 2015-05-01 | | 4 | Apprendre Python | oldtoolbag.com | 2016-03-06 | | 5 | Apprendre C | FK | 2017-04-05 | +-----------+---------------+---------------+-----------------+ 5 rows in set (0.01 sec)
À présent, nous allons utiliser MySQLINNER JOIN (peut aussi omettre INNER et utiliser JOIN, l'effet est le même)pour joindre ces deux tables et lire w3tous les w dans la table codebox_tbl3codebox_author champ dans la table tcount_tbl correspondante w3codebox_count valeur :
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | Base de connaissances | 10 | | 2 | Base de connaissances | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | +-------------+-----------------+----------------+ 4 rows in set (0.00 sec)
L'instruction SQL ci-dessus est équivalente à :
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a, tcount_tbl b WHERE a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | Base de connaissances | 10 | | 2 | Base de connaissances | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | +-------------+-----------------+----------------+ 4 rows in set (0.01 sec)
MySQL left join est différent de join. MySQL LEFT JOIN lit toutes les données de la table de gauche, même si la table de droite n'a pas de données correspondantes.
Essayer l'exemple suivant pour w3codebox_tbl Pour la table de gauche,tcount_tbl Pour la table de droite, comprendre l'application de MySQL LEFT JOIN :
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a LEFT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | Base de connaissances | 10 | | 2 | Base de connaissances | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | | 5 | FK | NULL | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
Dans l'exemple ci-dessus, LEFT JOIN est utilisé, cette instruction lit la table de gauche w3tous les champs sélectionnés de codebox_tbl, même s'il n'y a pas de correspondance pour w dans la table tcount_tbl de droite3Valeur du champ codebox_author.
MySQL RIGHT JOIN lit toutes les données de la table de droite, même si la table de gauche n'a pas de données correspondantes.
Essayer l'exemple suivant pour w3codebox_tbl Pour la table de gauche,tcount_tbl Pour la table de droite, comprendre l'application de MySQL RIGHT JOIN :
mysql> SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a RIGHT JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author; +-------------+-----------------+----------------+ | a.w3codebox_id | a.w3codebox_author | b.w3codebox_count | +-------------+-----------------+----------------+ | 1 | Base de connaissances | 10 | | 2 | Base de connaissances | 10 | | 3 | oldtoolbag.com | 20 | NULL | | 4 | oldtoolbag.com | 20 | NULL | | NULL | NULL | NULL | 22 | +-------------+-----------------+----------------+ 5 rows in set (0.01 sec)
Dans l'exemple ci-dessus, RIGHT JOIN a été utilisé, cette instruction lit tous les champs sélectionnés de la table de données de droite tcount_tbl, même si dans la table de gauche w3Il n'y a pas de champ w correspondant dans codebox_tbl3Valeur du champ codebox_author.
Pour exécuter une requête SQL en PHP, vous pouvez utiliser la même requête SQL en tant que paramètre de la fonction mysqli_query().
Essayer l'exemple suivant :
<?php $dbhost = 'localhost'; // Adresse de l'hôte du serveur MySQL $dbuser = 'root'; // Nom d'utilisateur MySQL $dbpass = '123456'; // Nom d'utilisateur et mot de passe MySQL $conn = mysqli_connect($dbhost, $dbuser, $dbpass); if(! $conn) { die('Échec de la connexion: ' . mysqli_error($conn)); } // Définir l'encodage pour éviter les caractères chinois illégaux mysqli_query($conn, "set names utf8'); $sql = 'SELECT a.w3codebox_id, a.w3codebox_author, b.w3codebox_count FROM w3codebox_tbl a INNER JOIN tcount_tbl b ON a.w3codebox_author = b.w3codebox_author'; mysqli_select_db( $conn, 'w' }}3codebox' ); $retval = mysqli_query( $conn, $sql ); if(! $retval ) { die('Impossible de lire les données : ' . mysqli_error($conn)); } echo '<h2">Réseau de tutoriels de base MySQL JOIN Test<h2"> echo '<table border="1><tr><td> ID du tutoriel</td><td>Auteur</td><td>Nombre de connexions</td></tr>'; while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)) { echo "<tr><td> "{$row['w3codebox_id']}</td> ". "<td>{$row['w3codebox_author']} </td> ". "<td>{$row['w3codebox_count'} </td> ". "</tr>"; } echo '</table>'; mysqli_close($conn); ?>
Le résultat de la sortie est illustré comme suit :