表达式和函数

表达式

将数字与运算符连接起来的组合称之为表达式

1
2
1 + 1
2 * 3

可以将数字称为操作数,运算符称为操作符.

MySql中的操作数与操作符含义如下:

操作数

  1. 常数
    平时用到的数字,字符串,时间值等,是一个确定的值。

  2. 列名
    针对某个具体的表,它的列名可以被当作表达式的一部分。

  3. 函数调用
    MySql中的函数调用也可以作为表达式,比如NOW()

  4. 标量子查询或者行字查询

  5. 其他表达式
    多个操作数与操作符组合。

假设col为列名

1
2
(col - 5) / 3
(1 + 1) * 2 + col * 3

操作符

  1. 算数操作符

小学生都会的加减乘除法~

操作符 示例 描述
+ a + b 加法
- a - b 减法
* a * b 乘法
/ a / b 除法
DIV a DIV b 除法,取商的整数部分
% a % b 取余
- -a 附好

在使用 MySQL 中的算术操作符时需要注意,DIV/都表示除法操作符,但是 DIV 只会取商的整数部分,/会保留商的小数部分。比如表达式 2 DIV 3 的结果是 0,而 2 / 3 的结果是 0.6667

  1. 比较操作符

比较操作符为搜索条件中的比较操作符,由其连接而成的表达式也称为布尔表达式,表示

  1. 逻辑操作符

用来将多个布尔表达式连接起来。

操作符 示例 描述
AND a AND b 只有 a 和 b 同时为真,表达式才为真
OR a OR b 只要 a 或 b 有任意一个为真,表达式就为真
XOR a XOR b a 和 b 有且只有一个为真,表达式为真

表达式的使用

  1. 放在查询列表中
1
2
3
SELECT xxx + 100 FROM 表名;

SELECT xxx + 100 AS bbb FROM 表名;
  1. 作为搜索条件
1
SELECT * FROM 表名 WHERE xxx > 1;

函数

文本处理函数

名称 调用示例 示例结果 描述
LEFT LEFT('abc123', 3) abc 给定字符串从左边取指定长度的子串
RIGHT RIGHT('abc123', 3) 123 给定字符串从右边取指定长度的子串
LENGTH LENGTH('abc') 3 给定字符串的长度
LOWER LOWER('ABC') abc 给定字符串的小写格式
UPPER UPPER('abc') ABC 给定字符串的大写格式
LTRIM LTRIM(' abc') abc 给定字符串左边空格去除后的格式
LTRIM RTRIM('abc ') abc 给定字符串右边空格去除后的格式
LTRIM SUBSTRING('abc123', 2, 3) bc1 给定字符串从指定位置截取指定长度的子串
CONCAT CONCAT('abc', '123', 'xyz') abc123xyz 将给定的各个字符串拼接成一个新字符串

日期和时间处理函数

名称 调用示例 示例结果 描述
NOW NOW() 2019-08-16 17:10:43 返回当前日期和时间
CURDATE CURDATE() 2019-08-16 返回当前日期
CURTIME CURTIME() 17:10:43 返回当前时间
DATE DATE('2019-08-16 17:10:43') 2019-08-16 将给定日期和时间值的日期提取出来
DATE_ADD DATE_ADD('2019-08-16 17:10:43', INTERVAL 2 DAY) 2019-08-18 17:10:43 将给定的日期和时间值添加指定的时间间隔
DATE_SUB DATE_SUB('2019-08-16 17:10:43', INTERVAL 2 DAY) 2019-08-14 17:10:43 将给定的日期和时间值减去指定的时间间隔
DATEDIFF DATEDIFF('2019-08-16', '2019-08-17'); -1 返回两个日期之间的天数(负数代表前一个参数代表的日期比较小)
DATE_FORMAT DATE_FORMAT(NOW(),'%m-%d-%Y') 08-16-2019 用给定的格式显示日期和时间

数值处理函数

名称 调用示例 示例结果 描述
ABS ABS(-1) 1 取绝对值
Pi PI() 3.141593 返回圆周率
COS COS(PI()) -1 返回一个角度的余弦
EXP EXP(1) 2.718281828459045 返回 e 的指定次方
MOD MOD(5,2) 1 返回除法的余数
RAND RAND() 0.7537623539136372 返回一个随机
SIN SIN(PI()/2) 1 返回一个角度的正数
SQRT SQRT(9) 3 返回一个数的平方 弦
TAN TAN(0) 0 返回一个角度的正切

聚合函数

函数名 描述
COUNT 返回某列的行数
MAX 返回某列的最大值
MIN 返回某列的最小值
SUM 返回某列值之和
AVG 返回某列的平均值

count 函数

用来统计行数。

  1. COUNT(*): 对表中行的数目进行统计,不管列的值是不是NULL
  2. COUNT(列名): 对特定的列进行计数,会忽略掉该列为NULL的行。
1
SELECT COUNT(*) FROM 表名;

MAX 函数

用来查询某列中数据的最大值。

1
SELECT MAX(xxx) FROM 表名;

MIN 函数

用来查询某列中数据的最小值。

1
SELECT MIN(xxx) FROM 表名;

SUN 函数

用来计算某列数据的和。

1
SELECT SUM(xxx) FROM 表名;

AVG 函数

用来计算某列数据的平均数。

1
SELECT AVG(xxx) FROM 表名;

使用DISTINCT过滤重复数据

1
SELECT COUNT(DISTINCT xxx) FROM 表名;

组合聚合函数

1
SELECT COUNT(*) AS 成绩记录总数, MAX(score) AS 最高成绩, MIN(score) AS 最低成绩 FROM student_score;

隐式类型转换

隐式类型转换的场景

当某个值的类型与上下文所求的类型不符,MySql就会根据上下文环境中需要的类型对该值进行类型转换。由于是MySql自动完成的,所以称为隐式类型转换

  1. 操作数类型转换为适合操作符计算的相应类型
1
2
3
1 + 2 -> 3
'1' + 2 -> 3
'1' + '2' -> 3
  1. 将函数参数转换为该函数期望的类型
1
2
3
CONCAT('1', '2') -> '12'
CONCAT('1', 2) -> '12'
CONCAT(1, 2) -> '12'
  1. 存储数据时,把某个值转换为某个列需要的类型

类型转换的注意事项

  1. MySql会尽量把值转换为表达式中需要的类型

  2. 在运算时会自动提升操作数的类型