Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

VALUES

Вычисляет набор строк.

Синтаксис

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 вычисляет значение строки или набор значений строк, заданных выражениями. Чаще всего эта команда используется для формирования "таблицы констант" в рамках большой команды, но может использоваться и самостоятельно.

Если указывается более одной строки, все строки должны содержать одинаковое количество элементов. Типы данных столбцов результирующей таблицы определяются путем совмещения явных или предполагаемых типов выражений, указанных в этих столбцах, по тем же правилам, что и UNION.

В составе других команд синтаксис позволяет использовать VALUES везде, где используется SELECT. Поскольку грамматически она воспринимается как SELECT, с командой VALUES можно использовать выражения ORDER BY, LIMIT (или эквивалентное FETCH FIRST) и OFFSET.

Параметры

Параметр Описание

expression

Константа или выражение, которое вычисляется и вставляется в указанное место результирующей таблицы (множества строк). В списке VALUES, расположенном на верхнем уровне оператора INSERT, выражение можно заменить на DEFAULT, чтобы указать, что в целевой столбец следует вставить значение по умолчанию. DEFAULT нельзя использовать, если VALUES употребляется в других контекстах

sort_expression

Выражение или целочисленная константа, указывающие, как сортировать строки результата. Это выражение может ссылаться на столбцы результата VALUES по именам column1, column2 и т.д. За более подробной информацией обратитесь к разделу Выражение ORDER BY в описании SELECT

operator

Оператор сортировки. За более подробной информацией обратитесь к разделу Выражение ORDER BY в описании SELECT

LIMIT <count>

OFFSET <start>

Максимальное число строк, которое должно быть возвращено. За более подробной информацией обратитесь к разделу Выражение LIMIT в описании 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 films (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

В контексте INSERT в списке VALUES можно указать ключевое слово DEFAULT, указывающее на то, что для столбца следует использовать значение по умолчанию вместо некоторого значения:

INSERT INTO films
VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'),
       ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama', DEFAULT);

VALUES также можно использовать там, где может быть написан подзапрос SELECT, например, в выражении FROM:

SELECT f.*
FROM films 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;

Обратите внимание, что при использовании VALUES в выражении FROM требуется AS, как и в случае с SELECT. Указывать имена всех столбцов в выражении AS не обязательно, но рекомендуется. По умолчанию Greengage DB дает столбцам VALUES имена column1, column2 и т.д., но в других системах баз данных эти имена могут быть другими.

При использовании VALUES в команде INSERT все значения автоматически приводятся к типу данных соответствующего целевого столбца. В других контекстах может потребоваться указать нужный тип данных. Если все записи представляют собой строковые константы в кавычках, то приведения первой из них достаточно для определения нужного типа для всех:

SELECT *
FROM machines
WHERE ip_address IN (VALUES ('192.168.0.1'::inet), ('192.168.0.10'), ('192.0.2.43'));
ПРИМЕЧАНИЕ

Для простых проверок на включение IN лучше использовать форму IN в виде списка скаляров, чем писать запрос VALUES, как показано выше. Список скаляров проще записать, и обрабатывается он зачастую более эффективно.

Совместимость

VALUES соответствует стандарту SQL. LIMIT и OFFSET являются расширениями Greengage DB; см. также SELECT.

См. также