158
Chapitre 6 • SQL avancé
• A + B + C vaut null si A ou B ou C est null;
• COMPTE - (select sum(QCOM*PRIX) from .. where ..) vaut null
si la sous-requête from-where correspond à un ensemble vide;
• cast(CAT as varchar(10)) vaut null si CAT = null;
• ADRESSE||' - '||CAT vaut null si CAT = null;
• COMPTE - COMPTE vaut null si COMPTE = null.
b) Les fonctions agrégatives
Ces fonctions travaillent sur des ensembles dont les éventuelles valeurs null
sont ignorées. Si l’ensemble est vide, les fonctions sum, avg, min, et max
renvoient null, tandis que count renvoie 0.
On notera que cette règle ne suit pas celle des expressions de calcul. En effet, la
fonction sum devrait, comme toute somme, renvoyer null dès que l’un au moins
de ses éléments est null, ce qui n’est pas le cas. L’intuition l’emporte ici sur la
rigueur.
6.10.5 La propagation de unknown en SQL
La toute première règle est la suivante : la clause where P d’une instruction SFW ne
retient que les lignes pour lesquelles P est évalué à true. Elle écarte donc les lignes
pour lesquelles P vaut false ou unknown. Nous préciserons ensuite les principales
règles d’évaluation des prédicats, qui s’ajoutent à la table de vérité décrite ci-dessus.
a) Les expressions de comparaison
Une comparaison entre deux valeurs dont une au moins est null renvoie
unknown. C’est ainsi que le prédicat CAT = CAT renvoie unknown pour les
lignes de CLIENT dont CAT = null.
b) Les prédicats absorbants is true, is false, is unknown et leurs inverses
Sont évalués à true ou false, jamais unknown. Malgré leur lourdeur ces
expressions sont plus explicites que les autres formes, et donc moins sujettes à
erreur d’interprétation.
On notera que P is not true n’est pas équivalent à not P. En effet, si P est
évalué à unknown, la première forme a pour valeur true tandis que not P vaut
unknown.
c) Les prédicats is null et is not null
Sont évalués à true ou false, jamais unknown.
d) Les prédicats in et not in
Leur effet se déduit de leur développement : soit E ≡ {a,b,c} l’ensemble de
référence, chacune de ces trois valeurs pouvant être null (ici, null est donc une
valeur)
Précédent

- 158/436

Suivant