derezzed

导航

MySQL【基础】子语句查询

子查询(嵌套查询): 查多次, 多个select

注意: 第一次的查询结果可以作为第二次的查询的 条件 或者 表名 使用.

子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字. 还可以包含比较运算符:= 、 !=、> 、<等.

 1.作为表名使用

select * from (select * from person) as 表名;
 
ps:大家需要注意的是: 一条语句中可以有多个这样的子查询,在执行时,最里层括号(sql语句) 具有优先执行权.<br>注意: 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)

 结果为:

 

posted on 2018-02-28 16:36  derezzed  阅读(613)  评论(0)    收藏  举报