子查询(嵌套查询): 查多次, 多个select
注意: 第一次的查询结果可以作为第二次的查询的 条件 或者 表名 使用.
子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字. 还可以包含比较运算符:= 、 !=、> 、
1.作为表名使用
select * from (select * from person) as 表名;
ps:大家需要注意的是: 一条语句中可以有多个这样的子查询,在执行时,最里层括号(sql语句) 具有优先执行权.
注意: as 后面的表名称不能加引号('')
2.求最大工资那个人的姓名和薪水
#求最大工资
SELECT MAX(salary) FROM person;
结果为:
#合并
select name,salary from person where salary=(select max(salary) from person);
结果为:
3. 求工资高于所有人员平均工资的人员
#求平均工资
select avg(salary) from person;
结果为:
#合并
SELECT name,salary FROM person where salary>(SELECT AVG(salary) FROM person);
结果为:
4.练习
1.查询平均年龄在20岁以上的部门名
#先查出符合的did
SELECT did from person GROUP BY did HAVING AVG(person.age) > 20
结果为:
#组合
SELECT * from dept where dept.did in (
select dept_id from person GROUP BY dept_id HAVING avg(person.age) > 20
);
结果为:
2.查询教学部 下的员工信息
SELECT * FROM person where did = (SELECT did FROM dept where dname='教学部')
结果为:
3.查询大于所有人平均工资的人员的姓名与年龄
SELECT * FROM person where salary >(SELECT AVG(salary) from person)
结果为: