1.字符串函数
length(a) 获得字符串a的长度
concat(a,b,c) 将多个值拼接成一个字符串
trim(a) 去掉字符串a首尾的空格
replace(a,b,c) 将字符串a中出现的b字符串替换成c
subString(str,index,len) 从第index个字符开始截取字符串str,最多取len个
reverse(a) 反转字符串a
locate(a,b) 查询子字符串a在字符串b中出现的位置,从1开始
2.数学函数
abs(a) 取a的绝对值
sqrt(a) 取a的平方根
mod(a,b) 取a%b 计算a整除b之后的余数
ceiling(a); 向上取整,取得大于等于a的最小整数
floor(a); 向下取整,取得小于等于a的最大整数
round(a,b); 四舍五入对a保留b位小数
truncate(a,b); 对数值a保留b位小数,直接去掉多余的尾数
sign(a) 返回1 0 -1表示a是正数 0 或者负数
power(a,b) 返回a的b次方[次幂]
rand() 返回0~1之间的一个随机数
floor(rand()*100) 获得0~100之间的随机数
3.日期时间函数
addDate(d,days) 在当前日期上加days天
addDate(d,interval num unit) 在当前日期上加days天
unit 可以是day month year week
curdate() 获得系统当前日期
curtime() 获得系统当前时间
sysdate() 获得系统日期时间
now() 获得系统日期时间
date_add(d,interval num unit) 在当前日期上加上对应的unit
date_sub(d,interval num unit) 在当前日期上减去对应的unit
sundate(d,interval num unit) 在当前日期上减去对应的unit
date_format(now(),'%Y %m %d') 按照指定格式格式化日期时间
date_format(now(),'%Y年%m月%d日 %H:%i:%s')
4.特殊函数
case when then end
如果员工工资超过3000,就输出优秀,如果工资超过2000,就输出合格,其它就输出 贫困
select sal,case when sal>=3000 then '优秀' when sal>=2000 then '合格' else '贫困' end from emp;
select sal,case sal when 3000 then '优秀' else '差一点' end from emp;
if(a,b,c) 如果a为真,就输出b,否则输出c
//如果1<2为真,就输出aa
select if(1<2,'aa','bb');
select if(comm is null,0,comm) from emp;
ifnull(a,b)如果a为null,就输出b
select ifnull(comm,0) from emp;
nullif(a,b) 如果a=b,就输出null,如果a!=b,就输出a
MySQL作业:
1.select * from dept where deptno in(select distinct deptno from emp);
2.先查SMITH的工资
select sal from emp where ename='SMITH';
将上一个语句作为条件查询
select * from emp where sal > (select sal from emp where ename='SMITH');
3.select a.ename,b.ename from (select ename,mgr from emp) a,(select empno,ename from emp) b where a.mgr=b.empno
4.select a.* from (select * from emp) a,(select empno,ename,hiredate from emp) b where a.mgr=b.empno and a.hiredate<b.hiredate;
5.select a.dname,b.* from dept a left join emp b on a.deptno=b.deptno;
6.select e.ename,d.dname from dept d,emp e where e.job='CLERK' and d.deptno=e.deptno;
7.select job from emp group by job having min(sal)>1500;
8.select ename from emp,dept where emp.deptno=dept.deptno and dept.dname='SALES';
9.select ename from emp where sal > (select avg(sal) from emp);
10.select ename,job from emp where job=(select job from emp where ename='SCOTT') and ename!='SCOTT';
11.select ename,sal from emp where sal in (select sal from emp where deptno=30);
12.select ename,sal from emp where sal > (select max(sal) from emp where deptno=30);
13.查询所有人的服务年限
select hiredate,datediff(sysdate(),hiredate) from emp;
select avg(sal),count(empno),avg(datediff(sysdate(),hiredate)) 平均期限 from emp group by deptno;
14.select e.ename,d.dname,e.sal from emp e join dept d on e.deptno=d.deptno;
15.select count(empno),dept.* from emp right join dept on emp.deptno=dept.deptno group by dept.deptno;
来源:CSDN
作者:正在路上的小白
链接:https://blog.csdn.net/weixin_44364444/article/details/104031176