メインコンテンツへスキップ
メインコンテンツへスキップ

Values テーブル関数

Values テーブル関数を使用すると、一時的なストレージを作成し、そのカラムを値で埋めることができます。簡単なテストやサンプルデータの生成に便利です。

注記

Values は大文字小文字を区別しない関数です。つまり、VALUESvalues のどちらも有効です。

構文

VALUES テーブル関数の基本構文は次のとおりです。

VALUES([structure,] values...)

一般的には次のように使われます:

VALUES(
    ['column1_name Type1, column2_name Type2, ...'],
    (value1_row1, value2_row1, ...),
    (value1_row2, value2_row2, ...),
    ...
)

引数

  • column1_name Type1, ... (省略可) 。カラム名と型を指定するString 型。 この引数を省略した場合、カラム名は c1c2 などになります。
  • (value1_row1, value2_row1)Tuples 任意の型の値を含むタプル。
注記

カンマ区切りのタプルは、単一の値で置き換えることもできます。この場合、 各値は新しい行として扱われます。詳細はセクションを参照してください。

戻り値

  • 指定された値を含む一時テーブルを返します。

使用例

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, ...') を指定しない場合は、カラム名が自動的に割り当てられます。

例:

-- 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 │
    └──────────┘

SQL標準のVALUES句

バージョン 26.3 以降、ClickHouse は、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 構文に従います。省略した場合、カラム名は c1c2 などになります。

関連項目