Catégories :

Syntaxe de requête

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> [, ... ] ) ] ]
[ ... ]
Copy
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 de DEFAULT (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 |
+---------+-------+
Copy

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;
Copy

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);
Copy