-- 查询工资大于所在部门平均工资的员工编号、员工姓名、工资SELECT empno,ename,salFROM emp e,(SELECT deptno,AVG(sal) avgsal, FROM emp GROUP BY deptno) dWHERE e.deptno=d.deptnoAND e.sal>d.avgsal相关子查询
相关子查询指的是查询中再查询,通常是以一个查询作为条件来供另一个查询使用相关子查询的执行过程:父查询中的行每被处理一次,子查询就执行一次取得父查询的候选行用候选行被子查询引用列的值执行子查询用来自子查询的值确认或取消候选行重复步骤1、2、3,直到父查询中再无剩余的候选行相关子查询示例-- 查询工资大于所在部门平均工资的员工编号、员工姓名、工资、部门编号SELECT empno,ename,sal,deptnoFROM emp outerWHERE sal>(SELECT AVG(sal) FROM emp WHERE deptno=outer.deptno)-- 查询所有部门名称和人数SELECT dname,(SELECT COUNT(empno) FROM emp WHERE deptno=d.deptno)FROM dept dEXISTS和NOT EXISTS操作符
EXISTS判断是否“存在”EXISTS具体操作过程:子查询中如果有记录找到,子查询语句不会继续执行,返回值为TRUE子查询中如果到表的末尾页没有记录找到,返回值为FALSEEXISTS子查询并没有确切记录返回,只判断是否有记录存在,而且只要找到相关记录,子查询就不需要再执行,然后再进行下面的操作,极大的提高了语句的执行效率-- 查询哪些人是经理SELECT ename,job,sal,deptnoFROM emp eWHERE EXISTS (SELECT '1' FROM emp WHERE mgr=e.empno)“'1'”只是占位用,没有实际意义NOT EXISTS与EXISTS正好相反,判断子查询是否没有返回值:如果没有返回值,表达式为真,如果找到一条返回值,则为假NOT EXISTS操作符只会返回TRUE或FALSE,不会返回空值,所以不需要考虑子查询去除空值的问题-- 查询哪些人不是经理SELECT ename,job,sal,deptnoFROM emp eWHERE EXISTS (SELECT '1' FROM emp WHERE mgr=e.empno)
新闻热点
疑难解答