MYSQL学习笔记

来源:互联网 发布:Mac任务管理器 编辑:程序博客网 时间:2024/05/29 15:45

子查询:

思路是将查询的范围一步一步地缩小,通过多张表之间的关联字段去确定范围,

类似于:

select * from table1 where value=any(select value from table2 where value2=any(select ...........))
注意:报错:[Err] 1242 - Subquery returns more than 1 row 
解决方法:在=号后面加any

但是,当遇到多张表关联,有的时候并不一定都用子查询,而是用到连接查询,要将多张表中的数据匹配到一起进行比较和筛选。

例如:查询出工资比其所在部门平均工资高的所有职工信息。

select * from work x inner join (select did,avg(salary) s from work group by did) as y on x.did=y.did where salary>s
注意,这里如果通过子查询,是查不到对应每个部门高于平均工资的职工,所以将各个部门的平均工资匹配到对应的每个职工记录中,再利用where查询各个部门出高于平均工资的职工。


嵌套函数:

错误写法:select max(count(score));

正确写法:select max(count) from (select count(score)as count from table)as x;



分组查询:

group by语句:group by一般和聚合函数一块使用。

      where 和group by 连用时,group by 必须写在where之后,

      group by之后加having。

注意:having、where、聚合函数、group by所有的操作都是针对from 后面的表里的数据,

0 0