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). 튜플
모든 타입의 값을 담고 있습니다.
쉼표로 구분된 튜플은 단일 값으로 대체할 수도 있습니다. 이 경우
각 값은 새 행으로 처리됩니다. 자세한 내용은 예시 섹션을
참조하십시오.
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 │
└──────────┘
버전 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;
조인에서는:
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 등으로 지정됩니다.