| Documentation PostgreSQL 7.2 | ||
|---|---|---|
| <<< Previous | Syntaxe SQL | Next >>> |
Les expressions de valeur sont utilisées dans des contextes différents, comme dans une liste cible d'une commande SELECT, ou de nouvelles valeurs de colonnes dans un INSERT ou un UPDATE, ou des conditions de recherche dans des commandes. Le résultat d'une expression de valeur est quelque fois appelé une scalar, pour la distinguer du résultat d'une expression de table (laquelle est une table). Les expressions de valeur sont donc appelées scalar expressions (ou même simplement expressions). La syntaxe des expressions admet le calcul de valeurs d'une primitive des opérations arithmétiques, logiques, ensemblistes ou autres.
Une expression de valeur est indiquée comme :
Une constante ou une valeur littérale; voir the section called Constantes.
Une référence de colonne.
Une référence de paramètre de position, dans le corps d'une déclaration de fonction.
Un opérateur d'invocation.
Un appel fonction.
Une expression d'agrégation.
Une coercition de type.
Une sous-requête modulable.
( expression ) |
Les parenthèses sont utilisées pour grouper les sous-expressions ou outrepasser la priorité.
En plus de cette liste, il y a un grand nombre de constructions qui peuvent être classées comme expression mais ne suivent pas les règles générales de syntaxe. Elles possèdent généralement la sémantique d'une fonction ou d'un opérateur et sont expliquées dans the chapter called Fonctions et Opérateurs. Comme exemple la clause IS NULL.
Nous avons déjà vu les constantes dans the section called Constantes. Les sections suivantes détaillent les oprions restantes.
une colonne peut être référencée par la forme :
correlation.columnname `['subscript`]' |
Un paramètre de position est utilisé pour indiquer un paramètre dans une fonction SQL. Typiquement il est utilisé dans les définitions de fonction SQL. La forme du paramètre est :
$number |
par exemple, considérez la définition d'une fonction, dept, comme
CREATE FUNCTION dept (text) RETURNS dept AS 'SELECT * FROM dept WHERE name = $1' LANGUAGE SQL; |
Il existe trois syntaxes possibles pour un opérateur d'invocation :
| expression operator expression (opérateur binaire inséré) |
| operator expression (opérateur unaire préfixé) |
| expression operator (opérateur unaire postfixé) |
La syntaxe d'un appel fonction est le nom d'une fonction (laquelle est sujette aux règles de syntaxe des identifiants de the section called Identifiants et mots-clé), suivi par sa liste d'arguments entre parenthèses :
function ([expression [, expression ... ]] ) |
Par exemple celle-ci calcule la racine carrée de 2 :
sqrt(2) |
La liste des fonctions natives se trouve dans the chapter called Fonctions et Opérateurs. D'autres fonctions peuvent être ajoutées par l'utilisateur.
Une expression d'agrégation représente l'application d'une fonction d'agrégation dans les lignes sélectionnées par une requête. Une fonction d'agrégation réduit les entrées multiples à une seule valeur de sortie, comme la somme ou la moyenne des entrées. La syntaxe d'une expression d'agrégation se présente comme suit :
| aggregate_name (expression) |
| aggregate_name (ALL expression) |
| aggregate_name (DISTINCT expression) |
| aggregate_name ( * ) |
La première forme d'une expression d'agrégation invoque l'agrégat à travers toutes les entrées lignes pour lesquelles l'expression donnée produit une valeur non NULL. (Actuellement la fonction agrégat soit ignore les NULL ou non --- mais tous les standards le font.) La seconde forme est identique à la première, depuis que ALL est la valeur par défaut. La troisième forme invoque l'agrégat pour toutes les valeurs non NULL distinctes de l'expression trouvée dans les entrées ligne. La dernière forme invoque l'agrégat une seule fois pour chaque entrée ligne en fonction des valeurs NULL ou non NULL; aucune valeur d'entrée particulière n'est spécifiée, c'est généralement seulement utile la fonction agrégat count().
Par exemple, count(*) produit le nombre total des entrées ligne; count(f1) produit le nombre des entrées lignes dans lesquelles f1 est non NULL; count(distinct f1) produit le nombre des valeurs non NULL distinctes de f1.
Les fonctions d'agrégations pré définies sont décrites dans the section called Fonctions d'agrégation in the chapter called Fonctions et Opérateurs. D'autres fonctions d'agrégation peuvent être définies par l'utilisateur.
Une coercition de type spécifie une conversion depuis un type de donnée vars un autre. PostgreSQL accèpte deux syntaxes équivalentes pour les coercitions de type :
CAST ( expression AS type ) expression::type |
Quand une coercition est appliquée à une expression de valeur d'un type connu, elle représente une conversion de type délai d'exécution. Le forçage sera accepté si une fonction conversion de type appropriée est disponible. Notez que c'est subtilement différent de l'utilisation des forçages avec des constantes, comme indiqué dans the section called Constantes d'autres types. Une forçage appliqué à une chaîne naturelle représente l'affectation initiale d'un type à une valeur de constante littérale, ainsi elle sera acceptée pour n'importe quel type (si le contenu d'une chaîne littérale possède une syntaxe correcte au niveau des entrées pour le type de donnée).
Une forçage de type explicite peut être omis s'il n'y a pas d'ambiguïté dans le type qu'une expression de valeur doit produire (par exemple, quand elle est assignée à une colonne de table); le système appliquera automatiquement un forçage de type dans ces cas là.
Il est possible de spécifier un forçage de type en utilisant une syntaxe de type fonction.
typename ( expression ) |
Une sous requête modulable est un SELECT ordinaire entre parenthèses qui renvoie exactement une ligne avec une colonne. La requête SELECT est exécutée et la valeur en retour est utilisée dans l'expression de valeur ambiante. C'est une erreur d'utiliser une requête qui renvoie plus d'une ligne ou plus d'une colonne comme une sous requête modulable. (Mais si, durant une exécution particulière, la sous requête ne renvoie pas de lignes, il n'y a pas d'erreur; le résultat est pris comme non NULL). La sous requête peut se référer aux variables de la requête ambiante, qui agira comme constante pendant n'importe quelle évaluation de la sous requête. Voir aussi the section called Expressions sous requêtes in the chapter called Fonctions et Opérateurs.
Par exemple, la suivante retrouve les villes les plus peuplées dans chaque état :
SELECT name, (SELECT max(pop) FROM cities WHERE cities.state = states.name) FROM states; |
| <<< Previous | Home | Next >>> |
| Colonnes | Up | Priorité lexicale |