MySQL 中常用函数使用

IF()

IF函数根据判断条件是否成立进行选择执行,成立时执行一条语句,不成立时执行另一条语句

语法结构:

sql 复制代码
IF(condition, value_if_true, value_if_false)

参数说明

  • condition: 判断条件
  • value_if_true: 如果 condition 的结果为 TRUE,返回该值
  • value_if_false: 如果 condition 的结果为 FALSE,返回该值

举例:

sql 复制代码
SELECT id, name,
       IF(age<18,'未成年','成年') AS '是否成年'
FROM student;

IFNULL()

IFNULL(expr1,expr2),如果 expr1 的值为 null,则返回 expr2 的值,如果 expr1 的值不为null,则返回 expr1 的值。

sql 复制代码
SELECT   IFNULL(1,0);  -- 输出结果:1   
SELECT   IFNULL(NULL,10); -- 输出结果:10   
SELECT   IFNULL(1/0,10);  -- 输出结果:10   
SELECT   IFNULL(1/0,'yes'); -- 输出结果:'yes' 
SELECT   IFNULL(NULL,'B');    -- 输出结果:B
SELECT   IFNULL('Hello','B'); -- 输出结果:Hello

NULLIF()

NULLIF(expr1,expr2),如果 expr1=expr2 成立,那么返回值为 null,否则返回值为 expr1 的值。

sql 复制代码
SELECT NULLIF('A','A');     -- 输出结果:null
SELECT NULLIF('A','B');     -- 输出结果:A

ISNULL()

ISNULL(expr),如果 expr 的值为 null,则返回 1,如果 expr1 的值不为 null,则返回 0。

sql 复制代码
SELECT ISNULL(NULL);        -- 输出结果:1
SELECT ISNULL('HELLO');     -- 输出结果:0

CASE

CASE表示函数开始,END表示函数结束。如果 expr1 成立,则返回 value1,如果 expr2 成立,则返回value2,当全部不成立则返回 valueN,而当有一个成立之后,后面的就不执行了。

sql 复制代码
SELECT CASE 
  WHEN 1 > 0
  THEN '1 > 0'
  WHEN 2 > 0
  THEN '2 > 0'
  ELSE '3 > 0'
  END
#输出结果:1 > 0

如果表达式 expr 的值等于 e1,返回 value1;如果等于 e2,则返回 value2。否则返回 valueN。

sql 复制代码
SELECT CASE xfflag 
  WHEN 1 THEN '结算账目'
  WHEN 2 THEN '消费账目'
ELSE '类型不对'

UPSERT

INSERT INTO ... ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。

这个语法适用于在 insert 的时候,如果 insert 的数据会引起唯一索引(包括主键索引)的冲突,即唯一值重复了,则不会执行 insert 操作,而执行后面的 update 操作,使用给定的新值来更新冲突行中的列。

一般 Update子句可以使用 VALUES(col_name) 获取 insert 部分的值。也是项目中使用最多的方式。

注意:VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。

sql 复制代码
INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)
VALUES("201215121", "李勇", "男", 30, "CS")
on DUPLICATE key UPDATE Sage=values(Sage);
sql 复制代码
mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   18 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)

mysql> INSERT INTO student(Sno, Sname, Ssex, Sage, Sdept)
    -> VALUES("201215121", "李勇", "男", 30, "CS")
    -> on DUPLICATE key UPDATE Sage=values(Sage);
Query OK, 2 rows affected (0.01 sec)

mysql> select * from student;
+-----------+--------+------+------+-------+
| Sno       | Sname  | Ssex | Sage | Sdept |
+-----------+--------+------+------+-------+
| 201215121 | 李勇   | 男   |   30 | CS    |
| 201215122 | 刘晨   | 女   |   19 | CS    |
| 201215123 | 王敏   | 女   |   18 | MA    |
| 201215125 | 张立   | 男   |   19 | IS    |
+-----------+--------+------+------+-------+
4 rows in set (0.00 sec)
相关推荐
tokepson1 小时前
Mysql下载部署方法备份(Windows/Linux)
linux·服务器·windows·mysql
nbsaas-boot2 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
zgl_200537792 小时前
ZGLanguage 解析SQL数据血缘 之 Python + Echarts 显示SQL结构图
大数据·数据库·数据仓库·hadoop·sql·代码规范·源代码管理
acaad3 小时前
Redis下载与安装(Windows)
数据库·redis·缓存
玄〤3 小时前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
SunflowerCoder3 小时前
EF Core + PostgreSQL 配置表设计踩坑记录:从 23505 到 ChangeTracker 冲突
数据库·postgresql·c#·efcore
短剑重铸之日3 小时前
《7天学会Redis》Day2 - 深入Redis数据结构与底层实现
数据结构·数据库·redis·后端
Zoey的笔记本4 小时前
「支持ISO27001的GTD协作平台」数据生命周期管理方案与加密通信协议
java·前端·数据库
什么都不会的Tristan4 小时前
MybatisPlus-扩展功能
数据库·mysql
超级种码4 小时前
Redis:Redis 数据类型
数据库·redis·缓存