Et comment (annexe) font les puristes pour signifier "je n'ai pas cette information" ? Rien contre toi je t'assure, très gentil à toi de venir me conseiller, mais voilà, quand on me dit "on n'utilise pas ceci" il faut rajouter ensuite "comment faire pour"...
Comment font les puristes du relationnel ? Ils utilisent des valeurs drapeaux.
Ici, sans NULL autorisé, on pourrait convenir d'un drapeau valant "<inconnu>" ou "" (chaîne vide).
personne nom prenom ville
--- ------ -----
toto alfred paris
titi jean paris
tutu paul <inconnu>
Si plusieurs tables on peut imaginer un code commune "00000" :
ville code nom
----- ---
00000 <inconnu>
75000 paris
personne nom prenom ville
--- ------ -----
toto alfred 75000
titi jean 75000
tutu paul 00000
Oui effectivement, tu traduis là la vision booléenne pure. Mais cette vision voit là ses limites.
Je traduis le comportement de l'opérateur "=" et de la clause WHERE tels que définis par SQL.
Les opérateurs "IS" et "<=>" se comportent différemment avec NULL.
Tu peux aussi jouer avec COALESCE() :
select nom
from personne
-- Si ville est NULL alors retourne "paris"
where coalesce(ville, 'paris') = 'paris'
Qui correspond à :
select nom from personne where ville = 'paris' or ville is null
Mais l'intention est moins claire, et je ne garantis rien sur les perfs.
Partager