- Catégories :
VALUES¶
Dans l’instruction SELECT, la sous-clause VALUES de la clause FROM vous 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> [ , ... ] ) ] ]
[ ... ]
Paramètres¶
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.
table_alias
Alias facultatif 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 spécifier les noms des colonnes.
Notes sur l’utilisation¶
Dans une clause FROM, une clause VALUES ne peut pas contenir le mot clé
DEFAULT
. Cette limite est en 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') ...
.Lorsque la clause VALUES comprend plusieurs valeurs numériques pour la même colonne et que les valeurs diffèrent considérablement en échelle ou en précision, Snowflake peut renvoyer une erreur
out of range
. L’erreur peut être renvoyée même si chaque valeur individuelle n’entraîne pas d’erreur pour le type de données de la colonne cible.L’erreur se produit parce que Snowflake détermine un type de données numérique commun qui peut englober tous les littéraux numériques fournis dans une clause VALUES, et certaines valeurs peuvent être hors limites pour le type de données commun déterminé.
Par exemple, l’instruction suivante renvoie une erreur
out of range
:SELECT column1 FROM VALUES (3.469446951953614e-18), (115898.73);
100039 (22003): Numeric value '115898.73' is out of range
Vous pouvez éviter ce type d’erreur en apportant les modifications suivantes :
Séparer les valeurs dans une clause VALUES en plusieurs instructions SQL.
Convertir les valeurs en un type de données avec une plus grande plage de valeurs, tel que FLOAT. Toutefois, la conversion peut entraîner une perte de précision numérique.
Spécifiez les valeurs sous forme de chaînes de texte entre guillemets, puis convertissez les valeurs en valeurs numériques si nécessaire.
La clause VALUES est limitée à 16 384 lignes.
Exemples¶
Les exemples suivants utilisent la clause VALUES pour générer un ensemble fixe connu de lignes :
SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+---------+
| COLUMN1 | COLUMN2 |
|---------+---------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+---------+
Vous pouvez faire référence à des valeurs soit par nom de colonne (implicite), soit par position de colonne. L’exemple suivant fait référence à la deuxième colonne par sa position :
SELECT column1, $2 FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+-------+
| COLUMN1 | $2 |
|---------+-------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+-------+
L’exemple suivant distingue plusieurs clauses VALUES en utilisant des alias :
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 colonnes, comme indiqué dans l’exemple suivant :
SELECT c1, c2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1 (c1, c2);