Comment trier par ORDER BY lors de la jointure de tables en SQL en fonction des colonnes de chaque table

Lors de la jointure de plusieurs tables en SQL, trier les données en fonction d’une colonne spécifique est crucial pour améliorer la lisibilité des données et l’efficacité de l’analyse. Cet article explique en détail comment joindre plusieurs tables et utiliser ORDER BY pour trier les données en fonction des colonnes de chaque table.

Sommaire

Explication de base de la jointure de tables

La jointure de tables est une technique en SQL qui combine plusieurs tables pour créer un ensemble de résultats unique. Les types de jointures incluent principalement INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN. Cela permet de rassembler des données connexes et de les récupérer en une seule requête.

INNER JOIN

INNER JOIN ne renvoie que les lignes correspondantes présentes dans les deux tables.

LEFT JOIN

LEFT JOIN renvoie toutes les lignes de la table de gauche et les lignes correspondantes de la table de droite. Si aucune correspondance n’est trouvée, NULL est renvoyé.

RIGHT JOIN

RIGHT JOIN renvoie toutes les lignes de la table de droite et les lignes correspondantes de la table de gauche. Si aucune correspondance n’est trouvée, NULL est renvoyé.

FULL JOIN

FULL JOIN renvoie toutes les lignes des deux tables et remplit de NULL les lignes non correspondantes.

Syntaxe de base de ORDER BY

La clause ORDER BY est utilisée pour trier les résultats d’une requête SQL en fonction d’une colonne spécifique. L’ordre de tri peut être contrôlé en spécifiant ascendant (ASC) ou descendant (DESC). La syntaxe de base est la suivante :

Syntaxe de base

SELECT nom_colonne1, nom_colonne2, ...
FROM nom_table
ORDER BY nom_colonne1 [ASC|DESC], nom_colonne2 [ASC|DESC], ...;

Exemple : Tri sur une seule colonne

SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC;

Dans cet exemple, la colonne last_name de la table employees est triée par ordre croissant.

Exemple : Tri sur plusieurs colonnes

SELECT first_name, last_name, hire_date
FROM employees
ORDER BY last_name ASC, hire_date DESC;

Dans cet exemple, on trie d’abord la colonne last_name par ordre croissant, puis la colonne hire_date par ordre décroissant.

Utilisation de ORDER BY lors de la jointure de plusieurs tables

Lors de la jointure de plusieurs tables, il est possible d’utiliser la clause ORDER BY pour trier l’ensemble des résultats. On spécifie les colonnes de n’importe quelle table jointe pour effectuer le tri. Dans une requête de jointure, la clause ORDER BY s’applique à l’ensemble des résultats après la jointure.

Syntaxe de base

SELECT table1.nom_colonne1, table2.nom_colonne2, ...
FROM table1
JOIN table2 ON table1.colonne_commune = table2.colonne_commune
ORDER BY table1.nom_colonne1 [ASC|DESC], table2.nom_colonne2 [ASC|DESC], ...;

Exemple : INNER JOIN et ORDER BY

Dans l’exemple suivant, on joint les tables employees et departments et trie l’ensemble des résultats par la colonne department_name de la table departments et la colonne last_name de la table employees.

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id
ORDER BY departments.department_name ASC, employees.last_name DESC;

Dans cette requête, la colonne department_name est triée par ordre croissant, et les employés du même département sont triés par la colonne last_name en ordre décroissant.

Comment trier par des colonnes de tables distinctes

Lors de la jointure de plusieurs tables, il est possible de trier en fonction de colonnes appartenant à des tables différentes. Dans ce cas, il est nécessaire d’indiquer explicitement les colonnes à trier avec leur nom de table dans la clause ORDER BY.

Exemple : LEFT JOIN et tri sur plusieurs colonnes

Dans l’exemple suivant, on joint les tables customers et orders et trie l’ensemble des résultats par la colonne customer_name de la table customers et la colonne order_date de la table orders.

SELECT customers.customer_name, orders.order_id, orders.order_date
FROM customers
LEFT JOIN orders ON customers.customer_id = orders.customer_id
ORDER BY customers.customer_name ASC, orders.order_date DESC;

Dans cette requête, on trie d’abord par la colonne customer_name en ordre croissant, puis les commandes du même client sont triées par la colonne order_date en ordre décroissant.

Exemple : RIGHT JOIN et tri sur plusieurs colonnes

Ensuite, on montre un exemple où les tables employees et projects sont jointes et l’ensemble des résultats est trié par la colonne project_name de la table projects et la colonne last_name de la table employees.

SELECT employees.first_name, employees.last_name, projects.project_name
FROM projects
RIGHT JOIN employees ON projects.project_lead_id = employees.employee_id
ORDER BY projects.project_name ASC, employees.last_name ASC;

Dans cette requête, on trie d’abord par la colonne project_name en ordre croissant, et les employés appartenant au même projet sont triés par la colonne last_name en ordre croissant.

Exemples de requêtes SQL réelles

Voici quelques exemples concrets de requêtes SQL pour joindre plusieurs tables et trier les résultats en fonction des colonnes de chaque table avec ORDER BY.

Exemple 1 : Tri avec INNER JOIN

La requête suivante joint les tables students et grades et trie par nom d’étudiant (colonne student_name de la table students) et par date de la note (colonne grade_date de la table grades).

SELECT students.student_name, grades.grade, grades.grade_date
FROM students
INNER JOIN grades ON students.student_id = grades.student_id
ORDER BY students.student_name ASC, grades.grade_date DESC;

Dans cette requête, on trie d’abord par la colonne student_name en ordre croissant, puis les notes du même étudiant sont triées par la colonne grade_date en ordre décroissant.

Exemple 2 : Tri avec LEFT JOIN

La requête suivante joint les tables authors et books et trie par nom d’auteur (colonne author_name de la table authors) et par date de publication du livre (colonne publication_date de la table books).

SELECT authors.author_name, books.book_title, books.publication_date
FROM authors
LEFT JOIN books ON authors.author_id = books.author_id
ORDER BY authors.author_name ASC, books.publication_date ASC;

Dans cette requête, on trie d’abord par la colonne author_name en ordre croissant, puis les livres du même auteur sont triés par la colonne publication_date en ordre croissant.

Exemple 3 : Tri avec RIGHT JOIN

Enfin, un exemple où les tables employees et departments sont jointes et triées par nom de département (colonne department_name de la table departments) et par le nom de famille de l’employé (colonne last_name de la table employees).

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id
ORDER BY departments.department_name ASC, employees.last_name ASC;

Dans cette requête, on trie d’abord par la colonne department_name en ordre croissant, et les employés du même département sont triés par la colonne last_name en ordre croissant.

Points à considérer lors de l’utilisation de ORDER BY

Lors de l’utilisation de la clause ORDER BY, il est important de prendre en compte plusieurs points pour améliorer les performances et éviter des résultats inattendus.

Optimisation des performances

Le tri consomme des ressources de calcul et peut affecter les performances sur de grands ensembles de données. Définir les index appropriés peut améliorer les performances de tri. En particulier, il est efficace de définir des index sur les colonnes utilisées dans la clause ORDER BY.

Gestion des valeurs NULL

Lorsque des valeurs NULL sont incluses lors du tri, par défaut, elles sont placées en haut ou en bas de la liste. Pour spécifier le traitement des valeurs NULL, utilisez NULLS FIRST ou NULLS LAST comme suit :

ORDER BY nom_colonne ASC NULLS FIRST;
ORDER BY nom_colonne DESC NULLS LAST;

Ordre de tri pour plusieurs colonnes

Lors du tri par plusieurs colonnes, le tri est effectué dans l’ordre spécifié. Les lignes ayant la même valeur dans la première colonne seront triées par la colonne suivante. Il est donc important de choisir les colonnes de manière appropriée pour obtenir l’ordre souhaité.

Utilisation d’alias

Lorsque des alias sont utilisés pour les colonnes dans une requête, ces alias peuvent être utilisés dans la clause ORDER BY. Cela améliore la lisibilité de la requête.

SELECT first_name AS fname, last_name AS lname
FROM employees
ORDER BY lname ASC, fname ASC;

Impact des jointures

Comme les données sont filtrées en fonction des conditions de jointure, le résultat de la clause ORDER BY peut être influencé par le type de jointure utilisé. Pour obtenir le résultat souhaité, il est essentiel de définir soigneusement les conditions de jointure.

En tenant compte de ces points, il est possible d’utiliser la clause ORDER BY de manière efficace pour un tri de données précis et performant.

Conclusion

Nous avons expliqué comment joindre plusieurs tables en SQL et utiliser ORDER BY pour trier en fonction des colonnes de chaque table. En utilisant correctement les jointures de tables et la clause ORDER BY, vous pouvez améliorer la lisibilité des données et l’efficacité de l’analyse. En tenant compte des points tels que le tri par plusieurs colonnes, la gestion des valeurs NULL et l’optimisation des performances, vous pouvez effectuer des opérations de données plus efficaces. Utilisez ces techniques pour créer des requêtes SQL plus avancées et améliorer la gestion de vos bases de données.

Sommaire