0Pricing
Coding Interview Prep · Leçon

Tri sur plusieurs colonnes et positionnement des NULL

Mélanger ASC et DESC et comprendre les différences de NULLS FIRST et NULLS LAST selon les bases de données

Tri sur plusieurs colonnes et positionnement des NULL est une leçon Coding Interview Prep gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Coding Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Coding Interview Prep comprend 4 leçons au total.

Pourquoi le tri revient dans les entretiens

Les recruteurs abordent rapidement ORDER BY, car cela révèle si vous comprenez qu'un ensemble de résultats SQL est non trié par défaut. Sans tri explicite, la base de données est libre de renvoyer les lignes dans l'ordre qui lui convient.

Une question d'introduction courante est : "Comment garantir que les lignes reviennent dans un ordre précis ?" La seule réponse correcte consiste à utiliser une clause ORDER BY explicite. Se fier à l'ordre d'insertion, à celui de la clé primaire ou à celui de l'index est une erreur classique de débutant.

Dans cette leçon, vous maîtriserez les tris sur plusieurs colonnes ainsi que la question délicate de la position des valeurs NULL.

Principes de base de ASC et DESC

ORDER BY trie par ordre croissant (ASC) par défaut. Vous n'avez besoin de DESC que pour inverser cet ordre. La direction s'applique à chaque colonne, et non à l'ensemble de la clause.

Conseil pour l'entretien : précisez que ASC est la valeur par défaut implicite, vous n'avez donc pas besoin de l'écrire. Beaucoup de candidats pensent à tort qu'un seul DESC inverse toutes les colonnes.

SELECT name, hire_date
FROM employees
ORDER BY hire_date DESC;

Trier sur plusieurs colonnes

Énumérez plusieurs colonnes en les séparant par des virgules. SQL trie selon la première colonne, puis départage les égalités avec la deuxième, et ainsi de suite. Pensez-y comme à une chaîne de critères de départage.

L'exemple trie les services par ordre alphabétique et, au sein de chaque service, les salaires du plus élevé au plus faible.

  • Tri principal : department par ordre croissant
  • Critère de départage : salary par ordre décroissant
SELECT department, name, salary
FROM employees
ORDER BY department ASC, salary DESC;

Mélanger ASC et DESC

Un piège courant en entretien : chaque colonne possède sa propre direction. Écrire ORDER BY a, b DESC trie a par ordre croissant et b par ordre décroissant, et non les deux par ordre décroissant.

Si vous voulez trier les deux colonnes par ordre décroissant, vous devez écrire ORDER BY a DESC, b DESC. Soyez explicite lorsque la question mélange les directions.

SELECT region, sales_year, revenue
FROM sales
ORDER BY region ASC, sales_year DESC;

Où vont les NULL ?

C'est le cœur de la leçon. NULL signifie inconnu ; la norme n'impose donc pas de position, et les bases de données ne sont pas d'accord sur le comportement par défaut :

  • PostgreSQL & Oracle : les NULL sont placés en dernier avec ASC et en premier avec DESC.
  • MySQL & SQL Server : les NULL sont placés en premier avec ASC et en dernier avec DESC (ils sont traités comme la plus petite valeur).

Les recruteurs aiment demander : "Où les NULL apparaissent-ils dans ce tri ?" La réponse honnête est la suivante : cela dépend du moteur, sauf si vous le contrôlez explicitement.

Contrôler explicitement la position des NULL

Pour rendre la position déterministe, indépendamment des valeurs par défaut du moteur, utilisez NULLS FIRST ou NULLS LAST. PostgreSQL, Oracle et SQLite prennent directement cette syntaxe en charge.

La requête ci-dessous force les dates d'embauche inconnues à se trouver en bas, même si la colonne est triée dans l'ordre croissant.

SELECT name, hire_date
FROM employees
ORDER BY hire_date ASC NULLS LAST;

Émuler NULLS LAST dans MySQL

MySQL ne prend pas en charge le mot-clé NULLS LAST. La solution de contournement portable consiste à utiliser une clé de tri initiale qui indique si la valeur est NULL.

L'expression hire_date IS NULL renvoie 0 pour les dates réelles et 1 pour les NULL. Trier cette valeur par ordre croissant place les NULL à la fin, puis la seconde clé trie les dates réelles.

SELECT name, hire_date
FROM employees
ORDER BY (hire_date IS NULL) ASC, hire_date ASC;

Émuler NULLS FIRST dans SQL Server

SQL Server ne prend pas non plus en charge NULLS FIRST/LAST. Utilisez une expression CASE comme clé de tri initiale. Ici, les NULL reçoivent le rang 0 et apparaissent donc en premier.

Ce modèle mérite d'être mémorisé : une colonne indicatrice calculée placée avant la véritable colonne de tri vous donne un contrôle total sur la position des NULL, quel que soit le dialecte.

SELECT name, hire_date
FROM employees
ORDER BY CASE WHEN hire_date IS NULL THEN 0 ELSE 1 END,
         hire_date ASC;

Exemple détaillé : classement

Supposons que vous construisiez un classement : le résultat le plus élevé arrive en premier et, en cas d'égalité, le joueur qui s'est inscrit le plus tôt obtient le meilleur rang. Les joueurs qui n'ont jamais obtenu de résultat (résultat NULL) doivent se trouver en bas.

Le tri nécessite trois clés : un indicateur de NULL, le résultat par ordre décroissant et la date d'inscription par ordre croissant comme critère de départage.

SELECT player, score, signup_date
FROM players
ORDER BY (score IS NULL) ASC,
         score DESC,
         signup_date ASC;

Mise en garde sur la stabilité du tri

Autre question favorite : "Si deux lignes sont égales pour toutes les clés de ORDER BY, dans quel ordre reviennent-elles ?"

Réponse : indéterminé. Les tris SQL ne sont pas garantis stables : les lignes égales peuvent apparaître dans n'importe quel ordre relatif, et cet ordre peut changer entre deux exécutions ou après une modification d'index.

La solution consiste à ajouter un critère de départage entièrement unique, généralement une clé primaire, afin que le résultat soit reproductible.

SELECT id, name, salary
FROM employees
ORDER BY salary DESC, id ASC;

Remarque sur les performances du tri

Le tri peut être coûteux. Si ORDER BY correspond à un index existant, avec le même ordre et les mêmes directions de colonnes, le moteur peut lire les lignes déjà triées et éviter une étape de tri distincte.

Des directions incompatibles (par exemple, si l'index est entièrement croissant mais que vous triez une colonne par ordre décroissant) empêchent généralement cette optimisation et imposent un tri en mémoire ou sur disque. Mentionner le lien entre l'ordre de l'index et le coût du tri témoigne de votre maturité auprès du recruteur.

Vérification rapide

Testez votre compréhension des règles de direction sur plusieurs colonnes.

Récapitulatif

Points essentiels sur le tri de plusieurs colonnes et la position des NULL :

  • Les ensembles de résultats ne sont pas triés, sauf si vous ajoutez ORDER BY.
  • La direction s'applique à chaque colonne ; ASC est la valeur par défaut.
  • La position des NULL dépend du moteur : en dernier avec ASC pour PostgreSQL et Oracle, en premier avec ASC pour MySQL et SQL Server.
  • Utilisez NULLS FIRST/LAST lorsque cette syntaxe est prise en charge, ou ailleurs un indicateur initial IS NULL / CASE.
  • Ajoutez un critère de départage unique (comme la clé primaire) pour obtenir un ordre reproductible.

Questions Fréquemment Posées

La leçon « Tri sur plusieurs colonnes et positionnement des NULL » est-elle gratuite ?

Oui — le texte complet de « Tri sur plusieurs colonnes et positionnement des NULL » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Coding Interview Prep, passe à CoddyKit PRO. Le cours Coding Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Tri sur plusieurs colonnes et positionnement des NULL » ?

Mélanger ASC et DESC et comprendre les différences de NULLS FIRST et NULLS LAST selon les bases de données Tu pratiques Coding Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Coding Interview Prep ?

Aucune expérience préalable n'est requise. Coding Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Tri sur plusieurs colonnes et positionnement des NULL » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Coding Interview Prep ?

Oui. Chaque leçon Coding Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Tri sur plusieurs colonnes et positionnement des NULL
  2. LIMIT, OFFSET et FETCH FIRST
  3. Renvoyer de manière fiable les N premières lignes
  4. Trier avec des expressions et des alias
← Retour à Coding Interview Prep