MySQL中常见的流程控制函数

IF(expr1,expr2,expr3)

说明:如果expr1为true,返回expr2;如果expr1为false,则返回expr3

// 由于条件为false,所以返回的结果为shanghai
SELECT IF(false,'beijing','shanghai') FROM DUAL;

// 由于条件为true,所以返回结果为beijing
SELECT IF(true,'beijing','shanghai') FROM DUAL;

IFNULL(expr1,expr2)

说明:如果expr1为非空,则返回expr1;如果expr1为空,则返回expr2

//第一个表达式不为空,所以返回小名
SELECT IFNULL("小名","大名") FROM DUAL; 
//第一个表达式为空,所以返回大名
SELECT IFNULL(NULL,"大名") FROM DUAL; 

SELECT CASE WHEN expr1 THEN expr2

WHEN expr3 THEN expr4...

ELSE expr5 END;

说明:该条件类似于if-else的多分支语句,when后面的是条件,then后面的是结果

// 先创建一张emp表备用
 CREATE TABLE emp ( 
     empno INT PRIMARY KEY, 
     ename NVARCHAR(30), 
     job NVARCHAR(30), 
     mgr INT , 
     hiredate DATETIME,
     sal DECIMAL(6.2),
     comm DECIMAL(6.2), 
     deptno INT ,
     FOREIGN KEY(deptno) REFERENCES dept(deptno)) DEFAULT CHARACTER SET utf8;

//给emp表插入数据
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES (7359,'SMITH','CLERK',7902,'1980-12-17',800.00,NULL,20);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES (7449,'ALLEN','SALESMAN',7698,'1981-2-20',1600,300,30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7231, 'WARD', 'SALESMAN', 7698, '1981-2-22', 1250, 500, 30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7246, 'JONES', 'MANAGER', 7839, '1981-4-2', 2975, NULL, 20);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7254, 'MARTIN', 'SALESMAN', 7698, '1981-9-28', 1250, 1400, 30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7238, 'BLAKE', 'MANAGER', 7839, '1981-5-1', 2850, NULL, 30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7242, 'CLARK', 'MANAGER', 7839, '1981-6-9', 2450, NULL, 10);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7788, 'SCOTT', 'ANALYST', 7566, '1987-4-19', 3000, NULL, 20);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7819, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7873, 'TURNER', 'SALESMAN', 7698, '1981-9-8', 1500, 0, 30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES (7996, 'ADAMS', 'CLERK', 7788, '1987-5-23', 1100, NULL, 20);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES (7990, 'JAMES', 'CLERK', 7698, '1981-12-3', 950, NULL, 30);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES ( 7262, 'FORD', 'ANALYST', 7566, '1981-12-3', 3000, NULL, 20);
INSERT INTO emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-1-23', 1300, NULL, 10);



//查询emp表中的job字段,如果为`clerk`则显示`职员`,
//如果为`MANAGER`则返回`经理`,如果为`SALESMAN`则返回`销售人员`,其它情况就自然返回
//最终字段结果以job返回
SELECT (SELECT CASE WHEN job = 'clerk' THEN '职员' 
WHEN job = 'MANAGER' THEN '经理' 
WHEN job = 'SALESMAN' THEN '销售人员' 
ELSE job END) AS 'job' FROM emp;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值