mysql的values使用_MySQL的SQL语句 - 数据操作语句(16)- VALUES 语句

2023-05-16

VALUES 语句

VALUES 是 MySQL 8.0.19 中引入的一个 DML 语句,它以表的形式返回一个或多个行的集合。换句话说,它是一个表值构造器,也可以作为独立的 SQL 语句来运行。

1. VALUES row_constructor_list [ORDER BY column_designator] [LIMIT BY number]

2.

3. row_constructor_list:

4. ROW(value_list)[, ROW(value_list)][, ...]

5.

6. value_list:

7. value[, value][, ...]

8.

9. column_designator:

10. column_index

VALUES 语句由 VALUES 关键字后跟一个或多个行构造器的列表组成,用逗号分隔。行构造器由 ROW() 子句以及包含在括号中的一个或多个标量值的值列表组成。其中的值可以是 MySQL 任意类型的字面量,或者是可以解析为标量值的表达式。

ROW() 不能为空(但提供的每个标量值都可以为 NULL)。同一 VALUES 语句中的每个 ROW() 在其值列表中的值数量必须相同。

VALUES 不支持 DEFAULT 关键字,会引发语法错误,除非在 INSERT 语句中使用该关键字提供值。

VALUES 的输出是一个表:

1. mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8);

2. +----------+----------+----------+

3. | column_0 | column_1 | column_2 |

4. +----------+----------+----------+

5. | 1 | -2 | 3 |

6. | 5 | 7 | 9 |

7. | 4 | 6 | 8 |

8. +----------+----------+----------+

9. 3 rows in set (0.00 sec)

从 VALUES 输出的表的列具有隐式命名 column_0、column_1、column_2,依此类推,始终以 0 开头。此事实可用于使用可选的 ORDER BY 子句按列对行排序,方法与此子句与 SELECT 语句一起使用的方式相同,如下所示:

1. mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1;

2. +----------+----------+----------+

3. | column_0 | column_1 | column_2 |

4. +----------+----------+----------+

5. | 1 | -2 | 3 |

6. | 4 | 6 | 8 |

7. | 5 | 7 | 9 |

8. +----------+----------+----------+

9. 3 rows in set (0.00 sec)

VALUES 语句还支持限制输出行数的 LIMIT 子句。

VALUES 语句对于列值的数据类型是宽容的;可以在同一列中混合类型,如下所示:

1. mysql> VALUES ROW("q", 42, '2019-12-18'),

2. -> ROW(23, "abc", 98.6),

3. -> ROW(27.0002, "Mary Smith", '{"a": 10, "b": 25}');

4. +----------+------------+--------------------+

5. | column_0 | column_1 | column_2 |

6. +----------+------------+--------------------+

7. | q | 42 | 2019-12-18 |

8. | 23 | abc | 98.6 |

9. | 27.0002 | Mary Smith | {"a": 10, "b": 25} |

10. +----------+------------+--------------------+

11. 3 rows in set (0.00 sec)

重要

具有一个或多个 ROW() 实例的 VALUES 充当表值构造器;尽管它可以用于在 INSERT 或 REPLACE 语句中提供值,但不要将其与同样用于此目的的 VALUES 关键字混淆。也不应该将它与在 INSERT ... ON DUPLICATE KEY UPDATE 中引用列值的 VALUES() 函数混淆。

还应该记住 ROW() 是一个行值构造器,而 VALUES ROW() 是一个表值构造器;两者不能互换使用。

VALUES 可用于许多可以使用 SELECT 的情况,包括下面列出的:

● 使用 UNION,如下所示:

1. mysql> SELECT 1,2 UNION SELECT 10,15;

2. +----+----+

3. | 1 | 2 |

4. +----+----+

5. | 1 | 2 |

6. | 10 | 15 |

7. +----+----+

8. 2 rows in set (0.00 sec)

9.

10. mysql> VALUES ROW(1,2) UNION VALUES ROW(10,15);

11. +----------+----------+

12. | column_0 | column_1 |

13. +----------+----------+

14. | 1 | 2 |

15. | 10 | 15 |

16. +----------+----------+

17. 2 rows in set (0.00 sec)

也可以用这种方式将具有多行的构造表联合在一起,如下所示:

1. mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6)

2. > UNION VALUES ROW(10,15),ROW(20,25);

3. +----------+----------+

4. | column_0 | column_1 |

5. +----------+----------+

6. | 1 | 2 |

7. | 3 | 4 |

8. | 5 | 6 |

9. | 10 | 15 |

10. | 20 | 25 |

11. +----------+----------+

12. 5 rows in set (0.00 sec)

在这种情况下,也可以(通常最好)完全省略 UNION,并使用单个 VALUES 语句,如下所示:

1. mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25);

2. +----------+----------+

3. | column_0 | column_1 |

4. +----------+----------+

5. | 1 | 2 |

6. | 3 | 4 |

7. | 5 | 6 |

8. | 10 | 15 |

9. | 20 | 25 |

10. +----------+----------+

VALUES 也可以与 SELECT、TABLE 语句联合使用。

UNION 构造的表必须包含相同数量的列,就像使用 SELECT 一样。

● 在连接语句中使用。

● 代替 INSERT 或 REPLACE 语句中的 VALUES(),在这种情况下,它的语义与这里描述的略有不同。

● 在 CREATE TABLE ... SELECT 和 CREATE VIEW ... SELECT 中替换源表

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql的values使用_MySQL的SQL语句 - 数据操作语句(16)- VALUES 语句 的相关文章

  • Mysql带限制的删除语句

    我试图从表中删除行 但出现错误 DELETE FROM chat messages ORDER BY timestamp DESC LIMIT 20 50 我在 50 时收到此错误 您的 SQL 语法有错误 检查与您的 MySQL 服务器版
  • SQL Server 查询中 UNION ALL 与 OR 条件

    我必须根据表上不存在的条件选择一些行 如果我使用如下的 union all 它会在不到 1 秒的时间内执行 SELECT 1 FROM dummyTable WHERE NOT EXISTS SELECT 1 FROM TABLE t WH
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • 无法与重定向器建立连接。确保“sql browser”服务正在运行

    所以我尝试这个 sql server 2012 由于这个错误我无法打开任何 ssis 包 无法与重定向器建立连接 确保 sql browser 服务正在运行 我的 Sql 浏览器肯定正在运行 我尝试在本地服务 本地系统和网络下更改它 仍然没
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • SQL Server 中的 FIFO 查询

    我正在构建一个库存管理应用程序c with SQL server 我想做一个FIFO从我的表查询 我以可变价格购买了相同的产品 之后我卖掉了其中一些 我想根据 先进先出 进行查询BatchDate柱子 所以我想通过PurchasePrice
  • 计算2个日期之间每个日期的记录数

    我必须创建一个查询来返回多轴图表的结果 我需要计算为 2 个日期之间的每个日期创建的 ID 数量 我试过这个 DECLARE StartDate datetime2 7 11 1 2020 EndDate datetime2 7 2 22
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 休眠以持久保存日期

    有没有办法告诉 Hibernate java util Date 应该持久保存 我需要这个来解决 MySQL 中缺少的毫秒分辨率问题 您能想到这种方法有什么缺点吗 您可以自己创建字段long 或者使用自定义的UserType 实施后User
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 使用什么框架来引导我的第一个生产 scala 项目?

    我正在第一次涉足 scala 的生产应用程序 该应用程序当前打包为 war 文件 我的计划是创建 scala 编译工件的 jar 文件 并将其添加到 war 文件的 lib 文件夹中 我的增强功能是通过 Jersey 公开的 mysql 支
  • 消息 203,级别 16,状态 2,不是有效标识符

    我收到以下错误 消息 203 级别 16 状态 2 过程 getQuestion 第 18 行名称 select top 1 from tlb Question inner join tlb options on tlb options q
  • 在 plpgsql 函数中使用 quote_ident()

    我是创建 plpgsql 函数的新手 我需要一些有关在函数内部执行的动态命令上使用 quote ident 甚至 quote literal 的说明 希望有人能给我一个关于它们如何在函数内部工作的具体解释 TIA 这是一个例子 EXECUT
  • MYSQL:如何在同一查询中联接两个表,两次引用同一个表

    我有两张桌子 我正在尝试将下面的示例两个表与表 1 引用表 2 两次结合起来 例如 如果我查看表 1 组 2 和成员 7 它应该查找表 2 中的 ID 并给出输出 Group Members Name Name 2 7 Blue Dog T
  • 条件触发器的Django迁移sql

    我想创建一个触发器 仅在满足条件时插入表 我尝试过使用 IF BEGIN END 和 WHERE 的各种组合 但 Django 每次都会返回 SQL 语法错误 这里 type user id指的是触发该事件的人 user id指的是接收到通
  • hive - 在值范围之间将一行拆分为多行

    我在下面有一张表 想按从开始列到结束列的范围拆分行 即 id 和 value 应该对开始和结束之间的每个值重复 包括两者 id value start end 1 5 1 4 2 8 5 9 所需输出 id value current
  • Oracle SQL PLS-00049:错误的绑定变量

    我收到此错误 这似乎是列拼写问题 然而 我 99 确信我拼写的所有内容都是正确的 但我看不出有任何理由会出现我所犯的错误 这是来源 CREATE OR REPLACE TRIGGER update qoh trigger AFTER INS
  • 为什么 ISNUMERIC('.') 返回 1?

    最近我在 SQL Server 中使用 ISNUMERIC 时遇到了一个问题 导致找到了这段代码 SELECT ISNUMERIC 这会返回 1 如 true 所示 难道不应该像 false 一样返回 0 吗 See Numeric 损坏了

随机推荐