MySQL的常用判断函数使用

首先在公司实习期间,真实的感受到了SQL没学好是多么难受的一件事,需求下来,自己想要的数据自己写不出复杂的SQL取不出数据,没有数据来源又谈何业务逻辑?然后决心恶补SQL,望大家一起共勉,学好SQL真的是做后台的基础之一啊。

先创建一个表模型,数据库大家随意,只要是MySQL的就行:

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `state` tinyint(4) DEFAULT NULL,-- 1:启用;2:禁用
  `type` tinyint(4) DEFAULT NULL,-- 1:普通员工;2:中层员工;3:高层员工
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张三', '1', '1');
INSERT INTO `user` VALUES ('2', '李四', '1', '2');
INSERT INTO `user` VALUES ('3', '王五', '2', '3');
INSERT INTO `user` VALUES ('4', '赵六', '2', '2');
--------------------- 

case when 函数

这个函数有点类似switch case语句,如果你学过Java类似语言,这个肯定是很容易理解的

语法1:

CASE fieldname   #字段名
	WHEN value1 THEN result1       #value为字段返回值 result匹配字段返回值之后返回的结果
	WHEN value2 THEN result2
	WHEN value3 THEN result3
	……
	ELSE defaultresult             #默认返回值
END

案例1:

SELECT
	`id` '用户ID',
	`name` '用户名称',
	(
		CASE `state`
			WHEN 1 THEN '启用'
			WHEN 2 THEN '禁用'
			ELSE NULL
		END
	) '用户状态'
FROM
	`user`

语法2:

CASE
	WHEN condition1 THEN result1    #跟语法1的区别在于将表达式条件写到了condition的位置
	WHEN condition2 THEN result2
	WHEN condition3 THEN result3
	……
	ELSE defaultresult
END

案例2:

SELECT
	`id` '用户ID',
	`name` '用户名称',
	(
		CASE 
			WHEN `state`=1 THEN '启用'
			WHEN `state`=2 THEN '禁用'
			ELSE NULL
		END
	) '用户状态'
FROM
	`user`

if函数

case when 函数处理复杂逻辑判断比较常用,如果只是处理一次判断,更简单的方式是IF函数

语法:

IF(condition,result1,result2)

案例1:

SELECT
	`id` '用户ID',
	`name` '用户名称',
	IF(state=1,'启用','禁用') '用户状态'
FROM
	`user`

巧用case when

如果当前字段为空,查询结果返回“none”

1

select case when 字段 is null then 'none' else 字段 end  as 字段 from 表;

如果当前字段为空字符,查询结果返回“none”

1

select case when 字段= '' then 'none' else 字段 end  as 字段 from 表;

is null(expr) 函数

如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0

IFNULL (expr1,expr2) 函数:

假如expr1   不为   NULL,则   IFNULL()   的返回值为   expr1;

发布了27 篇原创文章 · 获赞 32 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39809458/article/details/87914139