Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment joindre deux tables dans MySQL

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 gratuitement

Jointure 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> &nbsp;&nbsp;Name</td>

		<td> &nbsp;&nbsp;Email</td>

		<td> &nbsp;&nbsp;Message</td>

		<!-- <td> &nbsp;&nbsp;Message</td>

		<td> &nbsp;&nbsp;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>" . &nbsp;'null'. "</td>";} else { echo "<td>" . &nbsp;$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ées

Q. 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