La función de tabla Values le permite crear un almacenamiento temporal que rellena
columnas con valores. Resulta útil para realizar pruebas rápidas o generar datos de ejemplo.
Values es una función que no distingue entre mayúsculas y minúsculas. Es decir, tanto VALUES como values son válidos.
La sintaxis básica de la función de tabla VALUES es:
VALUES([structure,] values...)
Se suele usar como:
VALUES(
['column1_name Type1, column2_name Type2, ...'],
(value1_row1, value2_row1, ...),
(value1_row2, value2_row2, ...),
...
)
column1_name Type1, ... (opcional). String
que especifica los nombres y tipos de columna. Si se omite este argumento, las columnas
se denominarán c1, c2, etc.
(value1_row1, value2_row1). Tuples
que contienen valores de cualquier tipo.
Las tuplas separadas por comas también pueden sustituirse por valores individuales. En este caso,
cada valor se considera una nueva fila. Consulta la sección de ejemplos para obtener
más información.
- Devuelve una tabla temporal que contiene los valores proporcionados.
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 también puede usarse con valores individuales en lugar de tuplas. Por ejemplo:
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 │
└──────────┘
O bien, sin proporcionar una especificación de fila ('column1_name Type1, column2_name Type2, ...'
en la sintaxis), en cuyo caso las columnas se nombran automáticamente.
Por ejemplo:
-- tuplas como valores
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 │
└──────────┴───────────┘
-- valores individuales
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 │
└──────────┘
Cláusula VALUES del estándar SQL
A partir de la versión 26.3, ClickHouse también admite la cláusula VALUES del estándar SQL como una expresión de tabla
en FROM, tal como se utiliza en PostgreSQL, MySQL, DuckDB y SQL Server. Esta sintaxis se
reescribe internamente para usar la función de tabla values descrita anteriormente.
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
┌─id─┬─val─┐
│ 1 │ a │
│ 2 │ b │
│ 3 │ c │
└────┴─────┘
Puede usarse en CTEs:
WITH cte AS (SELECT * FROM (VALUES (1, 'one'), (2, 'two')) AS t(id, name))
SELECT * FROM cte;
Y en los JOINs:
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;
Los alias de columna después de AS t(col1, col2, ...) siguen la sintaxis SQL estándar para
nombrar las columnas de las tablas derivadas. Si se omiten, las columnas se llaman c1, c2, etc.