В PostgreSQL, VALUES командата връща набор от един или повече редове като таблица. Това е конструктор на стойност на таблица, който може да се използва като част от по-голяма команда или като самостоятелен SQL израз.
Синтаксис
Официалният синтаксис е така:
VALUES ( expression [, ...] ) [, ...]
[ ORDER BY sort_expression [ ASC | DESC | USING operator ] [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] Пример
Ето един прост пример, за да демонстрирате как работи:
VALUES (1, 2, 3), (4, 5, 6); Резултат:
<пред>+--------+--------+--------+| колона1 | колона2 | колона3 |+--------+--------+--------+| 1 | 2 | 3 || 4 | 5 | 6 |+---------+--------+--------+
Получените колони са имплицитно наречени column1 , column2 , column3 и така нататък (въпреки че това може да се промени – вижте SELECT опция за изявление по-късно в тази статия).
Всеки ред е дефиниран от една или повече стойности, затворени в скоби. Когато са посочени повече от един ред, всички редове трябва да имат еднакъв брой елементи
Ето още един пример:
VALUES ('Peter', 'Griffin'), ('Bart', 'Simpson'); Резултат:
+--------+--------+| колона1 | колона 2 |+--------+--------+| Петър | Грифин || Барт | Симпсън |+--------+--------+
ORDER BY Клауза
Синтаксисът позволява използването на ORDER BY клауза, за да подредите резултатите.
Пример:
VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9) ORDER BY column1 DESC; Резултат:
<пред>+--------+--------+--------+| колона1 | колона2 | колона3 |+--------+--------+--------+| 7 | 8 | 9 || 4 | 5 | 6 || 1 | 2 | 3 |+---------+--------+--------+LIMIT Клауза
Можем да използваме LIMIT клауза за ограничаване на броя на извежданите редове:
VALUES
('Peter', 'Griffin'),
('Homer', 'Simpson'),
('Ned', 'Flanders')
LIMIT 2; Резултат:
+--------+--------+| колона1 | колона 2 |+--------+--------+| Петър | Грифин || Омир | Симпсън |+--------+--------+
OFFSET Клауза
Ето пример за използване на OFFSET клауза с VALUES команда:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
OFFSET 3; Резултат:
+--------+--------+---------+| колона1 | колона2 | колона3 |+--------+--------+---------+| 4 | Барни | Развалини || 5 | Джордж | Костанца |+---------+---------+---------+
FETCH Клауза
Ето пример за използване на FETCH клауза:
VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders'),
(4, 'Barney', 'Rubble'),
(5, 'George', 'Costanza')
FETCH FIRST 3 ROWS ONLY; Резултат:
+--------+--------+---------+| колона1 | колона2 | колона3 |+--------+--------+---------+| 1 | Петър | Грифин || 2 | Омир | Симпсън || 3 | Нед | Фландрия |+---------+---------+---------+
В рамките на SELECT Изявление
Можем също да използваме VALUES израз в SELECT изявление, сякаш VALUES конструкторите на таблица бяха действителна таблица:
SELECT
FirstName,
LastName
FROM
(VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders')
) AS Idiots(IdiotId, FirstName, LastName)
WHERE IdiotId = 2; Резултат:
+-----------+---------+| име | фамилно име |+-----------+----------+| Омир | Симпсън |+-----------+----------+
Всеки конструктор на ред трябва да съдържа еднакъв брой стойности
Всеки конструктор на ред в едни и същи VALUES изразът трябва да има същия брой стойности в своя списък със стойности.
Следователно не можем да направим това:
VALUES (1, 2), (3); Резултат:
ГРЕШКА:всички списъци със VALUES трябва да са с еднаква дължина. LINE 1:VALUES (1, 2), (3); ^
Използване на VALUES за вмъкване на данни
Можем да използваме VALUES израз във връзка с INSERT оператор за вмъкване на данни в таблица.
Пример:
CREATE TABLE Idiots (
IdiotId int,
FirstName varchar(50),
LastName varchar(50)
);
INSERT INTO Idiots VALUES
(1, 'Peter', 'Griffin'),
(2, 'Homer', 'Simpson'),
(3, 'Ned', 'Flanders');
Това създаде таблица, наречена Idiots и вмъкнах три реда в него.
Вече можем да използваме SELECT оператор, за да видите новите стойности в таблицата:
SELECT * FROM Idiots; Резултат:
+--------+-----------+---------+| идиотски | име | фамилно име |+--------+-----------+---------+| 1 | Петър | Грифин || 2 | Омир | Симпсън || 3 | Нед | Фландрия |+---------+-----------+----------+