Dans l'épisode précédent de cette série MySQL, j'ai montré comment vous pouvez récupérer des données à l'aide de clauses MySQL. Dans cette partie, nous découvrirons la fonction Joins dans MySQL, pourquoi elles sont utilisées et comment les utiliser. Commençons.
Comment puis-je lier deux tables dans MySQL
Les jointures MySQL vous permettent d'accéder aux données de plusieurs tables. Une jointure MySQL est effectuée chaque fois que deux tables ou plus sont jointes dans une instruction SQL. Les jointures MySQL incluent :la jointure interne MySQL (également appelée jointure simple), la jointure externe gauche MySQL (également appelée jointure gauche, elle renvoie les enregistrements correspondants de la table de gauche), la jointure droite (elle renvoie les enregistrements correspondants de la table de gauche). table de droite) et la jointure complète (ceci renvoie les enregistrements correspondants de toutes les tables). En utilisant MySQL JOINs, vous pourrez joindre plus de deux tables.
Dans MySQL, la jointure interne est la jointure par défaut. Sur des mots-clés donnés à ce stade, il choisit toutes les lignes des deux tables, tant qu'il y a une coordonnée entre les colonnes des deux tables.
Contrairement à SQL, MySQL ne considère pas la jointure externe comme un type de jointure distinct. Pour obtenir les mêmes résultats que la jointure externe, vous devez joindre la jointure externe gauche et la jointure externe droite.
Combien de tables peuvent être jointes dans MySQL
Selon la documentation officielle de MySQL 8.0, le nombre maximum de tables dans une instruction JOIN est de 61. Cependant, notez que les instructions JOIN peuvent nécessiter beaucoup de ressources serveur à mesure que le nombre de tables augmente. Si tel est le cas avec votre requête, je vous recommande fortement de la diviser en plusieurs requêtes pour réduire la charge sur le serveur.
Commençons par ajouter une nouvelle table dans notre base de données qui contiendra le message ainsi que l'identifiant de l'utilisateur qui a envoyé ce message, nous l'appellerons messages. Le schéma de notre table est :
CRÉER TABLE `messages` (
`id` int(11) PAS NULL,
`message` varchar(255) NON NULL
)
Nous utiliserons la même fonction selectdata que nous avons créé dans notre crud.php dossier. Commençons maintenant par joindre ces deux tables. Vous pouvez également remplir votre tableau pour vous entraîner.
Arrêtez de perdre du temps sur les serveurs
Cloudways gère la gestion des serveurs pour vous afin que vous puissiez vous concentrer sur la création d'applications géniales et sur la satisfaction de vos clients.
Commencez gratuitementJointure interne
Inner Join joint la table de telle manière qu'elle n'affiche que les résultats qui correspondent à la condition donnée et masque les autres. La structure des requêtes Inner Join est :
SELECT column_name(s)
DEPUIS table1
Tableau INNER JOIN2
ON table1.column_name=table2.column_name ;
La jointure interne et la jointure simple sont identiques. Vous pouvez également écrire votre requête comme ceci :
SELECT column_name(s)
DEPUIS table1
JOINDRE table2
ON table1.column_name=table2.column_name ;
Maintenant, récupérons le nom et le message de notre base de données en utilisant la jointure interne. La requête ressemblera à ceci
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests INNER JOIN messages ON myguests.id = messages.id";
Le CONCAT La fonction est utilisée pour joindre deux colonnes de chaînes dans MySQL. Ouvrez maintenant votre index.php que nous avons créé précédemment, copiez-y le code suivant.
<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> ?>
Lorsque vous exécutez cette page sur votre serveur d'hébergement Web PHP, votre résultat ressemblera à ceci :
Comme vous pouvez le voir clairement, il n'a renvoyé que les résultats qui correspondent à user_id et où messages n'est pas nul.
JOINTURE À DROITE
RIGHT JOIN joint les deux tables de telle manière qu'il renvoie toute la valeur de la droite et la valeur correspondante des tables de gauche et renvoie également null sur la table de gauche lorsqu'aucune correspondance n'est trouvée. La structure pour RIGHT JOIN est :
SELECT column_name(s)
DEPUIS table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name ;
Maintenant, récupérons le nom et le message de notre base de données en créant des messages dans notre table de droite et myguests dans notre tableau de gauche.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests RIGHT JOIN messages ON messages.id = myguests.id";
Ouvrez maintenant index.php et remplacez $sql requête avec ce qui précède. Lorsque vous l'exécuterez, votre résultat sera :
Si vous jetez un œil aux messages table, vous verrez des identifiants qui ne correspondent à aucun identifiant d'utilisateur, c'est pourquoi cette requête renvoie null dans les colonnes de nom et d'e-mail où elle ne trouvera aucune correspondance dans la colonne de gauche.
JOINTURE GAUCHE
LEFT Joins joint les deux tables de telle manière qu'elle renvoie toute la valeur de la gauche et la valeur correspondante des tables de droite et renvoie également null sur la table de droite lorsqu'aucune correspondance n'est trouvée. La structure de LEFT JOIN est :
SELECT column_name(s)
DEPUIS table1
LEFT JOIN table2
ON table1.column_name=table2.column_name ;
Maintenant, récupérons le nom et le message de notre base de données en créant des messages dans notre table de droite et mes invités notre table de gauche.
$sql = "SELECT CONCAT(myguests.firstname,' ',myguests.lastname) AS name, myguests.email, messages.message From myguests LEFT JOIN messages ON messages.id = myguests.id";
Ouvrez maintenant index.php et interrogez à la place de $sql avec ce qui précède. Lorsque vous l'exécuterez, votre résultat sera :
Si vous jetez un œil aux messages table, vous trouverez des ID qui ne correspondront à aucun ID utilisateur, c'est pourquoi cette requête renvoie null dans la colonne Message où elle ne trouvera aucune correspondance dans la colonne de droite.
UNION
UNION dans MySQL est utilisé pour réunir plusieurs colonnes de différentes tables en une seule colonne. La structure de la requête UNION pour sélectionner des valeurs uniques est :
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2 ;
Et pour sélectionner des valeurs répétées dans les colonnes, c'est :
SELECT column_name(s) FROM table1
UNION TOUS
SELECT column_name(s) FROM table2 ;
Maintenant, récupérons les identifiants de nos tables.
$sql = "SELECT id FROM myguests UNION SELECT id FROM messages";
Ouvrez maintenant index.php et remplacez $sql requête avec ce qui précède. Lorsque vous l'exécuterez, votre résultat sera :
La requête nous a récupéré tous les identifiants uniques qui se trouvent dans les deux tables.
Cross JOIN ou produit cartésien
Ce type de JOIN renvoie le produit cartésien des lignes des tables dans Join. Il renverra une table composée d'enregistrements qui combinent chaque ligne de la première table avec chaque ligne de la seconde table.
La syntaxe Cross JOIN est,
SELECT column-name-list from table-name1 CROSS JOIN table-name2;
Auto-JOIN
Un self JOIN est une jointure normale, mais la table est jointe à elle-même.
SELECT column_name(s) FROM table1 T1, table1 T2 WHERE condition;
JOINTURE EXTERNE COMPLÈTE
Le mot-clé FULL OUTER JOIN renvoie tous les enregistrements lorsqu'il y a une correspondance dans les enregistrements de table de gauche (table1) ou de droite (table2).
Remarque :FULL OUTER JOIN peut potentiellement renvoyer des ensembles de résultats très volumineux !
SELECT column_name(s) FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
Rejoindre plusieurs tables
Dans les blogs précédents, vous avez appris à joindre deux tables à l'aide de différentes requêtes de jointure SQL. Mais si vous travaillez sur une grande application, c'est-à-dire la création d'un magasin de commerce électronique et la création de plusieurs tables telles que les clients, les commandes et les produits, la complexité de la jonction des tables peut certainement survenir. Pour résoudre ce problème, vous devez obtenir tous les produits commandés par des clients spécifiques. Le schéma est le même, donc je ne le déclare pas ici. Voyons la requête :
SELECT * FROM table1 LEFT JOIN table2 ON table2.id = table1.id LEFT JOIN table3 ON table3.id = table1.id
Nous joignons d'abord la table 1 et la table 2 qui fournissent une table temporaire avec des données combinées de la table 1 et de la table 2, qui est à ce stade jointe à la table 3. Cette équation peut être étendue à plus de 3 tables à N tables, il vous suffit de vous assurer que la requête SQL doit avoir N-1 instruction de jointure pour organiser la jointure de N tables.
La requête ci-dessus vous permettra de faire correspondre les lignes de table1 (dans tous les cas) aux lignes des deux autres tables. L'utilisation de LEFT JOIN vous permet de joindre table2 et table3 avec table1 (pas seulement table2 avec table1 et table3 avec table2).
Vous pouvez également ajouter des conditions telles que WHERE, AND et 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
Conclusion :
Dans ce tutoriel, nous avons découvert les jointures qui sont beaucoup utilisées dans les bases de données relationnelles. Les jointures ne sont pas seulement utilisées pour deux tables uniquement et vous pouvez joindre plus de deux tables en utilisant la même technique. Dans le huitième et dernier volet de cette série MySQL, j'expliquerai comment utiliser les expressions régulières (REGEX) pour récupérer et trier des données dans MySQL. Pour cela, abonnez-vous à la newsletter de notre blog et vous pouvez également vous inscrire à notre pile PHP gérée et commencer à tester ces tutoriels sur nos serveurs optimisés PHP.
Questions fréquemment poséesQ. Comment joindre deux tables ?
Réponse : La jointure de deux tables en SQL peut être effectuée de quatre manières principales :Inner Join (renvoie les lignes avec les colonnes correspondantes), Left Join (TOUS les enregistrements de la table de gauche et les enregistrements correspondants de la table de droite), Right Join (TOUS les enregistrements de la table de droite et enregistrements correspondants dans le tableau de gauche) et Union (supprime les doublons).
Q. Quelle commande SQL pouvez-vous utiliser pour joindre deux tables ?
Réponse : Deux tables peuvent être jointes à l'aide de l'instruction INNER JOIN qui renvoie les enregistrements correspondants des deux tables.
Q. Comment joindre deux tables en SQL sans jointure ?
Réponse : Vous pouvez utiliser l'instruction suivante pour joindre des tables sans utiliser l'instruction JOIN
SELECT * FROM TableA a, TableB b