MySQL中流程控制相关的函数:
IF(value1,t,f)
如果value
满足条件,则返回t,否则返回f
参考代码如下:
SELECT NAME,age,IF(age>60,'前辈','年轻人') "details"
FROM t_emp;
以上代码编译结果如下:
------------------------------(分割线)----------------------------
IFNULL(value1,value2)
如果value1
不为空,返回value1
,否则返回value2
参考代码如下:
SELECT employee_id,last_name,commission_pct,
IF(commission_pct IS NOT NULL,commission_pct,0)
FROM emlpoyees;
SELECT employee_id,last_name,commission_pct,IFNULL(commission_pct,0)
FROM emlpoyees;
以上两种方法(使用IF()或者使用IFNULL())是等效的。
------------------------------(分割线)----------------------------
CASE WHEN 条件1 THEN result1 WHEN 条件2 THEN result2 ....[ELSE resultn] END
相当于java中的if-else if-......-else
参考代码如下:
SELECT NAME,age,CASE WHEN age>80 THEN '世外高人'
WHEN age>60 THEN '知天命'
WHEN age>40 THEN '不惑'
WHEN age>30 THEN '而立'
ELSE '小屁孩儿' END "details"
FROM t_emp;
以上代码编译结果如下:
------------------------------(分割线)----------------------------
CASE expr WHEN 常量值1 THEN 值1 WHEN 常量值1 THEN 值1... [ELSE 值n] END
相当于java中的switch...case...
参考代码如下:
SELECT last_name,job_id,salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary END "REVISED"
FROM employees;
举例:假如我们要实现以下功能:
查询部门号为 10,20, 30 的员工信息,
若部门号为 10, 则打印其工资的 1.1 倍,
20 号部门, 则打印其工资的 1.2倍,
30 号部门打印其工资的 1.3 倍数。
实现代码如下:
SELECT employee_id,last_name,department_id,salary,
CASE department_id WHEN 10 THEN 1.10*salary
WHEN 20 THEN 1.20*salary
WHEN 30 THEN 1.30*salary
END "new_salary"
FROM employees
WHERE department_id IN(10,20,30);
补充:其他函数
database()
返回当前数据库名
version()
返回当前数据库版本
user()
返回当前登录用户名
参考代码如下:
SELECT DATABASE(),VERSION(),USER()
FROM DUAL;
以上代码编译结果如下:
另外再补充几个常见的与密码相关的函数:
password(str)
返回字符串str的加密版本,41位长的字符串
md5(str)
返回字符串str的md5值,也是一种加密方式(不可逆的加密)
参考代码如下:
SELECT PASSWORD(156649131646),MD5(123456)
FROM DUAL;
以上代码编译结果如下: