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);

posted @ 2022-01-08 18:18  Space-guan  阅读(35)  评论(0)    收藏  举报