- 카테고리:
VALUES¶
SELECT 문에서 FROM 절의 하위 절 VALUES를 사용하면 상수 세트를 지정하여 행의 유한 세트를 만들 수 있습니다.
INSERT 문의 VALUES 절에 대한 내용은 INSERT 문의 설명서를 참조하세요.
구문¶
SELECT ...
FROM ( VALUES ( <expr> [ , <expr> [ , ... ] ] ) [ , ( ... ) ] )
[ [ AS ] <table_alias> [ ( <column_alias> [ , ... ] ) ] ]
[ ... ]
매개 변수¶
expr
각 식은 상수이거나, SQL 문을 컴파일하는 동안 상수로 평가할 수 있는 식이어야 합니다.
대부분의 간단한 산술 식 및 문자열 함수는 컴파일 시간에 평가할 수 있지만, 대부분의 다른 식은 평가할 수 없습니다.
table_alias
행 세트가 테이블인 것처럼 행 세트에 이름으로 지정할 수 있는 선택적 별칭입니다.
column_alias
선택적 열 별칭으로 열 이름을 지정할 수 있습니다.
사용법 노트¶
FROM 절 내부에서, VALUES 절은
DEFAULT
키워드를 포함할 수 없습니다. 이 제한은DEFAULT
사용을 지원하는 INSERT 문의 VALUES 절과는 대조됩니다(예:INSERT INTO table VALUES (10, DEFAULT, 'Name') ...
).VALUES 절에 동일한 열에 대한 여러 숫자 값이 포함되어 있고 값의 소수 자릿수 또는 전체 자릿수가 크게 다른 경우 Snowflake는
out of range
오류를 반환할 수 있습니다. 각 개별 값으로 인해 대상 열의 데이터 타입에 대한 오류가 발생하지 않더라도 이 오류가 반환될 수 있습니다.이 오류가 발생하는 이유는 Snowflake에서 VALUES 절에 제공되는 모든 숫자 리터럴을 포함할 수 있는 공통의 숫자 데이터 타입을 결정하며 일부 값이 결정된 공통 데이터 타입의 범위를 벗어날 수 있기 때문입니다.
예를 들어, 다음 문은
out of range
오류를 반환합니다.SELECT column1 FROM VALUES (3.469446951953614e-18), (115898.73);
100039 (22003): Numeric value '115898.73' is out of range
다음과 같이 변경하면 이러한 타입의 오류를 방지할 수 있습니다.
VALUES 절의 값을 여러 SQL 문으로 구분합니다.
값의 범위가 더 넓은 데이터 타입(예: FLOAT)으로 값을 캐스팅합니다. 그러나 캐스팅하면 전체 자릿수가 줄어들 수 있습니다.
값을 따옴표로 묶인 텍스트 문자열로 지정한 다음, 필요에 따라 값을 숫자 값으로 변환합니다.
VALUES 절은 16,384행으로 제한됩니다.
예¶
다음 예제에서는 VALUES 절을 사용하여 알려진 고정 행 세트를 생성합니다.
SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+---------+
| COLUMN1 | COLUMN2 |
|---------+---------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+---------+
열 이름(암시적) 또는 열 위치로 값을 참조할 수 있습니다. 다음 예제에서는 열 위치로 두 번째 열을 참조합니다.
SELECT column1, $2 FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+-------+
| COLUMN1 | $2 |
|---------+-------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+-------+
다음 예제에서는 별칭을 사용하여 여러 VALUES 절을 구분합니다.
SELECT v1.$2, v2.$2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1
INNER JOIN (VALUES (1, 'One'), (3, 'three')) AS v2
WHERE v2.$1 = v1.$1;
다음 예제와 같이 열 이름의 별칭을 지정할 수도 있습니다.
SELECT c1, c2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1 (c1, c2);