VALUES 子句
功能描述
VALUES 子句用于构造内联的行数据,可以作为独立查询使用,也可以在 FROM 子句中作为临时表使用。常用于快速测试、构造示例数据或与 INSERT INTO 配合插入数据。
语法
-- 独立使用
VALUES (expr1 [, expr2, ...]) [, (expr1 [, expr2, ...]), ...]
-- 在 FROM 子句中使用,指定表别名和列名
SELECT ...
FROM VALUES (expr1 [, expr2, ...]) [, ...] AS table_alias(col1 [, col2, ...])
-- 简写形式(省略 VALUES 关键字)
SELECT ...
FROM (expr1 [, expr2, ...]) [, ...] AS table_alias(col1 [, col2, ...])
参数说明
expr:任意表达式,可以是字面量、函数调用或计算表达式。
table_alias:临时表的别名。
col1, col2, ...:列的别名。
使用示例
独立查询
VALUES (1, 'a'), (2, 'b'), (3, 'c');
+------+------+
| col1 | col2 |
+------+------+
| 1 | a |
| 2 | b |
| 3 | c |
+------+------+
在 FROM 子句中使用
SELECT id, name
FROM VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie') AS t(id, name);
+----+---------+
| id | name |
+----+---------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+----+---------+
与聚合函数配合
SELECT sum(val) AS total
FROM VALUES (10), (20), (30) AS t(val);
+-------+
| total |
+-------+
| 60 |
+-------+
多列不同类型
SELECT *
FROM VALUES
(1, 'hello', date '2024-01-01', true),
(2, 'world', date '2024-06-15', false)
AS t(id, msg, dt, flag);
+----+-------+------------+-------+
| id | msg | dt | flag |
+----+-------+------------+-------+
| 1 | hello | 2024-01-01 | true |
| 2 | world | 2024-06-15 | false |
+----+-------+------------+-------+
与 INSERT INTO 配合
INSERT INTO my_table
VALUES (1, 'Alice'), (2, 'Bob');
注意事项
- 每行的列数必须一致。
- 各行对应位置的列类型必须兼容,系统会自动推导公共类型。
- 在 FROM 子句中使用时,建议通过
AS table_alias(col1, col2, ...) 指定列名,否则列名默认为 col1、col2 等。
- VALUES 可以与 UNION、JOIN 等组合使用。