Начало работы
Подключение
Тесты производительности
Развёртывание
Использование данных
Загрузка данных
Миграция данных
Запрос данных
Управление кластерами
Обновление
Глобальное обслуживание
Масштабирование
Мониторинг
Безопасность
Лучшие практики
Технические принципы
Типы данных
Хранилище
Исполняющий движок
Потоковая обработка (Domino)
MARS3 Индексы
Расширения
Расширенные функции
Расширенный запрос
Федеративные запросы
Grafana
Резервное копирование и восстановление
Аварийное восстановление
Руководство
Настройка производительности
Устранение неполадок
Инструменты
Параметры конфигурации
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 вычисляет одно или несколько значений строк, заданных выражениями. Чаще всего используется для создания «таблицы констант» внутри более крупной команды, но может применяться и самостоятельно.
Если указано более одной строки, все строки должны содержать одинаковое количество элементов. Типы данных столбцов результирующей таблицы определяются путём объединения явных или выводимых типов выражений в соответствующем столбце по тем же правилам, что и для UNION.
В составе более крупных команд VALUES можно использовать везде, где допускается SELECT. Поскольку синтаксически VALUES обрабатывается как SELECT, к нему можно применять предложения ORDER BY, LIMIT (или эквивалентное FETCH FIRST) и OFFSET.
Следует избегать использования списков 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, однако это считается хорошей практикой. Имена столбцов по умолчанию для VALUES — column1, column2 и т.д. в Database, но в других системах управления базами данных они могут отличаться.
Когда VALUES используется в команде INSERT, все значения автоматически приводятся к типу данных соответствующего целевого столбца. При использовании в других контекстах может потребоваться явное указание нужного типа данных. Если все элементы представляют собой строковые литералы в кавычках, достаточно привести первый элемент, чтобы определить тип для всех:
SELECT * FROM machines WHERE ip_address IN
(VALUES('192.168.0.1'::inet), ('192.168.0.10'),
('192.0.2.43'));
Примечание!
Для простых проверок с помощью IN лучше использовать форму списка скалярных значений, а не записывать запрос через VALUES, как показано выше. Использование списка скаляров требует меньше кода и зачастую обеспечивает лучшую производительность.
VALUES соответствует стандарту SQL. LIMIT и OFFSET являются расширениями Database; дополнительную информацию см. в описании SELECT.