更新时间:2022-07-29 GMT+08:00

VALUES

功能描述

根据给定的值表达式计算一个或一组行的值。它通常用于在一个较大的命令内生成一个“常数表”。

注意事项

  • 应当避免使用VALUES返回数量非常大的结果行,否则可能会遭遇内存耗尽或者性能低下。出现在INSERT中的VALUES是一个特殊情况,因为目标字段类型可以从INSERT的目标表获知,并不需要通过扫描VALUES列表来推测,所以在此情况下可以处理非常大的结果行。
  • 如果指定了多行,那么每一行都必须拥有相同的元素个数。

语法格式

1
2
3
4
VALUES {( expression [, ...] )} [, ...]
    [ ORDER BY { sort_expression [ ASC | DESC | USING operator ] } [, ...] ]
    [ { [ LIMIT { count | ALL } ] [ OFFSET start [ ROW | ROWS ] ] } | { LIMIT start, { count | ALL } } ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ];

参数说明

  • expression

    用于计算或插入结果表指定地点的常量或者表达式。

    在一个出现在INSERT顶层的VALUES列表中,expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外,当VALUES出现在其他场合的时候是不能使用DEFAULT的。

  • sort_expression

    一个表示如何排序结果行的表达式或者整数常量。

  • ASC

    指定按照升序排列。

  • DESC

    指定按照降序排列。

  • operator

    一个排序操作符。

  • count

    返回的最大行数。

  • start

    开始返回行之前忽略的行数。

  • FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY

    FETCH子句限定返回查询结果从第一行开始的总行数,count的缺省值为1。

示例

创建表tpcds.reason_t2。

1
2
3
4
5
6
CREATE TABLE tpcds.reason_t2
(
  r_reason_sk    integer,
  r_reason_id    character(16),
  r_reason_desc  character(100)
);

向表中插入一条记录。

1
INSERT INTO tpcds.reason_t2(r_reason_sk, r_reason_id, r_reason_desc) VALUES (1, 'AAAAAAAABAAAAAAA', 'reason1');

向表中插入一条记录,和上一条语法等效。

1
INSERT INTO tpcds.reason_t2 VALUES (2, 'AAAAAAAABAAAAAAA', 'reason2');

向表中插入多条记录。

1
INSERT INTO tpcds.reason_t2 VALUES (3, 'AAAAAAAACAAAAAAA','reason3'),(4, 'AAAAAAAADAAAAAAA', 'reason4'),(5, 'AAAAAAAAEAAAAAAA','reason5');

向表中插入tpcds.reason中r_reason_sk小于5的记录。

1
INSERT INTO tpcds.reason_t2 SELECT * FROM tpcds.reason WHERE r_reason_sk <5;

清空表中的原有数据,再向表中插入数据。

1
insert overwrite into tpcds.reason_t2 values (6, 'BBAAAAAAAAAAAAAA', 'reason6');

删除表tpcds.reason_t2。

1
DROP TABLE tpcds.reason_t2;