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_column
和 new_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 查询语句中临时生成列,生成列都是极为有用的工具。