ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
![](https://img.kancloud.cn/90/49/9049b1f45b8cafc74c121d3af121714f_625x205.png) ### 10.1、在where语句中使用子查询,也就是在where语句中加入select语句 ## 1,出现在where后面作为一个或多个数据 >[danger]注意:这个子查询只能返回一列n行的数据,如果返回的是一列一行数据那么可以使用简单条件例如= < <= >= !=,如果返回的是一列多行数据那么只能使用in 或者 not in ## 2,出现在from后面作为一个临时表 >[danger]注意: 1,这个子查询可以返回n行n列数据 2,这个子查询的显示列作为临时表的字段名使用 3,如果子查询中使用了函数那么必须为这个显示列起别名 ## 3,出现在select后面作为显示列的一部分 >[danger]注意: 1,这个子查询需要返回一行一列数据 2,每条记录都会执行一次子查询因此效率非常低下不推荐使用 >[danger]注意: 1,无论子查询出现在什么位置上,子查询必须要放在()里面 l 查询员工信息,查询哪些人是管理者,要求显示出其员工编号和员工姓名 实现思路: l 1、首先取得管理者的编号,去除重复的 ``` select distinct mgr from emp where mgr is not null; distinct 去除重复行 ``` l 2、查询员工编号包含管理者编号的 ``` select empno, ename from emp where empno in(select mgr from emp where mgr is not null); ``` ![](https://img.kancloud.cn/14/57/14573832d89449566a00370b879a822a_648x222.png) l 查询哪些人的薪水高于员工的平均薪水,需要显示员工编号,员工姓名,薪水 实现思路 1、 取得平均薪水 ``` select avg(sal) from emp; ``` 1、 取得大于平均薪水的员工 ``` select empno, ename, sal from emp where sal > (select avg(sal) from emp); ``` ![](https://img.kancloud.cn/90/49/9049b1f45b8cafc74c121d3af121714f_625x205.png)