Les opérateurs de comparaison habituels sont disponibles, comme l'indique le Tableau 9.1, « Opérateurs de comparaison ».
Tableau 9.1. Opérateurs de comparaison
Opérateur | Description |
---|---|
< | inférieur à |
> | supérieur à |
<= | inférieur ou égal à |
>= | supérieur ou égal à |
= | égal à |
<> ou != | différent de |
L'opérateur != est converti en <> au moment de l'analyse. Il n'est pas possible d'implanter des opérateurs != et <> réalisant des opérations différentes.
Les opérateurs de comparaison sont disponibles pour tous les types de données pour lesquels cela a du sens. Tous les opérateurs de comparaison sont des opérateurs binaires renvoyant des valeurs du type boolean ; des expressions comme 1 < 2 < 3 ne sont pas valides (car il n'existe pas d'opérateur < de comparaison d'une valeur booléenne avec 3).
En plus des opérateurs de comparaison, on trouve la construction spéciale BETWEEN.
a BETWEEN x AND y
est équivalent à
a >= x AND a <= y
Notez que BETWEEN traite le point final comme inclut dans l'échelle des valeurs. NOT BETWEEN fait la comparaison inverse :
a NOT BETWEEN x AND y
est équivalent à
a < x OR a > y
BETWEEN SYMMETRIC est identique à BETWEEN sauf qu'il n'est pas nécessaire que l'argument à gauche de AND soit plus petit ou égal à l'argument à droite. SI ce n'est pas le cas, ces deux arguments sont automatiquement inversés, pour qu'une échelle non vide soit toujours supposée.
Pour vérifier si une valeur est NULL ou non, on utilise les constructions
expression IS NULL expression IS NOT NULL
ou la construction équivalente, non standard,
expression ISNULL expression NOTNULL
On ne peut pas écrire expression = NULL parce que NULL n'est pas « égal à » NULL. (La valeur NULL représente une valeur inconnue et il est impossible de dire si deux valeurs inconnues sont égales.) Ce comportement est conforme au standard SQL.
Il se peut que des applications s'attendent à voir expression = NULL évaluée à vrai (true) si expression s'évalue comme la valeur NULL. Il est chaudement recommandé que ces applications soient modifiées pour se conformer au standard SQL. Néanmoins, si cela n'est pas possible, le paramètre de configuration transform_null_equals peut être utilisé. S'il est activé, PostgreSQL™ convertit les clauses x = NULL en x IS NULL.
Si l'expression est une valeur de ligne, alors IS NULL est vrai quand l'expression même de la ligne est NULL ou quand tous les champs de la ligne sont NULL alors que IS NOT NULL est vrai quand l'expression même de la ligne est non NULL et que tous les champs de la ligne sont non NULL. À cause de ce comportement, IS NULL et IS NOT NULL ne renvoient pas toujours des résultats inversés pour les expressions de lignes, c'est-à-dire une expression de ligne qui contient à la fois des valeurs NULL et des valeurs non NULL retournera faux pour les deux tests. Cette définition, conforme au standard SQL, est une modification du comportement incohérent des versions de PostgreSQL™ antérieures à la 8.2.
L'opérateur standard de comparaison renvoie NULL (ce qui signifie « inconnu ») si l'une des entrées est NULL, ni true ni false, c'est-à-dire 7 = NULL renvoie NULL. Quand ce comportement n'est pas convenable, utilisez la syntaxe IS [NOT] DISTINCT FROM :
expression IS DISTINCT FROM expression expression IS NOT DISTINCT FROM expression
Pour des entrées non NULL, IS DISTINCT FROM est identique à l'opérateur <>. Cependant, si les deux entrées sont NULL, alors cela retourne faux et si une des deux entrées est NULL, alors cela retourne vrai. De la même façon, IS NOT DISTINCT FROM est identique à = pour les entrées non NULL mais il renvoie true si les deux entrées sont NULL et false quand une seule est NULL. Dans ces constructions, NULL n'est plus considéré comme un état inconnu mais comme une valeur.
Les valeurs booléennes peuvent aussi être testées en utilisant les constructions
expression IS TRUE expression IS NOT TRUE expression IS FALSE expression IS NOT FALSE expression IS UNKNOWN expression IS NOT UNKNOWN
Elles retournent toujours true ou false, jamais une valeur NULL, même si l'opérande est NULL. Une entrée NULL est traitée comme la valeur logique « inconnue ». IS UNKNOWN et IS NOT UNKNOWN sont réellement identiques à IS NULL et IS NOT NULL, respectivement, sauf que l'expression en entrée doit être de type booléen.