-- 查询和 SCOTT 同一个职位的人 SELECT*FROM tmp_emp WHERE job = (SELECT job FROM tmp_emp WHERE ename ='SCOTT') AND ename <>'SCOTT';
(2)单行多列子查询
子查询返回单行多列的结果,通常用于多条件过滤。
示例:
1 2 3 4
-- 查询和 SCOTT 同一个职位和同一个领导的人 SELECT*FROM tmp_emp WHERE (job, mgr) = (SELECT job, mgr FROM tmp_emp WHERE ename ='SCOTT') AND ename <>'SCOTT';
(3)多行单列子查询
子查询返回多行单列的结果,通常用于 IN 或 NOT IN 条件。
示例:
1 2 3 4
-- 查询和 SCOTT、TURNER 同一个职位的人 SELECT*FROM tmp_emp WHERE job IN (SELECT job FROM tmp_emp WHERE ename IN ('SCOTT', 'TURNER')) AND ename NOTIN ('SCOTT', 'TURNER');
(4)多行多列子查询
子查询返回多行多列的结果,通常用于多条件过滤。
示例:
1 2 3 4
-- 查询和 SCOTT、TURNER 同一个职位和同一个领导的人 SELECT*FROM tmp_emp WHERE (job, mgr) IN (SELECT job, mgr FROM tmp_emp WHERE ename IN ('SCOTT', 'TURNER')) AND ename NOTIN ('SCOTT', 'TURNER');
3. 不等值子查询
不等值子查询用于比较子查询结果集中的值。
(1)ANY 子查询
> ANY:大于子查询结果集中的任意值(大于最小值)。
< ANY:小于子查询结果集中的任意值(小于最大值)。
示例:
1 2 3 4 5 6 7
-- 比任意部门最低工资还大的员工 SELECT*FROM tmp_emp WHERE sal >ANY (SELECTMIN(sal) FROM tmp_emp GROUPBY deptno);
-- 比任意部门最高工资还小的员工 SELECT*FROM tmp_emp WHERE sal <ANY (SELECTMAX(sal) FROM tmp_emp GROUPBY deptno);
(2)ALL 子查询
> ALL:大于子查询结果集中的所有值(大于最大值)。
< ALL:小于子查询结果集中的所有值(小于最小值)。
示例:
1 2 3
-- 比任意部门最低工资还小的员工 SELECT*FROM tmp_emp WHERE sal <ALL (SELECTMAX(sal) FROM tmp_emp GROUPBY deptno);
4. 关联子查询
关联子查询是指子查询依赖于父查询的结果,通常用于逐行匹配。
示例:
1 2 3
-- 查询每个部门的最低工资的人 SELECT*FROM tmp_emp t1 WHERE sal = (SELECTMIN(sal) FROM tmp_emp t2 WHERE t2.deptno = t1.deptno);