Nodejs 第三十六章 表达式和函数

292 阅读5分钟

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后输出。
 -- 注意:进行除法运算时应确保不会发生除以零的情况。
  • 通过默认的基础情况,我们能看到当前没有变化的表格

image-20240507212531110

  • 对其进行加法表达式,能够看到所筛选出来的表格中,年龄部分都加了20

    • 但缺点是标题也变成了age+20,这就美观了,看起来意义也不明
    • 除了加法之外,其他减乘除算术表达式也是类似的情况

image-20240507212647224

  • 好在我们前面所学的别名功能可以解决这个问题

    • 我们又将其命名回了age

image-20240507212822574

函数

为什么需要函数?

  • 但目前我们只通过算术表达式其实能做的事情还是有限的,这样好像只能改变有关于数字的内容,但我们数据库中,除了数字之外,还有文本内容

    • 如果我们要在文本内容后面继续添加内容的话?算术表达式能不能做到?

image-20240507213221908

  • 很可惜是做不到的,这个直接把name原本显示的内容就覆盖掉了,这就太糟糕了

    • 为了弥补算术表达式的空白,我们的内置函数就派上用场了
    • 同时必须说明,我们此时看到的改变内容只是视觉上的效果,实际的数据库内容是没有发生改变的,因为我们使用的是SELECT查询关键字
  • 在这里中,我们所使用的是CONCAT() 拼接内置函数,解决了刚才的痛点覆盖问题

 # 同时使用别名,防止列名发生改变(导致可读性变差)
 SELECT `id`,CONCAT(`name`,666) as `name`,`age` from `user` WHERE id < 5

image-20240507213623881

函数总结

  • 内置函数有很多,但他们的使用方式其实都是类同的,不同的只是功能,我们根据自身所需去查找对应的内容

    • 无非就是下面这个格式一样一样的,我觉得这些就没有必要一条条介绍了,感觉就像水字数一样,单纯的生硬知识堆砌意义不大。
    • 我们只要掌握了对应的逻辑规律,剩下的套用就完事了
 SELECT 内置函数(内容) fromWHERE 筛选出范围
  • 在这些函数的使用中,往往也会可以和例如别名所结合起来(并不是说只有在算术表达式中才能使用),在我们前面章节中其实也有提及到了这一点

image-20240507223032622

字符串函数

函数名描述示例
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)返回表达式的最小值