Sémantique de la valeur Null
La sémantique des valeurs NULL est décrite ci-après.
- Les opérations arithmétiques ou de comparaison avec une valeur inconnue (NULL) renvoient une valeur inconnue
- Dans une application Java 2 platform, Enterprise Edition (J2EE) version 1.3, une expression de chemin d'accès utilise une sémantique de jointure externe dans laquelle une zone ou une valeur cmr NULL a pour résultat NULL. Dans J2EE version 1.4, l'expression de chemin d'accès utilise une sémantique de jointure interne.
- Les opérateurs IS NULL et IS NOT NULL sont applicables aux expressions des chemins d'accès et renvoient TRUE ou FALSE. Les opérateurs booléens AND, OR et NOT utilisent une logique à trois valeurs.
AND | True | False | Inconnu |
---|---|---|---|
True | True | False | Inconnu |
False | False | False | False |
Inconnu (unknown) | Inconnu | False | Inconnu |
OR | True | False | Inconnu |
---|---|---|---|
True | True | True | True |
False | True | False | Inconnu |
Inconnu (unknown) | True | Inconnu | Inconnu |
NOT | |
---|---|
True | False |
False | True |
Inconnu (unknown) | Inconnu |
Exemple : Sémantique de la valeur NULL
select object(e) from EmpBean where e.salary > 10 and e.dept.budget > 100
Si salary est NULL, l'évaluation de e.salary > 10 renvoie inconnu (unknown) et l'objet employé n'est pas renvoyé. Si la zone CMR dept ou budget est NULL, l'évaluation de e.dept.budget > 100 renvoie inconnu (unknown) et l'objet employé n'est pas renvoyé.
select object(e) from EmpBean where e.dept.budget is null
Dans J2EE 1.3, si dept ou budget est NULL, l'évaluation de e.dept.budget est NULL, renvoie TRUE et l'objet employé est renvoyé. Dans J2EE 1.4, l'objet employé est renvoyé uniquement si budget est NULL.
select object(e) from EmpBean e , in (e.dept.emps) e1 where e1.salary > 10
Si dept est NULL, l'expression de chemin d'accès à plusieurs valeurs e.dept.emps a pour résultat une collection vide (et non une collection contenant une valeur NULL). Un employé dont la valeur dept est NULL n'est pas renvoyé.
select object(e) from EmpBean e where e.dept.emps is empty
Si dept est NULL le prédicat a pour résultat inconnu (unknown) et l'objet employé n'est pas renvoyé.
select object(e) from EmpBean e , EmpBean e1 where e member of e1.dept.emps
Si dept est NULL l'évaluation de l'élément member du prédicat renvoie inconnu (unknown) et l'objet employé n'est pas renvoyé.