赞
踩
一个查询语句嵌套在另一个查询语句内部的查询。在实际应用中,有时候一个查询语句的条件需要另一个查询语句来获取。
1.子查询必须放在小括号中
2.子查询一般放在比较操作符的右边,以提高代码的可读性。
3.子查询可以出现在几乎所有的SELECT子句中。(如:SELECT、FROM、WHERE、ORDER BY、HAVING子句)
根据子查询返回的数据分类
根据子查询和主查询之间是否有条件关联分类
技巧:先将子查询单独写出来,再放进主查询中。
举例:查询出工资比LILY低的全部员工信息
SELECT *
FROM emp
WHERE sal<(SELECT sal FROM emp WHERE eanme='LILY');
括号里的就是子查询,返回了一个单行单列的数据,用于与sal进行比较。
举例:查询与LILY从事同一工作且工资相同的员工信息
SELECT *
FROM emp
WHERE (job,sal)=(SELECT job,sal FROM emp WHERE ename='SCOTT');
这里子查询返回了两个字段job和sal,一条数据,同样也是用于where子句进行比较。
结合操作符来讲
SELECT *
FROM emp
WHERE sal IN(SELECT MIN(sal) FROM emp GROUP BY deptno);
例子中,MIN函数会在每个分组中取最低值,多个分组就形成了多行且一个字段(单列)。IN则表示只要sal符合其中一个就成立。
SELECT *
FROM emp
WHERE sal >ANY(
SELECT MIN(sal) FROM emp WHERE job='MANAGER' GROUP BY deptno);
这里ANY则取任意一个子查询中的到的列表。sal大于这个ANY(…)则表示只要大于其中一个值就成立,也等价于大于列表中最小的值。
子查询返回的是多行多列的数据,就是一个表格。
举例:查询与10号部门任何一个员工入职日期和领导相同的员工信息。
这里任何一个就提示了多列,入职日期和领导两个字段多行,形成了一个表格的结构。
select *
from emp
where (YEAR(hiredate),mgr)IN(select YEAR(hiredate),mgr from emp where deptno=10);
表子查询形式多样,有简单的也有较难的,建议多找些题进行练习。包括在from子句中,select子句,HAVING子句中的使用等等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。