子查询

  • 查询支持嵌套使用
  • 查询各学生的语文、数学、英语的成绩

什么是子查询

当一个查询是另一个查询的条件时,这个查询称之为子查询(内层查询)

什么时候用?

当查询需求比较复杂,一次性查询无法得到结果,需要多次查询时,

例如:给出一个部门名称,需要获得该部门所有的员工信息

分析:

1.需要先确定部门的 id

2.然后才能通过 id 确定员工

解决问题的方式是把一个复杂的问题拆分为若干个简单的问题

如何使用?

首先明确子查询就是一个普通的查询,当一个查询需要作为子查询使用时,用括号包裹即可

需要注意

in 中的子查询只能包含一个列

例如:查询财务部有哪些人

正确的写法:select name from emp where dept_id in (select id from dept where name = “财务”);

错误的写法:select name from emp where dept_id in (select * from dept where name = “财务”);

关键字:exists

exists 后跟子查询,子查询有结果是为 True,没有结果时为 False。为 True 时外层执行,为 False 外层不执行

如何使用?

select from emp where exists (select from emp where salary > 1000);

前面 exists 后面 如果 后面 查询有结果时,前面 才会执行