分组函数不能直接出现在where后面,它需要查询一道才能有效即要紧跟在select后面
【对查询结果分组计算】
group by后的字段为一组,将一个字段相同的值分为一组
如统计表中各个工资段的总人数 select count(工资) from 表名 group by 工资
——————————————————————————————————————————————————————————————————————————————————————————————————————————
【【连表】】
连表
第一种方法inner join: 取别名 select * from emp as e inner join dept as d on e.deptno=d.deptno //*两个表都有的显示 left join right join左边有,右边没有
select e.emno,e.enma,e.sal,d.dname,d.loc from emp as e inner join dept as d on e.deptno=d.deptno
第二种方法: select e.*,d.* from emp e,dept d where e.deptno=d.deptno
外键 一对多
多对多
group by 与连表:例子 SELECT * FROM (SELECT deptno,sum(sal),count(empno) from emp GROUP BY deptno) as aa INNER JOIN dept as bb on aa.deptno=bb.deptno
select * from (group by形成的新表) as aa inner join 另一个表 as bb on aa.相同字段=bb.相同字段
核心思想:任何表都可以和其他表看成两个子表 连接组合形成新的表
Having : 对分组查询结果的过滤 and可以放在条件里面 有点儿像where
select deptno,avg(sal) avg_sal,count(empno),sum(sal) from emp group by deptno HAVING avg_sal>2000 and avg_sal<2500
between
limit 分页
例如取表中的第5条到第7条的三条数据
select * from 表名 limit 4,3
4表示从第四条开始取,不包含第四条,3表示取条数据
如果要取第一条数据到第5条就是
select * from 表名 limit 0,5