MySQL学习记录02
单行处理函数
格式:select 函数(列名) form 表名;
lower转小写,upper转大写,substr取子串,contact拼接,length取长度,trim去空格,str_to_date将字符串转换成日期,date_format格式化日期,format设置千分位,round四舍五入,rand()生成随机数,ifnull可以将null转换成一个具体值
substr 取子串:substr(被截取的字符串,起始下标,截取的长度)
首字母大写
contact(字符串1,字符串2)
trim:胜利查询里面的空格
round(数值,保留位数(正数->小数点后位数,负数->小数点前位数))
一百以内随机数:select round(rand()*100,0) from emp;
NULL只要参与运算,最终结果一定是NULL。为了避免这个现象,需要使用ifnull函数。ifnull函数用法:ifnull(数据,被当做哪个值),补助为NULL的时候,将补助当做0。
select ename,(sal + ifnull(comm,0)) * 12 as yearsal from emp;计算年薪:(月薪+补助)*12
case... when(当什么时候)...then(干什么)...when...then...else...end
当员工的工作岗位是MANAGER的时候,工资上涨10%,当工作岗位是SALESMAN的时候,工资上涨50%,其他正常。
select ename,job (case job when 'MANAGER' then sal*1.1 when 'SALESMAN' then sal*1.5 else sal end) as newsal from emp;
多行处理函数:输入多行,最终输出一行
count 计数,sum 求和,avg 平均值,max 最大值,min 最小值
分组函数在使用的时候必须先进性分组,然后才能用。如果没有对数据进行分组,整张表默认为一组。
分组函数自动忽略NULL,你不需要提前对NULL进行处理。
count(*)是统计表中的总行数,因为每一行记录不可能都是NULL,一行数据中有一列不为NULL,则这行数据就是有效的。count(具体字段)统计表当中的总行数。
分组函数不能够直接使用在where子句中
所有的分组函数可以组合起来一起用
分组查询
select ... from ... group by ...
在实际的应用中,有些需求需要先进行分组,然后对每一组的数据进行操作。
综合
select ... from ... where ... group by ... having ... order by ...
在一条select语句当中,如果有group by语句的话,select后面只能跟,参加分组的字段,以及分组函数。其它的一律不能跟。
找出每个不同部门,不同岗位的最高薪资:select deptno,job,max(sal) from emp group by deptno,job;
使用having可以对分完组之后的数据进一步过滤。having不能单独使用,having不能代替where,having必须和group by联合使用。
要求平均薪资大于2500的部门:select deptno,avg(sal) from emp group by deptno having avg(sal) > 2500;
能用where就用where,效率更高。
从某张表中查询数据,先经过where条件筛选初有价值的数据。对这些有价值的数据进行分组,分组之后可以使用having继续筛选,select查询出来。
distinct:去除重复记录
distinct只能出现在所有字段的最前方,表示字段联合起来去重。
连接查询:emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种夸表查询,多张表联合起来查询数据,被称为连接查询。
分类
内连接
等值连接
表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where
select ... from a join b on a和b的连接条件 where ...
非等值连接:条件不是一个等量关系,称为非等值链接
自连接
查询员工的上级领导,要求显示员工名和对应的领导名。
select a.ename as '员工名' , b.ename as '领导名' from emp a join emp b on a.mgr = b.empno;
把一张表看成两张表
外连接
左外连接(左连接)
右外连接(右连接)
select e.ename,d.dname from emp e right join dept d on e.deptno = d.deptno;
right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将着张表的数据全部查询出来,捎带着关联查询左边的表。在外链接当中,两张表连接,产生了主次关系。
带NULL,内连接省略NULL。
内连接没有主次之分
全连接
三张表连接
案例:找出每个员工的部门名称以及工资等级,还有上级领导,要求显示员工名,领导名,部门名,薪资,薪资等级?
select e.ename,e.sal,d.dname,s.grade,l.ename from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and s.hisal left join emp 1 on e.mgr = l.empno;
子查询
select语句中嵌套select语句,被嵌套的select语句称为子查询。
select ... (select) from.. (select) where... (select)
找出比最低工资高的员工姓名和工资:where里的子查询:select ename,sal from emp where sal > (select min(sal) from emp);

浙公网安备 33010602011771号