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