sql >> Base de Datos >  >> RDS >> PostgreSQL

Explicación del comando VALUES de PostgreSQL

En PostgreSQL, los VALUES El comando devuelve un conjunto de una o más filas como una tabla. Es un constructor de valores de tabla que se puede usar como parte de un comando más grande o como una declaración SQL independiente.

Sintaxis

La sintaxis oficial es así:

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

Ejemplo

Aquí hay un ejemplo simple para demostrar cómo funciona:

VALUES (1, 2, 3), (4, 5, 6);

Resultado:

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

Las columnas resultantes se denominan implícitamente column1 , column2 , column3 y así sucesivamente (aunque esto se puede cambiar; consulte SELECT opción de declaración más adelante en este artículo).

Cada fila está definida por uno o más valores encerrados entre paréntesis. Cuando se especifica más de una fila, todas las filas deben tener el mismo número de elementos

Aquí hay otro ejemplo:

VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');

Resultado:

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

El ORDER BY Cláusula

La sintaxis permite el uso de ORDER BY cláusula para ordenar los resultados.

Ejemplo:

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 |
+---------+---------+---------+

El LIMIT Cláusula

Podemos usar el LIMIT cláusula para limitar el número de filas que se generan:

VALUES 
    ('Peter', 'Griffin'), 
    ('Homer', 'Simpson'), 
    ('Ned', 'Flanders')
LIMIT 2;

Resultado:

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

El OFFSET Cláusula

Aquí hay un ejemplo del uso de OFFSET cláusula con 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 |
+---------+---------+----------+

El FETCH Cláusula

Aquí hay un ejemplo del uso de 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 un SELECT Declaración

También podemos usar los VALUES declaración dentro de un SELECT declaración, como si los VALUES el constructor de la tabla fuera una tabla 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 constructor de fila debe contener la misma cantidad de valores

Cada constructor de fila en el mismo VALUES declaración debe tener el mismo número de valores en su lista de valores.

Por lo tanto, no podemos hacer esto:

VALUES (1, 2), (3);

Resultado:

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

Usando VALUES para insertar datos

Podemos usar los VALUES instrucción junto con INSERT instrucción para insertar datos en una tabla.

Ejemplo:

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

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

Eso creó una tabla llamada Idiots e insertó tres filas en él.

Ahora podemos usar un SELECT instrucción para ver los nuevos valores en la tabla:

SELECT * FROM Idiots;

Resultado:

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