- Catégories :
VALUES¶
Dans l’instruction SELECT, la sous-clause VALUES de la clause FROM permet de spécifier un ensemble de constantes afin de former un ensemble fini de lignes.
(Pour plus d’informations sur la clause VALUES
dans l’instruction INSERT
, voir la documentation de l’instruction INSERT.)
Syntaxe¶
SELECT ...
FROM ( VALUES ( <expr> [ , <expr> [ , ... ] ] ) [ , ( ... ) ] ) [ [ AS ] <table_alias> [ ( <column_alias> [, ... ] ) ] ]
[ ... ]
table_alias
Un alias facultatif peut être utilisé pour donner un nom à l’ensemble de lignes, comme si l’ensemble de lignes était une table.
column_alias
Des alias de colonnes facultatifs peuvent être utilisés pour donner les noms des colonnes.
expr
Chaque expression doit être une constante ou une expression pouvant être évaluée comme une constante lors de la compilation de l’instruction SQL.
La plupart des expressions arithmétiques simples et des fonctions de chaîne peuvent être évaluées au moment de la compilation, mais la plupart des autres expressions ne le peuvent pas.
Notes sur l’utilisation¶
Dans une clause FROM, une clause VALUES ne peut pas contenir le mot clé
DEFAULT
. Cela contraste avec la clause VALUES d’une instruction INSERT, qui prend en charge l’utilisation deDEFAULT
(par exemple,INSERT INTO table VALUES (10, DEFAULT, 'Name') ...
).La clause VALUES est limitée à 16 384 lignes.
Exemples¶
La clause VALUES est utile pour générer un ensemble de lignes fixe connu :
SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')); +---------+---------+ | COLUMN1 | COLUMN2 | |---------+---------| | 1 | one | | 2 | two | | 3 | three | +---------+---------+ SELECT column1, $2 FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')); +---------+-------+ | COLUMN1 | $2 | |---------+-------| | 1 | one | | 2 | two | | 3 | three | +---------+-------+Notez que les valeurs peuvent être référencées par la colonne « name » (implicite) ou par la position de la colonne.
Si votre requête utilise plusieurs clauses VALUES, vous pouvez utiliser un alias pour les distinguer, par exemple :
SELECT v1.$2, v2.$2 FROM (VALUES (1, 'one'), (2, 'two')) AS v1 INNER JOIN (VALUES (1, 'One'), (3, 'three')) AS v2 WHERE v2.$1 = v1.$1;
Vous pouvez également spécifier des alias pour les noms de colonne :
SELECT c1, c2 FROM (VALUES (1, 'one'), (2, 'two')) AS v1 (c1, c2);