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)
相关推荐
指尖上跳动的旋律2 分钟前
shell脚本定义特殊字符导致执行mysql文件错误的问题
数据库·mysql
一勺菠萝丶13 分钟前
MongoDB 常用操作指南(Docker 环境下)
数据库·mongodb·docker
m0_748244831 小时前
StarRocks 排查单副本表
大数据·数据库·python
C++忠实粉丝1 小时前
Redis 介绍和安装
数据库·redis·缓存
wmd131643067121 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
是阿建吖!2 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱2 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
ClouGence2 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存
m0_748236582 小时前
《Web 应用项目开发:从构思到上线的全过程》
服务器·前端·数据库
苏三说技术2 小时前
Redis 性能优化的18招
数据库·redis·性能优化