- 分组函数
– sum 求和
– avg 平均值
– max 最大值
– min 最小值
– count 计算个数
- 分组查询
– 语法: select 分组函数 ,列(要求出现在group by 的后面)
from 表
【where 筛选条件】
group by 分组的列表
【having】
【order by 子句】
– 注意:查询列表必须特殊,要求是分组函数和grounp by后出现的字段(分组条件)
– 特点:
1.分组查询中的筛选条件分为两类
-------------------------------- 数据源 ---------------- 位置 ---------------------- 关键字
分组前筛选 原始表 group by子句的前面 where
分组后筛选 分组后的结果集 group by子句的后面 having
2.分组函数做条件肯定是放在having子句中
3.能用分组前筛选的,就优先考虑使用分组前筛选
–案例1 查询每个部门的最高工资
– 案例2 查询哪个部门的员工个数大于2
分析:1:查询每个部门的员工个数
2:根据1的结果再进行筛选,查询哪个部门的员工个数大于2
– 案例3 查询每个工种有奖金的员工的最高工资>12000的工种编号和最高工资
分析:1查询每个工种有奖金的员工的最高工资
2.根据1结果继续筛选,最高工资>12000
–案例4 按多个字段分组
查询每个部门每个工种的员工的平均工资
- 连接查询
– 含义:又称多表查询,当查询的字段来自于多个表,就会用到连接查询·
– 笛卡儿积乘积现象:表1 有m行 ,表2有n行,结果为m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
– 分类
1.按年代分类
*sql192标准:仅仅支持内连接
*sql199标准【推荐】:在mysql中支持内连接+ 外连接(左外和右外)+交叉连接
2.按功能分类:
*内连接
等值连接
非等值连接
自连接
*外连接
左外连接
右外连接
全外连接
*交叉连接
– sql192标准
1.等值连接
特点:1.多表等值连接的结果为多个表的交集部分
2.n表连接,至少需要n-1个连接条件
3.多表的顺序没有要求
4.一般需要为表起别名
5.可以搭配起前面介绍的所以子句使用,比如排序,分组等
案例1:
表1
表2
查询女神和对应的男神名
为表起别名
1.当表名特别长时,就可以起别名,提高语句的简洁度
2.区分多个重名字段
注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
2.非等值连接
表1
表2
表3
案例1:
查询员工的工资和工资级别
查询员工的工资和工资级别并进行升序排序
3.自连接(类似于等值连接,但是不是多表,而是单表,自己连接自己,比较特殊)
案例1:
表1
查询 员工名和上级的名称