24 juillet 2024
Comprendre les jointures en SQL
Déjà, qu'est-ce qu'une jointure ?
Une jointure en SQL (Structured Query Language) est une opération qui permet de combiner des lignes de deux ou plusieurs tables en fonction d'une condition de correspondance entre certaines colonnes de ces tables. Les jointures sont utilisées pour relier des données stockées dans différentes tables et les organiser de manière à obtenir des informations complètes et cohérentes.Il existe plusieurs types de jointures en SQL, chacune ayant une fonction spécifique :
# INNER JOIN :
Cette jointure retourne les lignes qui ont des valeurs correspondantes dans les deux tables. C'est la jointure la plus courante.Exemple de code SQL
SELECT table1.column1, table2.column2
FROM table1
INNER JOIN table2 ON table1.common_column = table2.common_column;
Prenons un exemple un peu plus parlant, nous avons un deux tables users et adresse, nous voulons donc récupérer l'adresse liée à notre utilisateur qui se nommera jean.
La structure de la table users est comme suit :
![données de table users](https://i.postimg.cc/T3BRwxp4/image.png)
et la table adresse se constitue comme ça :
![table adresse](https://i.postimg.cc/v8NtD6HH/image.png)
On a donc une "contrainte" qui lie notre table adresse à notre table users grâce à la clé étrangère présente sur id_user
KEY `FK_adresse_users` (`id_user`),
CONSTRAINT `FK_adresse_users` FOREIGN KEY (`id_user`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
![clé étrangère sur la table adresse](https://i.postimg.cc/gJ032GCZ/image.png)
Vu que l'on a une contrainte, on peut désormais récupérer via une jointure l'adresse liée à notre utilisateur :
SELECT *
FROM users
INNER JOIN adresse ON users.id = adresse.id_user;
![clé étrangère sur la table adresse](https://i.postimg.cc/yNCJkcG9/image.png)
On peut donc constater que notre requête récupère toutes les informations de nos deux (2) tables pour n'en former qu'une.
# LEFT JOIN (ou LEFT OUTER JOIN) :
Cette jointure retourne toutes les lignes de la table de gauche (table1), ainsi que les lignes correspondantes de la table de droite (table2). Si aucune correspondance n'est trouvée, les résultats contiendront NULL pour toutes les colonnes de la table de droite.Exemple de code SQL
SELECT table1.column1, table2.column2
FROM table1
LEFT JOIN table2 ON table1.common_column = table2.common_column;
Retourne toutes les lignes de la table users ainsi que les lignes correspondantes de la table adresse. Si aucune adresse n'est trouvée pour un utilisateur, les colonnes de l'adresse contiendront NULL.
SELECT users.id, users.pseudo, users.password, adresse.adresse1, adresse.zipCode, adresse.ville, adresse.pays
FROM users
LEFT JOIN adresse ON users.id = adresse.id_user;
![résultat du left join](https://i.postimg.cc/6QsXKhPs/image.png)
# RIGHT JOIN (ou RIGHT OUTER JOIN) :
Cette jointure retourne toutes les lignes de la table de droite (table2), ainsi que les lignes correspondantes de la table de gauche (table1). Si aucune correspondance n'est trouvée, les résultats contiendront NULL pour toutes les colonnes de la table de gauche.Exemple de code SQL
SELECT table1.column1, table2.column2
FROM table1
RIGHT JOIN table2 ON table1.common_column = table2.common_column;
Retourne toutes les lignes de la table adresse ainsi que les lignes correspondantes de la table users. Si aucun utilisateur n'est trouvé pour une adresse, les colonnes de l'utilisateur contiendront NULL.
SELECT users.id, users.pseudo, users.password, adresse.adresse1, adresse.zipCode, adresse.ville, adresse.pays
FROM users
RIGHT JOIN adresse ON users.id = adresse.id_user;
![résultat du right join](https://i.postimg.cc/j5dqSQwV/image.png)
# FULL JOIN (ou FULL OUTER JOIN) :
Cette jointure retourne toutes les lignes lorsque qu'il y a une correspondance dans l'une des tables. Si aucune correspondance n'est trouvée, les résultats contiendront NULL pour les colonnes de la table de droite ou de la table de gauche.Exemple de code SQL
SELECT table1.column1, table2.column2
FROM table1
FULL OUTER JOIN table2 ON table1.common_column = table2.common_column;
Le FULL JOIN (ou FULL OUTER JOIN) n'est pas pris en charge par certaines bases de données SQL, telles que MySQL. Dans ce cas, on peut obtenir un résultat équivalent en combinant un LEFT JOIN et un RIGHT JOIN avec une union (UNION).
SELECT users.id, users.pseudo, users.password, adresse.adresse1, adresse.zipCode, adresse.ville, adresse.pays
FROM users
LEFT JOIN adresse ON users.id = adresse.id_user
UNION
SELECT users.id, users.pseudo, users.password, adresse.adresse1, adresse.zipCode, adresse.ville, adresse.pays
FROM users
RIGHT JOIN adresse ON users.id = adresse.id_user;
![résultat du full join](https://i.postimg.cc/6QsXKhPs/image.png)
# CROSS JOIN :
Cette jointure retourne le produit cartésien des deux tables, c'est-à-dire qu'elle associe chaque ligne de la première table à chaque ligne de la deuxième table. Il n'y a pas de condition de correspondance.Exemple de code SQL
SELECT table1.column1, table2.column2
FROM table1
CROSS JOIN table2;
Retourne le produit cartésien des deux tables, associant chaque utilisateur à chaque adresse sans condition de correspondance.
SELECT users.id, users.pseudo, users.password, adresse.adresse1, adresse.zipCode, adresse.ville, adresse.pays
FROM users
CROSS JOIN adresse;
![résultat de cross join](https://i.postimg.cc/tCtSJN7Q/image.png)
# SELF JOIN :
Cette jointure est une jointure d'une table avec elle-même. Elle est utilisée lorsque l'on doit comparer des lignes dans une même table.Exemple de code SQL
SELECT a.column1, b.column2
FROM table a
JOIN table b ON a.common_column = b.common_column;
Exemple où la table users est jointe avec elle-même. Imaginons qu'on veut comparer des utilisateurs entre eux. Notez que ce cas n'est pas directement applicable avec les informations de vos tables, mais voici un exemple général de self join.
SELECT u1.id AS User1_ID, u1.pseudo AS User1_Pseudo, u2.id AS User2_ID, u2.pseudo AS User2_Pseudo
FROM users u1
JOIN users u2 ON u1.id <> u2.id;
![résultat du self join](https://i.postimg.cc/JnN7vF7d/image.png)
Les jointures sont essentielles pour travailler avec des bases de données relationnelles, car elles permettent de tirer parti des relations entre les tables pour accéder à des données complexes et interdépendantes.
Mots clés:
php sql pdo jointure
Cours Du Dev
Recevez les dernières formations disponibles en vous inscrivant à la newsletter
Créé par arkunis