PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Comando PostgreSQL VALUES explicado


No PostgreSQL, os VALUES O comando retorna um conjunto de uma ou mais linhas como uma tabela. É um construtor de valor de tabela que pode ser usado como parte de um comando maior ou como uma instrução SQL independente.

Sintaxe


A sintaxe oficial é assim:
VALUES ( expression [, ...] ) [, ...]
    [ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]

Exemplo


Aqui está um exemplo simples para demonstrar como funciona:
VALUES (1, 2, 3), (4, 5, 6);

Resultado:
+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       1 |       2 |       3 |
|       4 |       5 |       6 |
+---------+---------+---------+

As colunas resultantes são chamadas implicitamente de column1 , column2 , column3 e assim por diante (embora isso possa ser alterado – veja o SELECT opção de instrução mais adiante neste artigo).

Cada linha é definida por um ou mais valores entre parênteses. Quando mais de uma linha é especificada, todas as linhas devem ter o mesmo número de elementos

Aqui está outro exemplo:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');

Resultado:
+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Bart    | Simpson |
+---------+---------+

O ORDER BY Cláusula


A sintaxe permite o uso do ORDER BY cláusula para ordenar os resultados.

Exemplo:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC;

Resultado:
+---------+---------+---------+
| column1 | column2 | column3 |
+---------+---------+---------+
|       7 |       8 |       9 |
|       4 |       5 |       6 |
|       1 |       2 |       3 |
+---------+---------+---------+

O LIMIT Cláusula


Podemos usar o LIMIT cláusula para limitar o número de linhas que são geradas:
VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders')
LIMIT 2;

Resultado:
+---------+---------+
| column1 | column2 |
+---------+---------+
| Peter   | Griffin |
| Homer   | Simpson |
+---------+---------+

O OFFSET Cláusula


Aqui está um exemplo de uso do OFFSET cláusula com os VALUES comando:
VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
OFFSET 3;

Resultado:
+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       4 | Barney  | Rubble   |
|       5 | George  | Costanza |
+---------+---------+----------+

O FETCH Cláusula


Aqui está um exemplo de uso do FETCH cláusula:
VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders'), 
    (4, 'Barney', 'Rubble'), 
    (5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; 

Resultado:
+---------+---------+----------+
| column1 | column2 | column3  |
+---------+---------+----------+
|       1 | Peter   | Griffin  |
|       2 | Homer   | Simpson  |
|       3 | Ned     | Flanders |
+---------+---------+----------+

Dentro de um SELECT Declaração


Também podemos usar os VALUES declaração dentro de um SELECT instrução, como se os VALUES construtor de tabela eram uma tabela real:
SELECT
   FirstName,
   LastName
FROM
   (VALUES 
        (1, 'Peter', 'Griffin'), 
        (2, 'Homer', 'Simpson'), 
        (3, 'Ned', 'Flanders')
   ) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;

Resultado:
+-----------+----------+
| firstname | lastname |
+-----------+----------+
| Homer     | Simpson  |
+-----------+----------+

Cada construtor de linha deve conter o mesmo número de valores


Cada construtor de linha no mesmo VALUES A instrução deve ter o mesmo número de valores em sua lista de valores.

Portanto, não podemos fazer isso:
VALUES (1, 2), (3);

Resultado:
ERROR:  VALUES lists must all be the same length
LINE 1: VALUES (1, 2), (3);
                        ^

Usando VALUES para inserir dados


Podemos usar os VALUES instrução em conjunto com o INSERT instrução para inserir dados em uma tabela.

Exemplo:
CREATE TABLE Idiots (
    IdiotId int,
    FirstName varchar(50),
    LastName varchar(50)
    );

INSERT INTO Idiots VALUES 
    (1, 'Peter', 'Griffin'), 
    (2, 'Homer', 'Simpson'), 
    (3, 'Ned', 'Flanders');

Isso criou uma tabela chamada Idiots e inseriu três linhas nele.

Agora podemos usar um SELECT instrução para ver os novos valores na tabela:
SELECT * FROM Idiots;

Resultado:
+---------+-----------+----------+
| idiotid | firstname | lastname |
+---------+-----------+----------+
|       1 | Peter     | Griffin  |
|       2 | Homer     | Simpson  |
|       3 | Ned       | Flanders |
+---------+-----------+----------+