7.7. Listas VALUES #

VALUES proporciona uma maneira de gerar uma tabela de constantes que pode ser usada em uma consulta sem ter que realmente criar e preencher uma tabela em disco. A sintaxe é:

VALUES ( expressão [, ...] ) [, ...]

Cada lista de expressões entre parênteses gera uma linha na tabela. Todas as listas devem ter o mesmo número de elementos (ou seja, o número de colunas na tabela), e as entradas correspondentes em cada lista devem ter tipos de dados compatíveis. Os tipos de dados reais atribuídos a cada coluna do resultado é determinado usando as mesmas regras que para UNION (veja a Seção 10.5).

Como exemplo:

VALUES (1, 'one'), (2, 'two'), (3, 'three');

retorna uma tabela com duas colunas e três linhas. É de fato equivalente a:

SELECT 1 AS column1, 'one' AS column2
UNION ALL
SELECT 2, 'two'
UNION ALL
SELECT 3, 'three';

Por padrão, o PostgreSQL atribui os nomes column1, column2, etc. para as colunas da tabela VALUES. Os nomes das colunas não são especificados pelo padrão SQL, então diferentes sistemas de banco de dados fazem isto de maneira diferente, portanto é geralmente melhor substituir os nomes padrão por uma lista de alias de tabela, assim:

=> SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three')) AS t (num,letter);

 num | letter
-----+--------
   1 | one
   2 | two
   3 | three
(3 linhas)

Sintaticamente, VALUES seguido por listas de expressões é tratado como equivalente a

SELECT lista_de_seleção FROM expressão_de_tabela

e pode aparecer em qualquer lugar onde o SELECT possa aparecer. Por exemplo, pode ser usado como parte de uma UNION, ou pode ser anexada uma especificação_de_ordenação (ORDER BY, LIMIT e/ou OFFSET) a ele. VALUES é mais comumente usado como fonte de dados em um comando INSERT, e o próximo mais comum como uma subconsulta.

Para obter mais informações veja VALUES.