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 BYGROUP 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;
查询过滤
havingwhere 子句的作用是在对查询结果进行分组前,将不符合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:
此文为作者随笔,书写并不规范。
相关文章推荐
- mysql---select的五种子句学习(where、group by、having、order by、limit)
- sql集锦_20081019_case,group by ,count()等聚合函数,HAVING COUNT(*)&amp;amp;amp;amp;amp;gt;1,inner join,left join
- mysql---select的五种子句学习(where、group by、having、order by、limit)
- [mysql] select的子句 where,group by, having, order by, limit的使用顺序及实例
- 【mysql】【查询的五种语法where、group by、having、order by、limit】
- Mysql 简单的命令语句续-*,as,group by,order by,group by,having,limit;
- mysql 聚合函数 (group by ,having)
- MySQL入门之扩展匹配符、order by、limit、union、group by、having子句
- MySQL中无GROUP BY直接HAVING的问题【转】
- Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成
- mysql中group by的时候字段不加聚合函数和distinct的情况
- MySQL分组排序取前N条记录以及生成自动数字序列--group by 后 limit 外加 rownumber
- mysql的group by、order by和having、where比较
- MySQL查询中的条件控制(where,group by,having,order by,limit,from,exists)
- mysql的limit、where、order by和group by的用法
- mysql中group by与having合用注意事项分享
- mysql中group by与having合用注意事项分享
- MySQL 里面的Where 和Having和Count 和distinct和Group By对比
- Oracle PLSQL之HAVING后面的条件可由聚合函数构成,也可由GROUP BY后的字段构成
- mysql sql limit where having order