MySQL函数和运算符全解析
立即解锁
发布时间: 2025-08-19 01:16:13 阅读量: 2 订阅数: 3 

# MySQL 函数和运算符全解析
## 1. 概述
MySQL 提供了丰富的函数和运算符,用于处理各种数据操作,包括算术运算、比较、逻辑判断、字符串处理以及分组统计等。这些功能可以帮助开发者更灵活地查询和处理数据库中的数据。
## 2. 算术函数和运算符
### 2.1 基本算术运算符
| 运算符 | 描述 |
| ---- | ---- |
| + | 执行数学加法 |
| - | 执行数学减法 |
| * | 执行数学乘法 |
| / | 执行数学除法 |
| 一元 - | 返回参数的补码 |
### 2.2 常用算术函数
| 函数 | 描述 | 示例 |
| ---- | ---- | ---- |
| ABS(number) | 返回提供的数字参数的绝对值 | `ABS(-5)` 返回 5 |
| CEILING(number) | 返回大于或等于该数字的最小整数 | `CEILING(3.2)` 返回 4 |
| DEGREES(number) | 将弧度转换为度 | `DEGREES(PI())` 返回 180 |
| EXP(number) | 根据公式 $e^{number}$ 返回浮点值 | `EXP(1)` 返回 $e$ 的近似值 |
| FLOOR(number) | 返回小于或等于该数字的最大整数 | `FLOOR(3.8)` 返回 3 |
| GREATEST(x, y, …) | 返回一组值中的最大值 | `GREATEST(1, 5, 3)` 返回 5 |
| LEAST(x, y, …) | 返回一组值中的最小值 | `LEAST(1, 5, 6)` 返回 1 |
| LOG(number) | 返回数字的自然对数 | `LOG(10)` 返回自然对数 |
| LOG10(number) | 返回以 10 为底的对数 | `LOG10(100)` 返回 2 |
| MOD(n,m) | 返回 n 除以 m 的余数 | `MOD(10, 3)` 返回 1 |
| PI() | 返回圆周率的值(3.141593) | `PI()` 返回 3.141593 |
| POW(x,y), POWER(x,y) | 返回 $x^y$ 的值 | `POW(2, 3)` 返回 8 |
| RADIANS(number) | 将度转换为弧度 | `RADIANS(180)` 返回 $\pi$ |
| RAND(), RAND(seed) | 返回 0 到 1 之间的随机浮点数,RAND(seed) 使用种子值 | `RAND()` 返回随机数 |
| ROUND(number) | 四舍五入到下一个更大的整数 | `ROUND(3.2)` 返回 3 |
| ROUND(number,d) | 将数字四舍五入到指定的小数位数 | `ROUND(3.14159, 2)` 返回 3.14 |
| SIGN(number) | 根据数字的正负返回 -1、0 或 1 | `SIGN(-5)` 返回 -1 |
| SQRT(number) | 返回数字的平方根 | `SQRT(9)` 返回 3 |
### 2.3 三角函数
MySQL 提供了一系列三角函数,如 `COS(number)`、`SIN(number)`、`TAN(number)`、`ACOS(number)`、`ASIN(number)`、`ATAN(nubmer)`、`ATAN2(x,y)`、`COT(number)`,这些函数都返回浮点值。
### 2.4 截断函数
`TRUNCATE(number, d)` 函数返回将数字截断到指定小数位的浮点值。
## 3. 比较函数和运算符
### 3.1 基本比较运算符
| 运算符 | 描述 |
| ---- | ---- |
| = | 比较两个值是否相等,不处理 NULL 值 |
| <>, != | 测试两个值是否不相等 |
| <=, <, >=, > | 小于、小于等于、大于等于、大于运算符 |
| <=> | 处理包含 NULL 值的相等比较 |
### 3.2 范围和集合运算符
| 运算符 | 描述 | 示例 |
| ---- | ---- | ---- |
| BETWEEN min AND max | 用于筛选指定范围内的值 | `WHERE salary BETWEEN 10000 AND 100000` |
| Expr IN (value, …) | 检查表达式是否在一组值中 | `WHERE role IN ('SE', 'CS')` |
| Expr NOT IN (value, …) | 检查表达式是否不在一组值中 | `WHERE role NOT IN ('SE', 'CS')` |
| INTERVAL(n, n1, n2, n3) | 检查值是否满足 n < n1 < n2 < n3 的条件 | |
| IS NULL | 检查值是否为 NULL | `WHERE closedate IS NULL` |
| IS NOT NULL | 检查值是否不为 NULL | `WHERE closedate IS NOT NULL` |
| ISNULL(expression) | 根据表达式的值是否为 NULL 来限制行 | `WHERE ISNULL(closedate)` |
### 3.3 比较运算符示例
```sql
-- 使用 <=> 处理 NULL 值
mysql> SELECT login
FROM login
WHERE closedate <=> null;
+-------+
| login |
+-------+
| johnd |
| bobs |
+-------+
2 rows in set (0.00 sec)
-- 使用 BETWEEN 筛选范围
mysql> SELECT login, salary
FROM login
WHERE salary BETWEEN 10000 AND 100000;
+---------+--------+
| login | salary |
+---------+--------+
| janed | 91000 |
| jaysong | 42000 |
| Mattm | 46000 |
| bobs | 24000 |
+---------+--------+
4 rows in set (0.00 sec)
```
### 3.4 逻辑运算符
| 运算符 | 描述 |
| ---- | ---- |
| NOT, ! | 执行逻辑非运算 |
| OR, || | 执行逻辑或运算 |
| AND, && | 执行逻辑与运算 |
以下是逻辑运算符的示例:
```sql
-- 逻辑或运算
mysql> SELECT login, role
FROM login
WHERE salary < 100000 OR ISNULL(closedate);
+---------+-------+
| login | role |
+---------+-------+
| johnd | owner |
| janed | CFO |
| jaysong | SE |
| Mattm | SE |
| bobs | CS |
+---------+-------+
5 rows in set (0.00 sec)
-- 逻辑与运算
mysql> SELECT login, role
FROM login
WHERE salary < 100000 AND ISNULL(closedate);
+-------+------+
| login | role |
+-------+------+
| bobs | CS |
+-------+------+
1 row in set (0.00 sec)
```
### 3.5 控制函数
| 函数 | 描述 | 示例 |
| ---- | ---- | ---- |
| CASE f WHEN c1 THEN t1 WHEN c2… ELSE f1 END | 根据多个条件返回不同的值 |
```sql
SELECT login,
CASE
WHEN salary > 249000 THEN 'No Bonus'
WHEN salary < 95000 THEN 'Full Bonus'
ELSE '1/2 Bonus'
END AS 'Bonus'
FROM login;
```
|
| IF(x1,x2,x3) | 类似于 IF THEN ELSE 语句 |
```sql
SELECT login, opendate,
IF (description like "Chief%", "Executive Team",
"Development Staff") AS "Group"
FROM login;
```
|
| IFNULL(x1,x2) | 如果 x1 为 NULL,则返回 x2,否则返回 x1 | `SELECT login, IFNULL(role, 'Must Have Role') FROM login;` |
| NULLIF(x1,x2) | 如果 x1 等于 x2,则返回 NULL | `SELECT login, NULLIF(role,"CEO") as "Role" FROM login;` |
### 3.6 控制函数示例
```sql
-- CASE 语句示例
mysql>
SELECT login,
CASE
WHEN salary > 249000 THEN 'No Bonus'
WHEN salary < 95000 THEN 'Full Bonus'
ELSE '1/2 Bonus'
END AS 'Bonus'
FROM login;
+---------+------------+
| login | Bonus |
+---------+------------+
| johnd | No Bonus |
| janed | Full Bonus |
| timd | 1/2 Bonus |
| jamesr | No Bonus |
| jaysong | Full Bonus |
| Mattm | Fu
```
0
0
复制全文
相关推荐










