MySQL 使用生成列在查询中

MySQL 使用生成列在查询中

MySQL 中,生成列是一种可以使用表中已有的列来计算并生成新列的方法。生成列可以在表中存储计算结果,或是在 SELECT 查询语句中临时生成。

使用生成列能够简化复杂的计算和转化操作,并提高查询效率。在本文中,我们将主要讨论在 SELECT 查询语句中使用生成列。

阅读更多:MySQL 教程

什么是生成列

生成列是一种计算得出的列,它使用其他列的值作为输入,并存储在表中或者在查询语句中临时生成。

生成列可以使用 SQL 表达式来定义,这些 SQL 表达式可以包含任意数量和类型的操作符和函数。

此外,生成列通常用于在列上应用函数、规范化字符串、转换日期等操作。

在表中使用生成列

MySQL 中,我们可以使用 ALTER TABLE 语句来添加生成列,例如:

ALTER TABLE `my_table`
ADD COLUMN `new_column` INT AS (`old_column` * 2);

在上面的示例中,我们创建了一个新列 new_column,它计算 old_column 的值,并将其乘以 2 来进行存储。

我们可以通过 SELECT 查询语句来查看这个新列的值:

SELECT `old_column`, `new_column`
FROM `my_table`;

在上面的示例中,我们检索了 old_columnnew_column 的值,并查询了表格中的两列。

在 SELECT 查询语句中使用生成列

除了在表中添加生成列之外,我们还可以在 SELECT 查询语句中临时生成列。

为了演示如何在 SELECT 查询语句中使用生成列,我们首先需要创建一个简单的表格,例如:

CREATE TABLE `my_table` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(255) NOT NULL,
  `description` TEXT NOT NULL,
  `created_at` DATETIME NOT NULL,
  `updated_at` DATETIME NOT NULL,
  PRIMARY KEY (`id`)
);

此时我们可以向表中插入几条数据:

INSERT INTO `my_table` (`title`, `description`, `created_at`, `updated_at`)
VALUES
  ('文章1', '这是第一篇文章。', NOW(), NOW()),
  ('文章2', '这是第二篇文章。', NOW(), NOW()),
  ('文章3', '这是第三篇文章。', NOW(), NOW());

现在我们可以通过 SELECT 查询语句来查询 my_table 表中的所有数据,并添加生成列:

SELECT `id`, `title`, `description`, `created_at`,
  CONCAT(YEAR(`created_at`), '-', MONTH(`created_at`), '-', DAY(`created_at`)) AS `formatted_date`
FROM `my_table`;

在上面的示例中,我们添加了一个名为 formatted_date 的生成列,它使用了 created_at 列的值,并将其格式化为年-月-日的字符串。

生成列的值可以在 SELECT 查询语句中使用,并且可以使用 WHERE 子句和 ORDER BY 子句来筛选或排序查询结果。

SELECT `id`, `title`, `description`, `created_at`,
  CONCAT(YEAR(`created_at`), '-', MONTH(`created_at`), '-', DAY(`created_at`)) AS `formatted_date`
FROM `my_table`
WHERE YEAR(`created_at`) = 2021
ORDER BY `created_at` DESC;

在上面的示例中,我们使用 WHERE 子句和 ORDER BY 子句来筛选和排序查询结果。

总结

在 MySQL 中,使用生成列可以简化复杂的计算和转化操作,并提高查询效率。无论是在表格中添加新列,还是在 SELECT 查询语句中临时生成列,生成列都是极为有用的工具。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程