VALUES
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 имена вÑеÑ
ÑÑолбÑов, но ÑÑо ÑекомендÑеÑÑÑ Ð´ÐµÐ»Ð°ÑÑ. (Ðо ÑмолÑÐ°Ð½Ð¸Ñ Postgres Pro даÑÑ ÑÑолбÑам 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 ÑвлÑÑÑÑÑ ÑаÑÑиÑениÑми Postgres Pro; Ñм. Ñакже SELECT.