Values テーブル関数を使用すると、カラムに値を設定した一時ストレージを作成できます。これは、簡単なテストやサンプルデータの生成に便利です。
Values は大文字と小文字を区別しない関数です。つまり、VALUES と values はどちらも有効です。
VALUES テーブル関数の基本構文は次のとおりです。
VALUES([structure,] values...)
一般的には次のように使用します:
VALUES(
['column1_name Type1, column2_name Type2, ...'],
(value1_row1, value2_row1, ...),
(value1_row2, value2_row2, ...),
...
)
column1_name Type1, ... (省略可) 。String
カラム名と型を指定します。この引数を省略すると、カラム名は
c1、c2 などになります。
(value1_row1, value2_row1)。Tuples
任意の型の値を含むタプルです。
カンマ区切りのタプルは、単一の値に置き換えることもできます。この場合、
各値はそれぞれ新しい行として扱われます。詳細は examples セクションを
参照してください。
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 は、タプルではなく単一の値に対して使用することもできます。たとえば:
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 │
└──────────┘
または、行の指定 (構文 の 'column1_name Type1, column2_name Type2, ...'
) を省略した場合、カラム名は自動的に付けられます。
例えば:
-- タプルを値として使用
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 │
└──────────┴───────────┘
-- 単一の値
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 │
└──────────┘
ClickHouse はバージョン 26.3 以降、PostgreSQL、MySQL、DuckDB、SQL Server と同様に、FROM 句内のテーブル式として SQL 標準の VALUES 句もサポートしています。この構文は、内部的には上で説明した values テーブル関数を使う形に書き換えられます。
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
┌─id─┬─val─┐
│ 1 │ a │
│ 2 │ b │
│ 3 │ c │
└────┴─────┘
CTEでも使用できます。
WITH cte AS (SELECT * FROM (VALUES (1, 'one'), (2, 'two')) AS t(id, name))
SELECT * FROM cte;
また、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;
AS t(col1, col2, ...) の後に指定するカラムの別名は、派生テーブルのカラム名を指定するための標準的な SQL 構文に従います。省略した場合、カラム名は c1、c2 などになります。