L2 Info : Bases de données
 
◃  Ch. 2 Interrogation des données avec SQL (DQL)  ▹
 

Gestion des valeurs absentes

  • Certaines colonnes acceptent parfois les valeurs absentes (représentées par NULL)
    • Pour vérifier si une valeur est absente (NULL) ou renseignée
    • Syntaxe : nom_colonne IS [NOT] NULL
    • Exemple :
      select * from professeur WHERE prof_tel IS NULL;
       prof_id | prof_nom | prof_prenom | prof_tel   | prof_adresse | prof_statut
      ---------+----------+-------------+------------+--------------+-------------
             1 | Jay      | Véronique   |            |              | MCF
             2 | Balev    | Stefan      |            |              | MCF
             3 | Arfi     | Mustapha    |            |              | MCF
      (3 rows)
      
      SELECT * FROM professeur WHERE prof_tel IS NOT NULL;
       prof_id | prof_nom | prof_prenom |  prof_tel  | prof_adresse | prof_statut
      ---------+----------+-------------+------------+--------------+-------------
             1 | Amanton  | Laurent     | 0232744319 | ST-B110      | MCF
             2 | Ponty    | Jean-Luc    | 0232744319 | ST-B110      | MCF
             6 | Fournier | Dominique   | 0232744321 | ST-B114      | MCF
      (3 rows)
  • Pour remplacer une valeur absente (NULL) par autre chose
    • Syntaxe : COALESCE(nom_colonne, nouvelleValeur) (mysql, postgresql)
    • Exemple : on remplace les numéros de téléphone absent par le numéro du standard de l'UFR
      SELECT *, COALESCE(prof_tel,'0232744300') FROM professeur;
       prof_id | prof_nom | prof_prenom | prof_tel   | prof_adresse | prof_statut |  coalesce
      ---------+----------+-------------+------------+--------------+-------------+------------
             1 | Amanton  | Laurent     | 0232744319 |              | MCF         | 0232744319
             2 | Ponty    | Jean-Luc    | 0232744319 |              | MCF         | 0232744319
             3 | Jay      | Véronique   |            |              | MCF         | 0232744300
             4 | Balev    | Stefan      |            |              | MCF         | 0232744300
             5 | Arfi     | Mustapha    |            |              | MCF         | 0232744300
             6 | Fournier | Dominique   | 0232744321 |              | MCF         | 0232744321
      (6 rows)
    • À noter (1) : La nouvelle valeur est insérée uniquement dans les enregistrements dont la colonne ciblée n'est pas renseignée
    • À noter (2): Jusqu'à la version ??, Oracle n'utilisait pas la fonction standard mais NVL(nom_colonne, nouvelleValeur)