CodeGym /Cours /SQL SELF /Exemples d'utilisation de NULL dans des cas réels : calcu...

Exemples d'utilisation de NULL dans des cas réels : calculs, filtrage, tri

SQL SELF
Niveau 10 , Leçon 3
Disponible

Travailler avec NULL, ça arrive dans plein de situations : que ce soit pour gérer des données manquantes dans les rapports, pour filtrer ou trier. Si on devait choisir entre une valeur absente dans une table et un chiffre chelou genre 9999, la plupart préféreraient NULL — ouais, c'est pas toujours pratique, mais au moins c'est honnête. On va mater quelques cas typiques.

Exemple : trier des produits avec des prix manquants

Imaginons qu'on gère une boutique en ligne, et qu'on a une table de produits :

product_id name price
1 Téléphone 45000
2 Ordinateur portable NULL
3 Caméra 25000
4 Montre connectée NULL

On veut trier les produits par prix, et ceux sans prix (NULL) doivent finir à la fin.

SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;

Résultat :

product_id name price
3 Caméra 25000
1 Téléphone 45000
2 Ordinateur portable NULL
4 Montre connectée NULL

Mate bien la construction clé NULLS LAST. Par défaut, PostgreSQL met les valeurs NULL au début pour ASC, mais avec ce paramètre, on les balance à la fin.

Exemple : filtrer les étudiants sans date de naissance

On a une table d'étudiants, et on veut sélectionner seulement ceux qui n'ont pas de date de naissance renseignée.

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

La requête :

SELECT student_id, name
FROM students
WHERE birth_date IS NULL;

Résultat :

student_id name
2 Anna Song
4 Maria Chi

On a bien récupéré les infos des étudiants dont la date de naissance est inconnue.

Exemples d'utilisation de fonctions pour gérer NULL

Exemple : calcul du total en tenant compte des NULL

Dans la table des commandes, on stocke les montants des commandes. Mais parfois, les données sont pas complètes, et il faut considérer que dans ces cas-là, le montant vaut 0.

Exemple de données :

order_id customer_name order_amount
1 Alex 1200
2 Maria 2500
3 Max NULL
4 Xena 3100

La requête :

SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;

Résultat :

total_amount
6800

On utilise COALESCE(order_amount, 0) pour remplacer NULL par 0 avant de faire la somme. Comme ça, pas d'erreur ou de calcul foireux.

Exemple : afficher du texte à la place de NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Dans le rapport, il faut afficher "Non renseigné" pour toutes les données vides au lieu de NULL.

SELECT
    customer_name, 
    COALESCE(order_amount::TEXT, 'Non renseigné') AS order_status
FROM orders;

Résultat :

customer_name order_status
Alex 1200
Maria 2500
Max Non renseigné
Xena 3100

COALESCE() permet d'afficher le texte qu'on veut si la valeur est NULL.

Scénarios plus complexes avec NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Notre but — trier les commandes pour que celles avec un montant manquant soient au début, puis trier du plus grand au plus petit montant.

SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;

Résultat :

customer_name order_amount
Max NULL
Xena 3100
Maria 2500
Alex 1200

Ici, on a utilisé NULLS FIRST pour mettre les valeurs NULL avant toutes les autres.

Exemple : filtrer des données en remplaçant les valeurs NULL

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

Dans certains rapports, il faut afficher seulement les lignes où la valeur est renseignée ou la remplacer par "Inconnu" si c'est NULL.

SELECT
    student_id, 
    name, 
    COALESCE(birth_date::TEXT, 'Inconnu') AS birth_date_info
FROM students;

Résultat :

student_id name birth_date_info
1 Otto Art 2000-01-15
2 Anna Song Inconnu
3 Alex Lin 1999-05-10
4 Maria Chi Inconnu

C'est super utile pour les rapports où il faut montrer que des données sont absentes.

Conseils pratiques

Travailler avec NULL demande d'être attentif. Voilà quelques tips :

  • Utilise IS NULL et COALESCE() pour vérifier et remplacer les valeurs manquantes.
  • Souviens-toi que les fonctions d'agrégation ignorent NULL, sauf COUNT(*).
  • Pour le tri, pense aux mots-clés NULLS FIRST et NULLS LAST.
  • Dans les rapports, indique toujours comment tu gères NULL, histoire d'éviter les malentendus avec les collègues.

Ces connaissances vont t'aider non seulement à écrire des requêtes propres, mais aussi à impressionner en entretien. Parce que savoir bosser avec des vraies données, c'est toujours plus cool que juste la théorie !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION