# VALUES
#### 功能描述
根据给定的值表达式计算一个或一组行的值。它通常用于在一个较大的命令内生成一个"常数表"。
#### 注意事项
- 应当避免使用VALUES返回数量非常大的结果行，否则可能会遭遇内存耗尽或者性能低下。出现在INSERT中的VALUES是一个特殊情况，因为目标字段类型可以从INSERT的目标表获知，并不需要通过扫描VALUES列表来推测，所以此情况下可以处理非常大的结果行。
- 如果指定了多行，那么每一行都必须拥有相同的元素个数。
 
#### 语法格式
```
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 ];
```
#### 参数说明
表1VALUES参数说明 
| 参数                                                         | 描述                                                                                                                                                                   | 取值范围         |
|:---|:---|:---|
| expression                                               | 用于计算或插入结果表指定地点的常量或者表达式。 在一个出现在INSERT顶层的VALUES列表中，expression可以被DEFAULT替换以表示插入目的字段的缺省值。除此以外，VALUES在其他场景时是不能使用DEFAULT的。 | -             |
| sort_expression                                          | 一个表示如何排序结果行的表达式或者整数常量。                                                                                                                                              | -          |
| ASC                                                       | 指定按照升序排列。                                                                                                                                                          | -            |
| DESC                                                       | 指定按照降序排列。                                                                                                                                                            | -           |
| operator                                                   | 一个排序操作符。                                                                                                                                                           | -            |
| count                                                    | 返回的最大行数。                                                                                                                                                           | -            |
| start                                                    | 开始返回行之前忽略的行数。                                                                                                                                                       | -             |
| FETCH { FIRST \| NEXT } \[ count \] { ROW \| ROWS } ONLY | FETCH子句限定返回查询结果从第一行开始的总行数。                                                                                                                                           | count的缺省值为1。 |
   
#### 示例：插入单条或多条数据
创建表reason_t1：
```
DROP TABLE IF EXISTS reason_t1;
CREATE TABLE reason_t1
(
    TABLE_SK          INTEGER               ,
    TABLE_ID          VARCHAR(20)           ,
    TABLE_NA          VARCHAR(20)
);
```
向表中插入一条数据：
```
INSERT INTO reason_t1(TABLE_SK, TABLE_ID, TABLE_NA) VALUES (1, 'S01', 'StudentA');
```
向表中插入一条数据，和上一条语法等效：
```
INSERT INTO reason_t1 VALUES (1, 'S01', 'StudentA');
```
向表中插入TABLE_SK小于1的数据：
```
INSERT INTO reason_t1 SELECT * FROM reason_t1 WHERE TABLE_SK < 1;
```
向表中插入多条数据：
```
INSERT INTO reason_t1 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB');
SELECT * FROM reason_t1 ORDER BY 1;
```
![](https://support.huaweicloud.com/sqlreference-911-dws/figure/zh-cn_image_0000002318921885.png "点击放大")
