- 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¶
expr
Cada 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_alias
Um alias opcional para dar um nome ao conjunto de linhas, como se o conjunto de linhas fosse uma tabela.
column_alias
Os 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 range
Você 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.
A cláusula VALUES é limitada a 16.384 linhas.
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);