什么是子查詢
1.一個(gè)select語句中包含另外一個(gè)完整的select語句
2.或者說兩個(gè)以上select,那么就是子查詢語句了
子查詢出現(xiàn)的位置
1.where后,把select查詢出的結(jié)果當(dāng)做另外一個(gè)select的條件值
2.from后,把查詢出的結(jié)果當(dāng)作一個(gè)新表
使用
查詢與項(xiàng)羽同一個(gè)部門人員工
先查出項(xiàng)羽所在的部門編號(hào)
SELECTdeptnoFROMempWHEREename ='項(xiàng)羽';
再根據(jù)編號(hào)查詢同一部門的員工
SELECTenameFROMempWHEREdeptno =20;
把第1條查出來的結(jié)果當(dāng)?shù)?條語句的條件
SELECTename,deptnoFROMemp
WHEREdeptno = (SELECTdeptnoFROMempWHEREename ='項(xiàng)羽')
查詢30號(hào)以內(nèi)大于2000的薪水的人(放在from,是把這個(gè)語句當(dāng)成一個(gè)表)
SELECTename,salary,deptnoFROMemp
WHEREdeptno =30;
SELECTenameFROM(SELECTename,salary,deptnoFROMempWHEREdeptno=30)ASs
WHEREs.salary >2000;
;
查詢工資高于程咬金的員工
SELECTsalaryFROMempWHEREename ='程咬金';
SELECTename,salaryFROMemp
WHEREsalary > (SELECTsalaryFROMempWHEREename ='程咬金')
工資高于30號(hào)部門所有人的員工信息
先查出30號(hào)部門工資最高的那個(gè)人
SELECTMAX(salary)FROMempWHEREdeptno=30;
再到整個(gè)表中查詢大于30號(hào)部門工資最高的那個(gè)人
SELECTename,salaryFROMemp
WHEREsalary > (SELECTMAX(salary)FROMempWHEREdeptno=30);
查詢工作和工資與妲己已完全相同的員工信息
SELECTjob,salaryFROMempWHEREename='妲己';
SELECT*FROMemp
WHERE(job,salary)in(SELECTjob,salaryFROMempWHEREename='妲己');
SELECT*
FROMemp e,(SELECTjob,salaryFROMempWHEREename='妲己')ASr
WHEREe.job = r.jobANDe.salary = r.salary;
有2個(gè)以上直接下屬的員工信息
SELECTmgr,GROUP_CONCAT(mgr),COUNT(mgr)FROMemp
GROUPBYmgrHAVINGCOUNT(mgr) >=2;
SELECT*FROMempWHERE
empnoin(SELECTmgr,GROUP_CONCAT(mgr),COUNT(mgr)FROMemp
GROUPBYmgrHAVINGCOUNT(mgr) >=2);
查詢員工編號(hào)為7788的員工名稱、員工工資、部門名稱、部門地址
SELECTe.ename,e.salary,d.dname,d.local
FROMemp e,dept d
WHEREe.deptno = d.deptnoANDe.empno =7788;