VALUES — вычисление набора строк
VALUES (expression[, ...] ) [, ...] [ ORDER BYsort_expression[ ASC | DESC | USINGоператор] [, ...] ] [ LIMIT {count| ALL } ] [ OFFSETstart[ ROW | ROWS ] ] [ FETCH { FIRST | NEXT } [count] { ROW | ROWS } ONLY ]
VALUES вычисляет значение строки или набор значений строк, заданных выражениями значений. Команда чаще всего используется для формирования «константной таблицы» в составе более крупной команды, но также может использоваться самостоятельно.
Если указано несколько строк, все они должны содержать одинаковое количество элементов. Типы данных столбцов результирующей таблицы определяются путем сопоставления явных или выведенных типов выражений, представленных в данном столбце, по тем же правилам, что и для UNION
(см. Раздел 2.7.5).
В составе более крупных команд VALUES синтаксически допускается
в любом месте, где SELECT . Поскольку с точки зрения грамматики оно обрабатывается как
SELECT синтаксисом, допускается использовать
предложения ORDER BY, LIMIT (или
равнозначное FETCH FIRST),
а также OFFSET с командой
VALUES команда.
expression
Константа или выражение для вычисления и вставки в указанное место в результирующей таблице (наборе строк). В VALUES списке,
указанном на верхнем уровне оператора INSERT, выражение
expression может быть заменено
ключевым словом DEFAULT , чтобы указать, что должно быть вставлено значение по умолчанию целевого столбца. DEFAULT не может
использоваться, когда VALUES используется в других контекстах.
sort_expression
Выражение или целочисленная константа, определяющая порядок сортировки результирующих строк. Это выражение может ссылаться на столбцы
VALUES результата как column1, column2,
и т. д. Подробнее см.
ORDER BY Clause
в SELECT документации.
операторОператор сортировки. Подробности см. в ORDER BY Clause в SELECT документации.
countМаксимальное число возвращаемых строк. Подробности см. в LIMIT Clause в SELECT документации.
startКоличество строк, которые необходимо пропустить перед началом возврата строк. Подробности см. в LIMIT Clause в SELECT документации.
VALUES следует избегать списков с очень большим количеством строк,
так как это может привести к нехватке памяти или низкой производительности.
VALUES в составе INSERT является особым случаем
(так как требуемые типы столбцов известны из INSERTцелевой таблицы, и их не требуется определять путем сканирования VALUES
списка), поэтому она может обрабатывать списки большего размера, чем это практически целесообразно в других контекстах.
Автономная VALUES команда:
VALUES (1, 'one'), (2, 'two'), (3, 'three');
Эта команда возвращает таблицу из двух столбцов и трех строк. Это фактически эквивалентно:
SELECT 1 AS column1, 'one' AS column2 UNION ALL SELECT 2, 'two' UNION ALL SELECT 3, 'three';
Как правило, VALUES используется в составе более крупной команды SQL.
Наиболее распространенным вариантом использования является INSERT:
INSERT INTO фильмы (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
В контексте INSERT, элементы списка VALUES список может быть DEFAULT для указания на то, что вместо конкретного значения должно использоваться значение столбца по умолчанию:
INSERT INTO фильмы VALUES
('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'),
('T_601', 'Yojimbo', 106, DEFAULT, 'Drama', DEFAULT);
VALUES также может применяться в тех местах, где может быть указанSELECT может быть записано, например, в предложении FROM:
SELECT f.*
FROM фильмы f, (VALUES('MGM', 'Horror'), ('UA', 'Sci-Fi')) AS t (studio, kind)
WHERE f.studio = t.studio AND f.kind = t.kind;
UPDATE employees SET salary = salary * v.increase
FROM (VALUES(1, 200000, 1.2), (2, 400000, 1.4)) AS v (depno, target, increase)
WHERE employees.depno = v.depno AND employees.sales >= v.target;
Обратите внимание, что предложение AS требуется, когда VALUES
используется в предложении предложении , так же как это необходимо для
SELECT. Не требуется, чтобы предложение AS предложении указывать имена для всех столбцов, однако это считается хорошей практикой. (Имена столбцов по умолчанию для VALUES имеют вид column1,
column2и т. д. в Digital Q.DataBase, но эти имена могут отличаться в других системах управления базами данных.)
Когда VALUES используется в INSERT, все значения автоматически приводятся к типу данных соответствующего целевого столбца. При использовании в других контекстах может потребоваться указать правильный тип данных. Если все записи являются литеральными константами в кавычках, приведения первой из них достаточно для определения предполагаемого типа для всех остальных:
SELECT * FROM machines
WHERE ip_address IN (VALUES('192.168.0.1'::inet), ('192.168.0.10'), ('192.168.1.43'));
Для простых IN тестов предпочтительнее использовать
список скаляров
как форму IN чем писать VALUES
запрос, как показано выше. Метод со списком скаляров требует меньшего объёма кода
и зачастую более эффективен.
VALUES соответствует стандарту SQL.
LIMIT и OFFSET являются
Digital Q.DataBase расширениями; см. также
в разделе SELECT.