24 juillet 2024

Comprendre les jointures en SQL

Bonjour, dans ce cours, nous allons voir les jointures SQL et comprendre comment les utiliser efficacement.

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

et la table adresse se constitue comme ça :

table adresse

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

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

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

# 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

# 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

# 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

# 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

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