В 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 | Нед | Фландрия |+---------+-----------+----------+