MYSQL-流程控制,加密解密,信息,其他函数

一.流程控制函数

# 4.流程控制函数
# 1)IF(表达式,VALUE1,VALUE2)
SELECT last_name,salary,IF(salary >= 6000 ,'高工资','低工资') details
FROM employees;
SELECT last_name,commission_pct,IF(commission_pct IS NOT NULL,'commission_pct','0') details
FROM employees;
#2) IFNULL(VALUE1,VALUE2)  :看做IF(表达式,VALUE1,VALUE2)特殊情况
#不是null,返回value1,为null返回value2
# 3) CASE WHEN ... THEN ... WHEN ... THEN ... ELSE ... END //else可以省略
# 类似于 java的 if ... else if else
SELECT last_name,salary,CASE WHEN salary >= 15000 THEN '高新' 
WHEN salary >= 10000 THEN '潜力股'
WHEN salary >= 8000 THEN '小屌丝'
ELSE  '草根' END details,department_id
FROM employees;
# 4) CASE ... WHEN ...THEN... WHEN ...THEN ... ELSE ... END
#类似于 switch case
/*
练习:查询部门号为 10,20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其
工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数,其他部门打印1.4倍。
*/
SELECT last_name,department_id,salary,CASE WHEN department_id = 10 THEN salary * 1.1
WHEN department_id = 20 THEN salary *1.2
WHEN department_id = 30 THEN salary*1.3 
ELSE salary * 1.4 
END details
FROM employees;
/*练习:查询部门号为 10,20, 30 的员工信息, 若部门号为 10, 则打印其工资的 1.1 倍, 20 号部门, 则打印其
工资的 1.2 倍, 30 号部门打印其工资的 1.3 倍数。
*/
SELECT last_name,department_id,salary,
CASE department_id WHEN 10 THEN salary*1.1
WHEN 20 THEN salary * 1.2
WHEN 30 THEN salary * 1.3 END details
FROM employees
WHERE department_id IN (10,20,30);




二.加密解密函数

# 加密解密函数
#1.加密
# 1) password(str) 函数8.0 不推荐使用
SELECT PASSWORD('mysql');
# 2) MD5(str) HSA(str) 后者更安全,都不可逆
SELECT MD5('mysql'),SHA('mysql');
# 2. 加密解密
# 3) ENCODE(valve,password_seed)   DECODE(value,password_seed)
# mysql 8.0 不用了
SELECT ENCODE('mysql','my'),DECODE('ENCODE('mysql','my') ','my');

信息函数

# 信息函数
#1. VERSION()  返回版本号
#2. CONNECTION_ID()  MYSQL服务器的连接数
#3. DATABASE() , SCHEMA() //返回数据库命令行所在的数据库
#4. USER() CURRENT_USER()、SYSTEM_USER() SESSION_USER()
#返回当前连接MySQL的用户名,返回结果格式为 “主机名@用户名
#5.CHARSET(value) 返回字符串value自变量的字符集
#6. COLLATION(value) 返回字符串value的比较规则
SELECT VERSION(),CONNECTION_ID(),DATABASE(),USER(),CHARSET('学习使人进步'),COLLATION('学习');

在这里插入图片描述

其他函数(了解)

#其他函数
#1.FORMAT(value,n)返回对数字value进行格式化后的结果数据。n表示 四舍五入后保留n为小数
SELECT FORMAT(4.2356,3),FORMAT(4,3),FORMAT(231.23,-1);
#4.236  4.000 ,231 # 如果n的值小于或者等于0,则只保留整数部分

#2.CONV(value,from,to) 将value的值进行不同进制之间的转换
SELECT CONV(3,16,2),CONV(888,10,16),CONV(NULL,10,2)
# 11    378   null
#3. INET_ATON(ipvalue) 将以点分隔的IP地址转化为一个数字
SELECT INET_ATON('192.168.1.100')  
#得到一个整数  256进制
#4. INET_NTOA(value) 将数字形式的IP地址转化为以点分隔的IP地址
SELECT INET_NTOA(3232235876);
#5 BENCHMARK(n,expr)将表达式expr重复执行n次。用于测试MySQL处理expr表达式所耗费的时间
SELECT BENCHMARK(100000,MD5('mysql'));
#6. CONVERT(value USING char_code) 将value所使用的字符编码修改为char_code
#实现字符集的转换
SELECT CHARSET('atguigu'),CHARSET(CONVERT('atguigu' USING 'utf8mb4' ));

在这里插入图片描述

单行函数练习

# 1.显示系统时间(注:日期+时间)
SELECT NOW();
# 2.查询员工号,姓名,工资,以及工资提高百分之20%后的结果(new salary)
SELECT employee_id,last_name,salary, salary*1.2 "new salary"
FROM employees;
# 3.将员工的姓名按首字母排序,并写出姓名的长度(length) 
SELECT last_name,LENGTH(last_name)
FROM employees
ORDER BY last_name
# 4.查询员工id,last_name,salary,并作为一个列输出,别名为OUT_PUT
SELECT CONCAT(employee_id,last_name,salary ) OUT_PUT
FROM employees
# 5.查询公司各员工工作的年数、工作的天数,并按工作年数的降序排序 
SELECT last_name,YEAR(NOW())-YEAR(hire_date) job_year,DATEDIFF(NOW(),hire_date) job_day
FROM employees
ORDER BY job_year DESC; 
# 6.查询员工姓名,hire_date , department_id,满足以下条件:雇用时间在1997年之后,department_id 为80 
#或 90 或110, commission_pct不为空 
SELECT last_name,hire_date,department_id
FROM employees
WHERE YEAR(hire_date) >= 1997 AND department_id IN (80,90,100) AND commission_pct IS NOT NULL
# 7.查询公司中入职超过10000天的员工姓名、入职时间
SELECT last_name,hire_date
FROM employees
WHERE DATEDIFF(NOW(),hire_date) >=10000
# 8.做一个查询,产生下面的结果 <last_name> earns <salary> monthly but wants <salary*3>
SELECT CONCAT(last_name,' earns ',TRUNCATE(salary,0),' monthly but wants ',FORMAT(salary*3,-1)) "Dream Salary"
FROM employees
#24000 24,000
# 9.使用case-when,按照下面的条件: job grade AD_PRES A ST_MAN B IT_PROG C when D ST_CLERK E
SELECT last_name,job_id,CASE job_id WHEN 'AD_PRES'THEN 'A'
WHEN 'ST_MAN'  THEN 'B'
WHEN 'IT_PROG'THEN 'C'
WHEN 'SA_REP' THEN 'D'
WHEN 'ST_CLERK' THEN 'E' END "Grade"
FROM employees

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值