-- 查詢工資大于所在部門平均工資的員工編號、員工姓名、工資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)
新聞熱點
疑難解答