MySQL数据库day_03

目录

分组函数(多行处理函数):

分组查询(非常重要):

案例实验:

单标查询的关键字运行顺序:

综合案例:

distinct关键字:

连接查询(多表查询):

内连接之等值连接:

内连接之非等值连接:

内连接之自连接(把一张emp 看成一个员工表和一个领导表):

外连接:

    右(外)连接:

    左(外)连接:


分组函数(多行处理函数):

        特点:输入多行,最终输出一行

count

计数

select count(sal) from emp;

sum

求和

select sum(sal) from emp;

avg

平均值

select avg(sal) from emp;

max

最大值

select max(sal) from emp;

min

最小值

select min(sal) from emp;

       注意:

                首先在使用之前必须要先分组,如果没有分组,那么就是默认一张表

               分组函数自动忽略NULL,不需要提前对NULL进行处理

       解释:分组函数(*):统计表当中的总行数

                  分组函数(具体字段):字段中不为NULL的元素

                  分组函数不能用在where后边

       解释:执行顺序是from 、where、 group by、 select 、order by

                 分组函数的使用需要先分组,在使用where之后,没有进行分组。

                 然而在select之后就可以使用,因为在select之前被默认分一组

分组查询(非常重要):

       例子:    计算每个部门的薪资和、计算每个工作岗位的平均薪资;

        特点:     需要先分组,在对每一组的数据进行操作,这个时候需要我们用到分组查询

        格式:     select...from...group by...having...

案例实验:

        案例①:找出每个工作岗位的工资和

              select sal,ename,job,sum(sal) from emp group by job;

        注意:写了ename,但是分组就没有意义了,每个人的名字都不一样在,Oracle中报错。、                        只能跟着,参加分组的字段和分组函数,其他的一律不跟。

        案例②:找出每个部门的最高薪资

              select max(sal),deptno from emp group by deptno;

        案例③:找出每个部门不同工作岗位的最高工资

               技巧:把两个部门看成一个部门

              select max(sal),deptno,job from emp group by deptno,job;

        案例④:找出每个部门的最高薪资,要求最高薪大于3000的

              技巧:使用having,并且不能单独使用,需要和group by联合使用

              select deptno,max(sal) from emp group by deptno having max(sal)>3000;  效率低

              select deptno,max(sal) from emp where sal>3000 group by deptno; 效率高

       注意:在where和having中优先使用where,效率稍微高一点

       案例⑤:找出每个部门的平均薪资高于2500,只能使用having.

              select deptno,avg(sal) from emp group by deptno having avg(sal)>2500;

单标查询的关键字运行顺序:

          先运行from,确定从某张表。在运行where条件筛选有价值的数据,再运行group by进行分             组,之后可以在使用having继续筛选,最后select进行查询,最后order by进行排序。

综合案例:

          找出每个岗位的平均薪资,要求显示平均薪资大于1500的,除了MANAGER岗位之外,要              求按照平均薪资进行降序排列

         select job,avg(sal) as avgsal from emp where job<> ’MANAGER’ group by job having                    avg(sal) > 1500 order by avgsal desc;

distinct关键字:

         特点:查询结果中取出重复的记录

            select distinct job from emp;

            select distinct job,deptno from emp;

            select deptno,distinct job from emp;

     注意:

  1. 可以去除多组记录的关键字
  2. distinct不能放在后边,只能放在开头

连接查询(多表查询):

定义:从多张表中查询数据,被称为连接查询

分类:  ①年代:SQL92:简单演示一个例子

                         SQL99:重点学习

            ②连接的方式:内连接:等值连接、非等值连接、自连接

                                   外连接:左外连接(左连接)、右外连接(右连接)

    全连接(不讲);

实现:

不加限制条件会产生笛卡尔积现象,即显示匹配次数是两个记录的乘积的表

为了避免笛卡尔积现象,可以外加限制条件

select ename,dname from emp,dept where emp.deptno=dept.deptno;

可以限制查询的范围,从而提高效率,其次可以更改表的名字

SQL92语法:sleect e.ename,d,ename from emp e,dept d where e.deptno=d.deptno;

SQL99语法:select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;

注意:通过笛卡尔积现象得出,降低表的链接次数提升效率

内连接之等值连接:

         案例:显示员工和员工的岗位

         select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno;(inner可省)

内连接之非等值连接:

       案例:显示员工和员工的薪资等级

       select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

内连接之自连接(把一张emp 看成一个员工表和一个领导表):

      案例:显示员工和员工的领导名字

          select a.ename  'am',b.ename  'bo' 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;

    左(外)连接:

           select e.ename,d.dname from emp e left join dept d on e.deptno=d.deptno;

    特点:①将右边的表看做成主表,主显右表,捎带显示左表

               ②right和left右边有一个outer,outer可以省略

               ③外连接的查询结果条数一定是大于等于内连接的查询结果条数

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aimigas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值