6.10 SQL et l’information incomplète
157
© Dunod – La photocopie non autorisée est un délit.
L’élaboration de cette table est plus simple qu’il n’y paraît. La valeur de vérité de P
op Q, pour tout opérateur op, se détermine comme suit, lorsque P (ou Q) est
inconnu : on remplace P successivement par vrai, puis par faux, et on observe les
valeurs résultantes selon la table de la section 5.2.6. Si le résultat de ces deux expressions est le même, on inscrit celui-ci dans le tableau, sinon, on inscrit inconnnu.
Considérons l’expression P ⇒ Q, lorsque P = vrai et Q = inconnu (3e ligne du
tableau). Si Q = vrai, alors l’expression vaut vrai, alors qu’elle vaut faux lorsque
Q = faux. Ces deux résultats étant différents, la valeur de vrai ⇒ inconnu est
donc inconnu.
Dans ce qui suit, nous utiliserons les dénominations true, false et unknown
propres à SQL.
Découlant de cette logique, SQL propose un jeu de prédicats binaires permettant
de référencer explicitement ces trois valeurs (C est un prédicat binaire ou ternaire
quelconque) :
- C is true vaut true si C vaut true, et false si C vaut false ou
unknown;
- C is false vaut true si C vaut false, et false si C vaut true ou
unknown;
- C is unknown vaut true si C vaut unknown, et false si C vaut true ou
false.
Ces prédicats absorbent la valeur unknown. Les formes inverses is not true, is
not false et is not unknown sont aussi disponibles.
Par exemple, la condition "(CAT = 'C2') is true" vaudra true pour le client
F400, et false pour tous les autres, y compris D063 et K729.
6.10.4 La propagation de null en SQL
En général, SQL suit des règles conformes à la logique (au sens mathématique du
terme) mais s’en écarte parfois lorsque celles-ci ne correspondent pas à l’intuition.
Cela donne comme on le verra un comportement peu homogène difficile à maîtriser.
a) Les expressions de calcul
Une expression dont l’évaluation renvoie une valeur numérique, caractères ou
temporelle est évaluée à null si l’un de ses arguments est null. Cette règle ne
concerne pas les fonctions qui absorbent les valeurs null, telles que case,
coalesce ou nullif. Quelques exemples (on admet pour les besoins de la
cause que CAT, mais aussi COMPTE puissent prendre la valeur null) :
faux inc
vrai
faux
inc
inc
vrai
inc
inc
vrai
inc
inc
vrai
inc
vrai
inc
inc faux
inc
faux
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
157
© Dunod – La photocopie non autorisée est un délit.
L’élaboration de cette table est plus simple qu’il n’y paraît. La valeur de vérité de P
op Q, pour tout opérateur op, se détermine comme suit, lorsque P (ou Q) est
inconnu : on remplace P successivement par vrai, puis par faux, et on observe les
valeurs résultantes selon la table de la section 5.2.6. Si le résultat de ces deux expressions est le même, on inscrit celui-ci dans le tableau, sinon, on inscrit inconnnu.
Considérons l’expression P ⇒ Q, lorsque P = vrai et Q = inconnu (3e ligne du
tableau). Si Q = vrai, alors l’expression vaut vrai, alors qu’elle vaut faux lorsque
Q = faux. Ces deux résultats étant différents, la valeur de vrai ⇒ inconnu est
donc inconnu.
Dans ce qui suit, nous utiliserons les dénominations true, false et unknown
propres à SQL.
Découlant de cette logique, SQL propose un jeu de prédicats binaires permettant
de référencer explicitement ces trois valeurs (C est un prédicat binaire ou ternaire
quelconque) :
- C is true vaut true si C vaut true, et false si C vaut false ou
unknown;
- C is false vaut true si C vaut false, et false si C vaut true ou
unknown;
- C is unknown vaut true si C vaut unknown, et false si C vaut true ou
false.
Ces prédicats absorbent la valeur unknown. Les formes inverses is not true, is
not false et is not unknown sont aussi disponibles.
Par exemple, la condition "(CAT = 'C2') is true" vaudra true pour le client
F400, et false pour tous les autres, y compris D063 et K729.
6.10.4 La propagation de null en SQL
En général, SQL suit des règles conformes à la logique (au sens mathématique du
terme) mais s’en écarte parfois lorsque celles-ci ne correspondent pas à l’intuition.
Cela donne comme on le verra un comportement peu homogène difficile à maîtriser.
a) Les expressions de calcul
Une expression dont l’évaluation renvoie une valeur numérique, caractères ou
temporelle est évaluée à null si l’un de ses arguments est null. Cette règle ne
concerne pas les fonctions qui absorbent les valeurs null, telles que case,
coalesce ou nullif. Quelques exemples (on admet pour les besoins de la
cause que CAT, mais aussi COMPTE puissent prendre la valeur null) :
faux inc
vrai
faux
inc
inc
vrai
inc
inc
vrai
inc
inc
vrai
inc
vrai
inc
inc faux
inc
faux
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
inc
