Jointure complète dans MySQL

Preet Sanghavi 28 mars 2022
Jointure complète dans MySQL

Ce tutoriel vise à explorer comment effectuer une jointure complète ou une jointure externe complète dans MySQL.

Une jointure externe complète est utilisée pour fusionner ou combiner toutes les données de deux tables distinctes. Par exemple, considérons que nous avons deux tables nommées student_id et student_name avec une colonne commune.

Nous pouvons fusionner ces deux tables entièrement dans MySQL en faisant correspondre les valeurs de la colonne commune avec un UNION, LEFT JOIN et RIGHT JOIN. Bien que ce processus semble compliqué à première vue, comprenons-le par étapes.

Avant de commencer, nous allons créer un jeu de données factice en créant une table student_details avec quelques lignes.

-- create the table student_details
CREATE TABLE student_details(
  stu_id int,
  stu_firstName varchar(255) DEFAULT NULL,
  stu_lastName varchar(255) DEFAULT NULL,
  primary key(stu_id)
);
-- insert rows to the table student_details
INSERT INTO student_details(stu_id,stu_firstName,stu_lastName) 
 VALUES(1,"Preet","Sanghavi"),
 (2,"Rich","John"),
 (3,"Veron","Brow"),
 (4,"Geo","Jos"),
 (5,"Hash","Shah"),
 (6,"Sachin","Parker"),
 (7,"David","Miller");

Pour afficher les entrées dans les données, nous utilisons le code suivant.

SELECT * FROM student_details;

Production :

stu_id	stu_firstName	stu_lastName
1	      Preet	        Sanghavi
2	      Rich	        John
3	      Veron	        Brow
4	      Geo	        Jos
5	      Hash	        Shah
6	      Sachin	    Parker
7	      David	        Miller

Nous avons besoin d’une autre table nommée student_marks contenant les notes de chaque étudiant correspondant au stu_id. Nous pouvons créer une telle table en utilisant la requête suivante.

-- create the table student_marks
CREATE TABLE student_marks(
  stu_id int,
  stu_marks int
);
-- insert rows to the table student_marks
INSERT INTO student_marks(stu_id,stu_marks) 
 VALUES(1,10),
 (2,20),
 (3,30),
 (4,7),
 (5,9),
 (6,35),
 (7,15);

Nous pouvons visualiser ce tableau à l’aide de la requête suivante.

SELECT * from student_marks;

Production :

stu_id  stu_marks
1		10
2		20
3		30
4		7
5		9
6		35
7		15

Visons à faire une jointure externe complète sur les tables student_details et student_marks avec stu_id comme colonne commune dans les deux tables.

Instruction FULL JOIN dans MySQL

La syntaxe de base de la technique FULL OUTER JOIN est la suivante.

SELECT * FROM table_1
LEFT JOIN table_2 ON table_1.id = table_2.id
UNION
SELECT * FROM table_1
RIGHT JOIN table_2 ON table_1.id = table_2.id

Comme on le voit dans la requête ci-dessus, nous visons à joindre les deux tables nommées table_1 et table_2 sur la base de la colonne id commune à l’aide d’une jonction gauche et d’une jonction droite.

Nous pouvons utiliser la requête suivante pour résoudre notre problème avec les tables student_details et student_marks.

-- Full Join using UNION
SELECT * FROM student_details
LEFT JOIN student_marks ON student_details.stu_id = student_marks.stu_id
UNION
SELECT * FROM student_details
RIGHT JOIN student_marks ON student_details.stu_id = student_marks.stu_id

Comme on le voit dans le code ci-dessus, nous fusionnons les deux tables en question sur la base de la colonne stu_id. Le résultat du code ci-dessus est le suivant.

stu_id	stu_firstName	stu_lastName  stu_id	stu_marks
1		Preet			Sanghavi		1		10
2		Rich			John			2		20
3		Veron			Brow			3		30
4		Geo				Jos				4		7
5		Hash			Shah			5		9
6		Sachin			Parker			6		35
7		David			Miller			7		15

Comme on le voit dans le bloc de sortie, stu_marks est correctement attribué à chaque étudiant en fonction de stu_id après la jointure externe complète.

Remarque : Nous pouvons éviter d’avoir la colonne en double stu_id en spécifiant les noms exacts des colonnes à joindre à l’aide de left join et right join. Cela créerait une jointure externe sans lignes en double à cause de la clause UNION de notre requête.

Par conséquent, à l’aide de l’instruction UNION et d’une left join et d’une right join sur deux tables différentes, nous pouvons efficacement créer une jointure externe complète dans MySQL sans aucun doublon.

Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Article connexe - MySQL Query