Nodejs 第三十六章 表达式和函数
表达式
MySQL表达式是一种在MySQL数据库中使用的计算式或逻辑式。可用于查询、更新和过滤数据,以及进行条件判断和计算
算术表达式
-
对于表的操作,如果想要去主动的
加减乘除
也是很简单的- 我们用
WHERE
筛选出我们想要改变的选项 - 用
加减乘除
能够直接改变数据库中的表达形式
- 我们用
# 查询id、name、age三项来自user表的内容,筛选出id<5的部分 (基础内容)
SELECT `id`,`name`,`age` from `user` WHERE id < 5
-- 加法:在年龄上加10,结果仍以`age`为别名
SELECT `id`, `name`, (`age` + 10) AS `age`
FROM `user`
WHERE id < 5;
-- 这个查询会将user表中id小于5的记录的age字段值增加10后输出。
-- 减法:在年龄上减5
SELECT `id`, `name`, (`age` - 5) AS `age`
FROM `user`
WHERE id < 5;
-- 这个查询会将user表中id小于5的记录的age字段值减去5后输出。
-- 乘法:将年龄乘以2
SELECT `id`, `name`, (`age` * 2) AS `age`
FROM `user`
WHERE id < 5;
-- 这个查询会将user表中id小于5的记录的age字段值乘以2后输出。
-- 除法:将年龄除以2
SELECT `id`, `name`, (`age` / 2) AS `age`
FROM `user`
WHERE id < 5;
-- 这个查询会将user表中id小于5的记录的age字段值除以2后输出。
-- 注意:进行除法运算时应确保不会发生除以零的情况。
- 通过默认的基础情况,我们能看到当前没有变化的表格
-
对其进行加法表达式,能够看到所筛选出来的表格中,年龄部分都加了20
- 但缺点是标题也变成了
age
+20,这就美观了,看起来意义也不明 - 除了加法之外,其他
减乘除
算术表达式也是类似的情况
- 但缺点是标题也变成了
-
好在我们前面所学的别名功能可以解决这个问题
- 我们又将其命名回了age
函数
为什么需要函数?
-
但目前我们只通过算术表达式其实能做的事情还是有限的,这样好像只能改变有关于数字的内容,但我们数据库中,除了数字之外,还有文本内容
- 如果我们要在文本内容后面继续添加内容的话?算术表达式能不能做到?
-
很可惜是做不到的,这个直接把
name
原本显示的内容就覆盖掉了,这就太糟糕了- 为了弥补算术表达式的空白,我们的
内置函数
就派上用场了 - 同时必须说明,我们此时看到的改变内容只是视觉上的效果,实际的数据库内容是没有发生改变的,因为我们使用的是
SELECT
查询关键字
- 为了弥补算术表达式的空白,我们的
-
在这里中,我们所使用的是CONCAT() 拼接内置函数,解决了刚才的痛点覆盖问题
# 同时使用别名,防止列名发生改变(导致可读性变差)
SELECT `id`,CONCAT(`name`,666) as `name`,`age` from `user` WHERE id < 5
函数总结
-
内置函数有很多,但他们的使用方式其实都是类同的,不同的只是功能,我们根据自身所需去查找对应的内容
- 无非就是下面这个格式一样一样的,我觉得这些就没有必要一条条介绍了,感觉就像水字数一样,单纯的生硬知识堆砌意义不大。
- 我们只要掌握了对应的逻辑规律,剩下的套用就完事了
SELECT 内置函数(内容) from 表 WHERE 筛选出范围
- 在这些函数的使用中,往往也会可以和例如
别名
所结合起来(并不是说只有在算术表达式中才能使用),在我们前面章节中其实也有提及到了这一点
字符串函数
函数名 | 描述 | 示例 |
---|---|---|
CONCAT(str1, str2, ...) | 将多个字符串连接成一个字符串。 | CONCAT('Hello', ' ', 'World') 返回 'Hello World' |
SUBSTRING(str, start, length) | 从指定位置开始提取子字符串。 | SUBSTRING('Hello World', 7, 5) 返回 'World' |
UPPER(str) | 将字符串转换为大写。 | UPPER('hello') 返回 'HELLO' |
LOWER(str) | 将字符串转换为小写。 | LOWER('HELLO') 返回 'hello' |
LENGTH(str) | 返回字符串的长度。 | LENGTH('hello') 返回 5 |
数值函数
函数名 | 描述 | 示例 |
---|---|---|
ABS(x) | 返回数字的绝对值。 | ABS(-5) 返回 5 |
ROUND(x, d) | 将数字四舍五入到指定的小数位。 | ROUND(3.14159, 2) 返回 3.14 |
CEILING(x) | 返回不小于给定数字的最小整数。 | CEILING(3.1) 返回 4 |
FLOOR(x) | 返回不大于给定数字的最大整数。 | FLOOR(3.9) 返回 3 |
RAND() | 返回0到1之间的随机浮点数。 | RAND() |
日期和时间函数
函数名 | 描述 | 示例 |
---|---|---|
NOW() | 返回当前的日期和时间。 | NOW() |
CURDATE() | 返回当前日期。 | CURDATE() |
CURTIME() | 返回当前时间。 | CURTIME() |
DATE_FORMAT(date, format) | 根据指定的格式格式化日期。 | DATE_FORMAT(NOW(), '%Y-%m-%d') 返回 '2024-05-8' |
DATEDIFF(date1, date2) | 计算两个日期之间的天数差。 | DATEDIFF('2024-05-01', '2024-04-30') 返回 1 |
条件函数
函数名 | 描述 | 示例 |
---|---|---|
IF(condition, value_if_true, value_if_false) | 根据条件返回相应的值。 | IF(1 > 0, 'true', 'false') 返回 'true' |
CASE | 根据条件返回不同结果的控制流函数。 | CASE WHEN 1 > 0 THEN 'true' ELSE 'false' END 返回 'true' |
聚合函数
函数名 | 描述 |
---|---|
COUNT(expr) | 计算表达式中非NULL值的数量。 |
SUM(expr) | 计算表达式的总和。 |
AVG(expr) | 计算表达式的平均值。 |
MAX(expr) | 返回表达式的最大值 |
MIN(expr) | 返回表达式的最小值 |