您的位置:首页 > 数据库 > MySQL

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

2017-06-29 13:25 316 查看


聚合函数

原列表,以此列表为基础,实现各种函数功能(因图片太大,作者只截取了部分)



1.求平均数

select AVG(sal) FROM emp;



2.求最大值

SELECT max(sal)FROM emp;



3.求最小数

SELECT min(sal) FROM emp;



4.求sal数量总数

SELECT count(sal) FROM emp;



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

分组查询

GROUP BY 

GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)
d710

这是一个数据库表:



通过deptno求出每种数据各有多少种
输入下列语句:

(此处为错误语句,原因上文已说)

select deptno,sal from emp group by deptno;

你以为结果是这样的:



当然这只是一厢情愿
实际是这样的:



若要得到如下结果,这就需要聚合函数的参与
使用下列sql语句即可得到如下结果:
select deptno,count(sal) from emp group by deptno;



查询过滤

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;

平均数图



结果



链表

链表就是将两个不同的表,但拥有相同列名通过用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
显示结果



例:
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;
效果图:







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


例:



每三行为一页,显示第三页,代码如下:
select sal ,ename from emp ORDER BY sal limit 6,3;






ps:

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息