Priorité lexicale

La priorité et l'associativité des opérateurs sont intégrées dans l'analyseur. La plupart des opérateurs ont la même priorité et sont associés à gauche. Ceci peut conduire à un comportement non intuitif; par exemple les opérateurs booléens < et > ont une priorité différente par rapport aux opérateurs booléens <= and >=. Aussi, nous aurons parfois besoin de rajouter des parenthèses quand nous utilisons des combinaisons d'opérateurs binaires ou unaires. Par exemple

SELECT 5 ! - 6;
sera analysé comme
SELECT 5 ! (- 6);
car l'analyseur n'a pas l'idée que ! est défini comme un opérateur postfixé, pas inséré. Pour obtenir le comportement désiré dans ce cas, vous devez écrire
SELECT (5 !) - 6;
C'est le prix à payer pour l'extensibilité.

Table 1. Operator Precedence (decreasing)

Operator/ElementAssociativityDescription
::leftStyle coercition de type PostgreSQL
[ ]leftSélection élément de tableau
.leftséparateur de nom de table/colonne
-rightmoins unaire
^leftexponentiation
* / %leftmultiplication, division, pourcentage
+ -leftaddition, soustraction
IS test pour TRUE, FALSE, UNKNOWN, NULL
ISNULL test pour NULL
NOTNULL test pour NOT NULL
(n'importe quel autre)lefttous les autres opérateurs natifs ou utilisateurs
IN placement des effectifs
BETWEEN confinement
OVERLAPS chevauchement d'intervalle de temps
LIKE ILIKE chaîne de filtrage
< > moins que, plus grand que
=rightégalité, affectation
NOTrightnégation logique
ANDleftconjonction logique
ORleftdisjonction logique

Notez que les règles de priorité des opérateurs s'appliquent aussi aux opérateurs utilisateur qui ont les mêmes noms que les opérateurs natifs mentionnés précédemment. Par exemple, si vous définissez un opérateur "+" pour certain type de donnée il aura la même priorité que l'opérateur natif "+".