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