Trong PostgreSQL, VALUES
lệnh trả về một tập hợp một hoặc nhiều hàng dưới dạng bảng. Nó là một hàm tạo giá trị bảng có thể được sử dụng như một phần của lệnh lớn hơn hoặc như một câu lệnh SQL độc lập.
Cú pháp
Cú pháp chính thức như sau:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh cách nó hoạt động:
VALUES (1, 2, 3), (4, 5, 6);
Kết quả:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 1 | 2 | 3 | | 4 | 5 | 6 | +---------+---------+---------+
Các cột kết quả được đặt tên ngầm định là column1
, column2
, column3
và v.v. (mặc dù, điều này có thể được thay đổi - xem SELECT
tùy chọn câu lệnh ở phần sau của bài viết này).
Mỗi hàng được xác định bởi một hoặc nhiều giá trị được đặt trong dấu ngoặc đơn. Khi nhiều hơn một hàng được chỉ định, tất cả các hàng phải có cùng số phần tử
Đây là một ví dụ khác:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson');
Kết quả:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Bart | Simpson | +---------+---------+
ORDER BY
Mệnh đề
Cú pháp cho phép sử dụng ORDER BY
mệnh đề để sắp xếp các kết quả.
Ví dụ:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC;
Kết quả:
+---------+---------+---------+ | column1 | column2 | column3 | +---------+---------+---------+ | 7 | 8 | 9 | | 4 | 5 | 6 | | 1 | 2 | 3 | +---------+---------+---------+
LIMIT
Mệnh đề
Chúng tôi có thể sử dụng LIMIT
mệnh đề giới hạn số hàng được xuất:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2;
Kết quả:
+---------+---------+ | column1 | column2 | +---------+---------+ | Peter | Griffin | | Homer | Simpson | +---------+---------+
OFFSET
Mệnh đề
Dưới đây là một ví dụ về việc sử dụng OFFSET
mệnh đề với VALUES
lệnh:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3;
Kết quả:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 4 | Barney | Rubble | | 5 | George | Costanza | +---------+---------+----------+
FETCH
Mệnh đề
Dưới đây là một ví dụ về việc sử dụng FETCH
mệnh đề:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY;
Kết quả:
+---------+---------+----------+ | column1 | column2 | column3 | +---------+---------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+---------+----------+
Trong một SELECT
Tuyên bố
Chúng tôi cũng có thể sử dụng VALUES
câu lệnh trong SELECT
câu lệnh, như thể VALUES
hàm tạo bảng là một bảng thực tế:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2;
Kết quả:
+-----------+----------+ | firstname | lastname | +-----------+----------+ | Homer | Simpson | +-----------+----------+
Mỗi khối tạo hàng phải chứa cùng một số giá trị
Mỗi hàm tạo hàng trong cùng một VALUES
câu lệnh phải có cùng số lượng giá trị trong danh sách giá trị của nó.
Do đó, chúng tôi không thể làm điều này:
VALUES (1, 2), (3);
Kết quả:
ERROR: VALUES lists must all be the same length LINE 1: VALUES (1, 2), (3); ^
Sử dụng VALUES
để Chèn dữ liệu
Chúng ta có thể sử dụng VALUES
câu lệnh kết hợp với INSERT
câu lệnh để chèn dữ liệu vào bảng.
Ví dụ:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
Điều đó đã tạo ra một bảng có tên là Idiots
và chèn ba hàng vào đó.
Bây giờ chúng ta có thể sử dụng SELECT
để xem các giá trị mới trong bảng:
SELECT * FROM Idiots;
Kết quả:
+---------+-----------+----------+ | idiotid | firstname | lastname | +---------+-----------+----------+ | 1 | Peter | Griffin | | 2 | Homer | Simpson | | 3 | Ned | Flanders | +---------+-----------+----------+