Quelle est la différence entre INNER JOIN',
LEFT JOIN', RIGHT JOIN' et
FULL JOIN' ?
dans MySQL ?
La lecture de cet article original sur The Code Project vous aidera beaucoup : [Représentation visuelle des jointures SQL][2].
![texte alt][3]
Consultez également cet article : [SQL SERVER - Meilleures performances - LEFT JOIN ou NOT IN ?][4].
Retrouvez l'original à l'adresse suivante : [Différence entre JOIN et OUTER JOIN dans MySQL][5].
[1] : http://en.wikipedia.org/wiki/The_Code_Project [2] : http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx [3] : http://i.stack.imgur.com/VQ5XP.png [4] : http://blog.sqlauthority.com/2008/04/22/sql-server-better-performance-left-join-or-not-in/ [5] : https://stackoverflow.com/questions/3308122/how-do-i-decide-when-to-use-right-joins-left-joins-or-inner-joins-or-how-to-dete/3308153#3308153
INNER JOIN récupère tous les enregistrements qui sont communs aux deux tables sur la base de la clause ON fournie.
LEFT JOIN obtient tous les enregistrements de la table liée LEFT mais si vous avez sélectionné certaines colonnes de la table RIGHT, s'il n'y a pas d'enregistrements liés, ces colonnes contiendront NULL.
RIGHT JOIN est similaire à la méthode ci-dessus mais obtient tous les enregistrements de la table RIGHT.
FULL JOIN récupère tous les enregistrements des deux tables et met NULL dans les colonnes où les enregistrements liés n'existent pas dans la table opposée.
Une clause SQL JOIN est utilisée pour combiner les lignes de deux ou plusieurs tables, en se basant sur un champ commun entre elles.
Il existe différents types de jointures en SQL :
INNER JOIN : renvoie des lignes lorsqu'il existe une correspondance dans les deux tables.
LEFT JOIN : renvoie toutes les lignes de la table de gauche, même s'il n'y a pas de correspondance dans la table de droite.
RIGHT JOIN : renvoie toutes les lignes de la table de droite, même s'il n'y a pas de correspondance dans la table de gauche.
FULL JOIN : Elle combine les résultats des jointures externes gauche et droite.
La table jointe contiendra tous les enregistrements des deux tables et remplira les NULL pour les correspondances manquantes des deux côtés.
SELF JOIN : est utilisé pour joindre une table à elle-même comme si la table était deux tables, en renommant temporairement au moins une table dans l'instruction SQL.
CARTESIAN JOIN : renvoie le produit cartésien des ensembles d'enregistrements de deux ou plusieurs tables jointes.
Nous pouvons prendre les quatre premières jointures en détail :
Nous avons deux tables avec les valeurs suivantes .
TableA
id firstName lastName
.......................................
1 arun prasanth
2 ann antony
3 sruthy abc
6 new abc
Tableau B
id2 age Place
................
1 24 kerala
2 24 usa
3 25 ekm
5 24 chennai
....................................................................
INNER JOIN
Note : elle donne l'intersection des deux tables, c'est-à-dire les lignes qu'elles ont en commun dans la TableA et la TableB.
Syntaxe
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field;
Appliquez-la dans notre exemple de tableau :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
INNER JOIN TableB
ON TableA.id = TableB.id2;
Le résultat sera
firstName lastName age Place
..............................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
JOINT GAUCHE
Note : donnera toutes les lignes sélectionnées dans TableA, plus toutes les lignes sélectionnées communes dans TableB.
Syntaxe
SELECT table1.column1, table2.column2...
FROM table1
LEFT JOIN table2
ON table1.common_field = table2.common_field;
Appliquez-la dans notre exemple de tableau :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
LEFT JOIN TableB
ON TableA.id = TableB.id2;
Résultat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
JOINTURE DROITE
Note : cela donnera toutes les lignes sélectionnées dans TableB, plus toutes les lignes sélectionnées communes dans TableA.
Syntaxe
SELECT table1.column1, table2.column2...
FROM table1
RIGHT JOIN table2
ON table1.common_field = table2.common_field;
Appliquez-la dans notre exemple de tableau :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
RIGHT JOIN TableB
ON TableA.id = TableB.id2;
Résultat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
NULL NULL 24 chennai
FULL JOIN
Note :Cela retournera toutes les valeurs sélectionnées dans les deux tables.
Syntaxe
SELECT table1.column1, table2.column2...
FROM table1
FULL JOIN table2
ON table1.common_field = table2.common_field;
Appliquez-la dans notre exemple de tableau :
SELECT TableA.firstName,TableA.lastName,TableB.age,TableB.Place
FROM TableA
FULL JOIN TableB
ON TableA.id = TableB.id2;
Résultat
firstName lastName age Place
...............................................................................
arun prasanth 24 kerala
ann antony 24 usa
sruthy abc 25 ekm
new abc NULL NULL
NULL NULL 24 chennai
Fait intéressant
Pour les jointures INNER, l'ordre n'a pas d'importance.
Pour les jointures EXTERNES (GAUCHE, DROITE ou PLEINE), l'ordre est important.
Il est préférable de consulter ce [Lien][1] qui vous donnera des détails intéressants sur l'ordre des jointures.
[1] : https://stackoverflow.com/questions/9614922/does-the-join-order-matter-in-sql