VALUES
СинÑакÑиÑ
VALUES ( вÑÑажение [, ...] ) [, ...]
[ ORDER BY вÑÑажение_ÑоÑÑиÑовки [ ASC | DESC | USING опеÑаÑÐ¾Ñ ] [, ...] ]
[ LIMIT { ÑиÑло | ALL } ]
[ OFFSET наÑало [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ ÑиÑло ] { ROW | ROWS } ONLY ]ÐпиÑание
VALUES вÑÑиÑлÑÐµÑ Ð·Ð½Ð°Ñение ÑÑÑоки или множеÑÑво знаÑений ÑÑÑок, заданное вÑÑажениÑми. ЧаÑе вÑего ÑÑа команда иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑоÑмиÑÐ¾Ð²Ð°Ð½Ð¸Ñ "ÑаблиÑÑ ÐºÐ¾Ð½ÑÑанÑ" в болÑÑой команде, но ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð¸ оÑделÑно.
Ðогда ÑказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑе, Ñем одна ÑÑÑока, вÑе ÑÑÑоки Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ð¾Ðµ колиÑеÑÑво ÑлеменÑов. Ð¢Ð¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ ÑезÑлÑÑиÑÑÑÑÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº ÑаблиÑÑ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð² ÑезÑлÑÑаÑе ÑовмеÑÐµÐ½Ð¸Ñ ÑвнÑÑ Ð¸ неÑвнÑÑ Ñипов вÑÑажений, заданнÑÑ Ð´Ð»Ñ ÑÑÐ¸Ñ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, по Ñем же пÑавилам, ÑÑо и в UNION (Ñм. Раздел 10.5).
Ð ÑоÑÑаве дÑÑÐ³Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ ÑинÑакÑÐ¸Ñ Ð´Ð¾Ð¿ÑÑÐºÐ°ÐµÑ Ð¸ÑполÑзование VALUES везде, где допÑÑкаеÑÑÑ SELECT. Так как гÑаммаÑиÑеÑки она воÑпÑинимаеÑÑÑ ÐºÐ°Ðº SELECT, Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ VALUES можно иÑполÑзоваÑÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ORDER BY, LIMIT (или ÑавнознаÑное FETCH FIRST) и OFFSET.
ÐаÑамеÑÑÑ
- вÑÑажение
ÐонÑÑанÑа или вÑÑажение, коÑоÑое вÑÑиÑлÑеÑÑÑ Ð¸ вÑÑавлÑеÑÑÑ Ð² Ñказанное меÑÑо ÑезÑлÑÑиÑÑÑÑей ÑаблиÑÑ (множеÑÑва ÑÑÑок). Ð ÑпиÑке VALUES, Ð½Ð°Ñ Ð¾Ð´ÑÑемÑÑ Ð½Ð° веÑÑ Ð½ÐµÐ¼ ÑÑовне опеÑаÑоÑа INSERT, вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð·Ð°Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñловом DEFAULT, ÑказÑваÑÑим, ÑÑо в ÑелевÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÑ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð²ÑÑавлено знаÑение ÑÑой колонки по ÑмолÑаниÑ. Ðогда VALUES ÑпоÑÑеблÑеÑÑÑ Ð² дÑÑÐ³Ð¸Ñ ÐºÐ¾Ð½ÑекÑÑÐ°Ñ , Ñказание DEFAULT иÑполÑзоваÑÑ Ð½ÐµÐ»ÑзÑ.
- вÑÑажение_ÑоÑÑиÑовки
ÐÑÑажение или ÑелоÑиÑÐ»ÐµÐ½Ð½Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа, ÑказÑваÑÑаÑ, как Ð´Ð¾Ð»Ð¶Ð½Ñ ÑоÑÑиÑоваÑÑÑÑ ÑÑÑоки ÑезÑлÑÑаÑа. ÐÑо вÑÑажение Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº колонкам ÑезÑлÑÑаÑа VALUES по именам column1, column2 и Ñ. д. Ðа дополниÑелÑнÑми подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐÑедложение ORDER BY.
- опеÑаÑоÑ
ÐпеÑаÑÐ¾Ñ ÑоÑÑиÑовки. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐÑедложение ORDER BY.
- ÑиÑло
ÐакÑималÑное ÑиÑло ÑÑÑок, коÑоÑое должно бÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑено. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐÑедложение LIMIT.
- наÑало
ЧиÑло ÑÑÑок, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑопÑÑенÑ, пÑежде Ñем наÑнÑÑÑÑ Ð²ÑдаÑа ÑÑÑок. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐÑедложение LIMIT.
ÐамеÑаниÑ
СледÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑпиÑков 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 имена вÑÐµÑ ÐºÐ¾Ð»Ð¾Ð½Ð¾Ðº, но ÑÑо ÑекомендÑеÑÑÑ Ð´ÐµÐ»Ð°ÑÑ. (Ðо ÑмолÑÐ°Ð½Ð¸Ñ PostgreSQL даÑÑ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°Ð¼ VALUES имена column1, column2 и Ñ. д., но в дÑÑÐ³Ð¸Ñ Ð¡Ð£ÐРимена могÑÑ Ð±ÑÑÑ Ð´ÑÑгими.)
Ðогда 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 ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми PostgreSQL; Ñм. Ñакже SELECT.
| ÐÑед. | ÐаÑало | След. |
| VACUUM | УÑÐ¾Ð²ÐµÐ½Ñ Ð²ÑÑе | ÐлиенÑÑкие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ PostgreSQL |