values

values

Values 테이블 함수는 컬럼을 값으로 채우는 임시 저장소를 만들 수 있게 해줘요. 빠른 테스트를 하거나 샘플 데이터를 생성할 때 유용합니다.

Values는 대소문자를 구분하지 않는 함수예요. 즉, VALUESvalues든 둘 다 유효합니다.

출처: 문서

본문

구문(Syntax)

VALUES 테이블 함수의 기본 구문은 다음과 같아요:

VALUES([structure,] values...)

흔히 이렇게 사용합니다:

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

인자(Arguments)

  • column1_name Type1, ... (선택). String으로 컬럼 이름과 타입을 지정. 이 인자를 생략하면 컬럼은 c1, c2 등으로 이름이 붙어요.
  • (value1_row1, value2_row1). 임의 타입의 값을 담은 튜플(Tuples).

쉼표로 구분된 튜플 대신 단일 값도 쓸 수 있어요. 이 경우 각 값은 새 행으로 취급됩니다. 자세한 내용은 예시 섹션을 참고하세요.

반환 값(Returned value)

  • 제공된 값을 담은 임시 테이블을 반환.

예시(Examples)

쿼리(Query)

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')
)

응답(Response)

    ┌─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는 튜플 대신 단일 값으로도 사용할 수 있어요. 예를 들어:

쿼리(Query)

SELECT *
FROM VALUES(
    'person String',
    'Noah',
    'Emma',
    'Liam',
    'Olivia',
    'Ilya',
    'Sophia',
    'Jackson',
    'Alexey',
    'Mason',
    'Isabella'
)

응답(Response)

    ┌─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, ...')을 제공하지 않아도 되며, 이 경우 컬럼이 자동으로 이름 붙습니다(구문 참고). 예를 들어:

쿼리(Query)

-- 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')
)

응답(Response)

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

쿼리(Query)

-- single values
SELECT *
FROM VALUES(
    'Noah',
    'Emma',
    'Liam',
    'Olivia',
    'Ilya',
    'Sophia',
    'Jackson',
    'Alexey',
    'Mason',
    'Isabella'
)

응답(Response)

    ┌─c1───────┐
 1. │ Noah     │
 2. │ Emma     │
 3. │ Liam     │
 4. │ Olivia   │
 5. │ Ilya     │
 6. │ Sophia   │
 7. │ Jackson  │
 8. │ Alexey   │
 9. │ Mason    │
10. │ Isabella │
    └──────────┘

SQL 표준 VALUES 절 (SQL Standard VALUES Clause)

버전 26.3부터 ClickHouse는 PostgreSQL, MySQL, DuckDB, SQL Server에서처럼 FROM 안의 테이블 표현식으로 SQL 표준 VALUES 절도 지원해요. 이 구문은 내부적으로 위에서 설명한 values 테이블 함수를 사용하도록 재작성됩니다.

쿼리(Query)

SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);

응답(Response)

┌─id─┬─val─┐
│  1 │ a   │
│  2 │ b   │
│  3 │ c   │
└────┴─────┘

CTE에서 사용할 수 있어요:

쿼리(Query)

WITH cte AS (SELECT * FROM (VALUES (1, 'one'), (2, 'two')) AS t(id, name))
SELECT * FROM cte;

그리고 JOIN에서도 사용할 수 있어요:

쿼리(Query)

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, ...) 뒤의 컬럼 별칭은 유도 테이블(derived table)의 컬럼 이름을 붙이는 표준 SQL 구문을 따릅니다. 생략하면 컬럼은 c1, c2 등으로 이름이 붙어요.

더 알아보기 (Learn more)