目录
1.分组函数
- 类似于java的方法,将一组逻辑语句封装在方法体中,对外暴露方法名
- 隐藏实现细节,提高代码重用性
- 作用于一组数据,并对一组数据返回一个值
1.1 组函数类型
AVG 、COUNT、MAX、MIN、SUM
select AVG (salary),COUNT(salary),MAX(salary),MIN(salary),SUM(salary),
from employees where job_id like ‘%REP%’;
1.2 分组数据
group by 将数据分成若干组
- 查询列表比较特殊,要求是分组函数和group by后出现的字段
- 包含在group by 子句中的列不必包含在select列表中
- select AVG(salary) from employees group by department_id;
- 各部门平均薪水:select department_id,AVG(salary) from employees group by department_id;
- 查询每个领导手下的员工平均工资
非法使用组函数
- 不能在where子句中使用组函数
- 可以在having子句中使用组函数
1.3 过滤分组having
- 使用having过滤分组
- 行已经被分组
- 使用了组函数
- 满足having子句中条件的分组将被显示
- select department_id,MAX(salary) from employees group by department_id having Max(salary)>10000;
2.多表查询
2.1 多表连接
- 笛卡尔集
省略连接条件
连接条件无效
所有表中的所有行互相连接 - 为避免笛卡尔集,可以在where加入有效的连接条件
2.1.1 Mysql连接,等值连接
注意:
使用连接在多个表中查询数据
在where子句中写入连接条件
在表中有相同列时,在列名之前加上表名前缀
- 区分重复的列名
使用表名前缀在多个表中区分相同的列
在不同表中具有相同列名的列可以用表的别名加以区分 - 连接n 个表,至少需要n-1个连接条件
select last_name,departments.department_id,city from employees,departments,locations
where departments.location_id = locations.location_id and
employees.department_id = departments.department_id;
2.2 使用on子句创建连接
1.自然连接中是以具有相同名字的列为连接条件的
2.可以使用on子句指定额外的连接条件
3.这个连接条件是与其它条件分开的
3.on子句使语句具有更高的易读性
2.2.1 Join连接
内连接:[inner]join on
外连接:
左外连接 left [outer] join on
右外连接 right [outer] join on
- 举例