- Categorias:
VALUES¶
Na instrução SELECT, a subcláusula VALUES da cláusula FROM permite especificar um conjunto de constantes para formar um conjunto finito de linhas.
Para obter mais informações sobre a cláusula VALUES na instrução INSERT, consulte a documentação da instrução INSERT.
Sintaxe¶
SELECT ...
FROM ( VALUES ( <expr> [ , <expr> [ , ... ] ] ) [ , ( ... ) ] )
[ [ AS ] <table_alias> [ ( <column_alias> [ , ... ] ) ] ]
[ ... ]
Parâmetros¶
exprCada expressão deve ser uma constante, ou uma expressão que possa ser avaliada como uma constante durante a compilação da instrução SQL.
A maioria das expressões aritméticas simples e funções de string podem ser avaliadas no tempo de compilação, mas a maioria das outras expressões não podem.
table_aliasUm alias opcional para dar um nome ao conjunto de linhas, como se o conjunto de linhas fosse uma tabela.
column_aliasOs aliases opcionais podem especificar os nomes das colunas.
Notas de uso¶
Dentro de uma cláusula FROM, uma cláusula VALUES não pode conter a palavra-chave
DEFAULT. Esta limitação contrasta com uma cláusula VALUES em uma instrução INSERT, que oferece suporte ao uso deDEFAULT. Por exemplo,INSERT INTO table VALUES (10, DEFAULT, 'Name') ....Quando a cláusula VALUES inclui vários valores numéricos para a mesma coluna, e os valores diferem significativamente em escala ou precisão, o Snowflake pode retornar um erro
out of range. O erro pode ser retornado mesmo que cada valor individual não resulte em um erro para o tipo de dados da coluna de destino.O erro ocorre porque o Snowflake determina um tipo de dados numérico comum que pode abranger todos os literais numéricos fornecidos em uma cláusula VALUES, e alguns valores podem estar fora do intervalo para o tipo de dados comum determinado.
Por exemplo, a seguinte instrução retorna um erro
out of range:SELECT column1 FROM VALUES (3.469446951953614e-18), (115898.73);
100039 (22003): Numeric value '115898.73' is out of rangeVocê pode evitar esse tipo de erro fazendo as seguintes mudanças:
Separe os valores na cláusula VALUES em várias instruções SQL.
Converta valores em um tipo de dados com um intervalo mais amplo de valores, como FLOAT. Entretanto, a conversão pode resultar em menor precisão numérica.
Especifique os valores como strings de texto entre aspas e, em seguida, converta os valores em valores numéricos, conforme necessário.
The VALUES clause is limited to 200,000 rows.
Exemplos¶
Os exemplos a seguir usam a cláusula VALUES para gerar um conjunto fixo e conhecido de linhas:
SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+---------+
| COLUMN1 | COLUMN2 |
|---------+---------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+---------+
É possível referenciar valores pelo nome da coluna (implícito) ou pela posição da coluna. O exemplo a seguir faz referência à segunda coluna por posição de coluna:
SELECT column1, $2 FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+-------+
| COLUMN1 | $2 |
|---------+-------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+-------+
O exemplo a seguir distingue várias cláusulas VALUES usando aliases:
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;
Você também pode especificar aliases para os nomes das colunas, conforme mostrado no exemplo a seguir:
SELECT c1, c2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1 (c1, c2);