Mysql(二) 聚合函数 group by , having, inner join , limit


聚合函数

原列表,以此列表为基础,实现各种函数功能(因图片太大,作者只截取了部分)
Mysql(二) 聚合函数 group by , having, inner join , limit_第1张图片

1.求平均数

select AVG(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limit_第2张图片

2.求最大值

SELECT max(sal)FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limit_第3张图片

3.求最小数

SELECT min(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limit_第4张图片

4.求sal数量总数

SELECT count(sal) FROM emp;

Mysql(二) 聚合函数 group by , having, inner join , limit_第5张图片

分组函数不能单独用在where条件中,但能通过与select联合与where使用

分组查询

GROUP BY 
GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用
group by 有一个原则,就是 select 后面的所有列中 ,没有使用聚合函数的列,必须出现在 group by 后面(重要)
这是一个数据库表
Mysql(二) 聚合函数 group by , having, inner join , limit_第6张图片
通过deptno求出每种数据各有多少种
输入下列语句:
此处为错误语句,原因上文已说
select deptno,sal from emp group by deptno;
你以为结果是这样的:
Mysql(二) 聚合函数 group by , having, inner join , limit_第7张图片
当然这只是一厢情愿
实际是这样的:
Mysql(二) 聚合函数 group by , having, inner join , limit_第8张图片
若要得到如下结果,这就需要聚合函数的参与
使用下列sql语句即可得到如下结果:
select deptno,count(sal) from emp group by deptno;
Mysql(二) 聚合函数 group by , having, inner join , limit_第9张图片

查询过滤

having

where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行

having 子句的作用是筛选满足条件的组,即在分组之后过滤数据条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。

having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。

例如:

  通过sql语句查询并过滤求出一个平均数大于1600小于2400的值:(两种方法)

select deptno d, ROUND(avg(sal),2)a from emp  GROUP BY deptno HAVING a>1600 and a<2400;
select deptno d, ROUND(avg(sal),2) a from emp  GROUP BY deptno HAVING  a between 1600 and 2400;

平均数图

Mysql(二) 聚合函数 group by , having, inner join , limit_第10张图片

结果

Mysql(二) 聚合函数 group by , having, inner join , limit_第11张图片

链表

链表就是将两个不同的表,但拥有相同列名通过用inner join   onlian
拼接在一个表中(此处显示表是虚表,不是真实存在数据库中,只是临时存在)
99版语法
SELECT *(一般不写星,直接写具体查询表的列名)from emp(表) e(别名)inner jion dept d on e.deptno=deptno;
具体
SELECT e.job,d.loc from emp  e inner JOIN dept  d on  e.deptno=d.deptno;
92版语法:
SELECT e.*,d.*FROM emp e,dept d where e.deptno=d.deptno;
SELECT e.empno,d.loc FROM emp e,dept d where e.deptno=d.deptno;
left join、right join、inner join的区别
附地址:http://blog.csdn.net/xiaoxiong_web/article/details/71107401
链表例子:
select  d.dname 部门名称,xin.job 工作,xin.ename 员工名,xin.he 工资合, xin.bb 部门编号 from(SEL ECT job,ename,SUM(sal) he,deptno bb from emp GROUP BY deptno ) xin  INNER JOIN dept d on dept no
显示结果
Mysql(二) 聚合函数 group by , having, inner join , limit_第12张图片
SELECT xin.ss,d.dname from(SELECT deptno,sum(sal) ss from emp e GROUP BY deptno)xin INNER JOIN dept  d on xin.deptno=d.deptno;
效果图
Mysql(二) 聚合函数 group by , having, inner join , limit_第13张图片

limit函数(分页):

在数据库中经常要取表中记录中间的记录,在sql语句中使用limit


select * from a limit 4,20 

理解:从表中的第五行数据开始取数据,一共取出20条

这个用法可以实现sql语句分页,只需要传进页数和每条页数两个参数即可以实现分页select sal ,ename from emp ORDER BY sal

注:limit是从0开始计算,小技巧:若要跳到第4页数值则计算规则为
(4-1)*20 从第四页开始显示
代码:

select * from a limit 60,20
例:
Mysql(二) 聚合函数 group by , having, inner join , limit_第14张图片
每三行为一页,显示第三页,代码如下:
select sal ,ename from emp ORDER BY sal limit 6,3;
Mysql(二) 聚合函数 group by , having, inner join , limit_第15张图片
 
    

 
    

 
    

ps:

此文为作者随笔,书写并不规范。


你可能感兴趣的:(mysql)