La fonction de table Values vous permet de créer un stockage temporaire dont les
colonnes sont remplies de valeurs. Elle est utile pour effectuer des tests rapides ou générer des données d’exemple.
Values est une fonction insensible à la casse. Autrement dit, VALUES et values sont tous les deux valides.
La syntaxe de base de la fonction de table VALUES est la suivante :
VALUES([structure,] values...)
Il s’utilise généralement comme suit :
VALUES(
['column1_name Type1, column2_name Type2, ...'],
(value1_row1, value2_row1, ...),
(value1_row2, value2_row2, ...),
...
)
column1_name Type1, ... (facultatif). String
indiquant les noms et les types des colonnes. Si cet argument est omis, les colonnes seront
nommées c1, c2, etc.
(value1_row1, value2_row1). Tuples
contenant des valeurs de n’importe quel type.
Les tuples séparés par des virgules peuvent également être remplacés par des valeurs individuelles. Dans ce cas,
chaque valeur est interprétée comme une nouvelle ligne. Consultez la section exemples pour plus de
détails.
- Renvoie une table temporaire contenant les valeurs spécifiées.
SELECT *
FROM VALUES(
'person String, place String',
('Noah', 'Paris'),
('Emma', 'Tokyo'),
('Liam', 'Sydney'),
('Olivia', 'Berlin'),
('Ilya', 'London'),
('Sophia', 'London'),
('Jackson', 'Madrid'),
('Alexey', 'Amsterdam'),
('Mason', 'Venice'),
('Isabella', 'Prague')
)
┌─person───┬─place─────┐
1. │ Noah │ Paris │
2. │ Emma │ Tokyo │
3. │ Liam │ Sydney │
4. │ Olivia │ Berlin │
5. │ Ilya │ London │
6. │ Sophia │ London │
7. │ Jackson │ Madrid │
8. │ Alexey │ Amsterdam │
9. │ Mason │ Venice │
10. │ Isabella │ Prague │
└──────────┴───────────┘
VALUES peut également être utilisé avec des valeurs simples plutôt qu’avec des tuples. Par exemple :
SELECT *
FROM VALUES(
'person String',
'Noah',
'Emma',
'Liam',
'Olivia',
'Ilya',
'Sophia',
'Jackson',
'Alexey',
'Mason',
'Isabella'
)
┌─person───┐
1. │ Noah │
2. │ Emma │
3. │ Liam │
4. │ Olivia │
5. │ Ilya │
6. │ Sophia │
7. │ Jackson │
8. │ Alexey │
9. │ Mason │
10. │ Isabella │
└──────────┘
Ou sans fournir de spécification de ligne ('column1_name Type1, column2_name Type2, ...'
dans la syntaxe), les colonnes étant alors nommées automatiquement.
Par exemple :
-- tuples as values
SELECT *
FROM VALUES(
('Noah', 'Paris'),
('Emma', 'Tokyo'),
('Liam', 'Sydney'),
('Olivia', 'Berlin'),
('Ilya', 'London'),
('Sophia', 'London'),
('Jackson', 'Madrid'),
('Alexey', 'Amsterdam'),
('Mason', 'Venice'),
('Isabella', 'Prague')
)
┌─c1───────┬─c2────────┐
1. │ Noah │ Paris │
2. │ Emma │ Tokyo │
3. │ Liam │ Sydney │
4. │ Olivia │ Berlin │
5. │ Ilya │ London │
6. │ Sophia │ London │
7. │ Jackson │ Madrid │
8. │ Alexey │ Amsterdam │
9. │ Mason │ Venice │
10. │ Isabella │ Prague │
└──────────┴───────────┘
-- single values
SELECT *
FROM VALUES(
'Noah',
'Emma',
'Liam',
'Olivia',
'Ilya',
'Sophia',
'Jackson',
'Alexey',
'Mason',
'Isabella'
)
┌─c1───────┐
1. │ Noah │
2. │ Emma │
3. │ Liam │
4. │ Olivia │
5. │ Ilya │
6. │ Sophia │
7. │ Jackson │
8. │ Alexey │
9. │ Mason │
10. │ Isabella │
└──────────┘
Clause VALUES standard SQL
À partir de la version 26.3, ClickHouse prend également en charge la clause VALUES standard SQL en tant qu’expression de table
dans FROM, comme dans PostgreSQL, MySQL, DuckDB et SQL Server. Cette syntaxe est
réécrite en interne pour utiliser la fonction de table values décrite ci-dessus.
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
┌─id─┬─val─┐
│ 1 │ a │
│ 2 │ b │
│ 3 │ c │
└────┴─────┘
Il peut être utilisé dans des CTE :
WITH cte AS (SELECT * FROM (VALUES (1, 'one'), (2, 'two')) AS t(id, name))
SELECT * FROM cte;
Et dans les clauses JOIN :
SELECT t1.id, t1.val, t2.val2
FROM (VALUES (1, 'a'), (2, 'b')) AS t1(id, val)
JOIN (VALUES (1, 'x'), (2, 'y')) AS t2(id, val2) ON t1.id = t2.id;
Les alias de colonnes après AS t(col1, col2, ...) suivent la syntaxe SQL standard pour
nommer les colonnes des tables dérivées. S’ils sont omis, les colonnes sont nommées c1, c2, etc.