分类:
多表关联或者表内字段关联时,或做相似功能判断时,往往会使用子查询来解决相应问题
1. 无关子查询:
内查询没有用到外查询的列,而且内查询可以单独运行.
2. 相关子查询:
内查询使用了外查询的列,而且内查询不能单独运行.
子查询的特点
-
子查询很灵活,可以解决很多其他查询方式不能解决的问题
-
子查询效率很低,其中相关子查询效率最低
-
子查询嵌套的层数越多,则效率越低
为什么相关子查询的效率极其低下?
内查询用到了外查询的列,每次查询行记录时都会迭代表格中
每一行的行记录,而这种迭代中产生的值都是动态生成的.
结论:
性能排序/优先使用
关联/分组查询>无关子查询>相关子查询
找出各个部门中大于他所在部门平均工资的员工名和工资
mysql>select e.first_name,e.salary from s_emp e
where e.salary>(select avg(e1.salary) from s_emp e1 where e1.dept_id = e.dept_id);
e.id = dept_id