教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JAVA培訓之多表查詢練習1

更新時間:2016年10月19日18時06分 來源:傳智播客JAVA培訓學院 瀏覽次數(shù):

多表查詢練習一
通過對多表查詢的合并結(jié)果集、連接查詢以及子查詢的學習,下面我們來練習多表查詢,如下所示:
(1)查詢至少有一個員工的部門,并顯示部門編號、部門名稱、部門位置、部門人數(shù):
  • 分析:
  • 查詢結(jié)果集包含的列:deptno,dname,loc,部門人數(shù);
  • 查詢的表:dept,emp;
  • 查詢條件:dept.deptno=emp.deptno,部門中至少有一個員工,即部門人數(shù)大于或等于1;
  • 第一步:獲得每個部門的信息,對應sql語句是:select * from dept;
  • 第二步:獲取每個部門的人數(shù),利用分組查詢,對應的sql語句是:select deptno,count(*) from emp group by deptno;
  • 第三步:使用內(nèi)連接查詢以上兩步的結(jié)果集,獲取每個部門的編號,名稱,位置及部門人數(shù)。
  • 實現(xiàn):
通過分析可知,對應的sql語句是:
  • SELECT
FROM
dept d,(SELECT deptno,COUNT(*) FROM emp GROUP BY deptno) e
以上語句中,查詢的列不能寫成e.count(*),最好在子查詢中給count(*)起一個別名,如下所示:
  • SELECT
d.*,e.cnt
FROM
dept d,(SELECT deptno,COUNT(*) cnt FROM emp GROUP BY deptno) e
將以上sql語句執(zhí)行,如圖1-1所示:

圖1-1 多表查詢練習1
圖1-1中,查詢語句中雖然沒有指定部門人數(shù)至少為一人,但是仍然是將部門人數(shù)大于0人的部門查詢出來,原因是,內(nèi)連接只會查詢滿足條件的記錄,dept表中的40部門在emp表中不存在員工,因此不滿足d.deptno=e.deptno這個條件,所以該部門就被過濾掉。
(2)查詢所有員工的姓名及其直接上級的姓名:
  • 分析:
  • 查詢結(jié)果集包含的列:員工姓名,上級姓名;
  • 查詢的表:上級也屬于員工,因此要查詢的表是emp表,并且是兩個emp表,emp e1,emp e2;
  • 查詢條件:e1.mgr=e2.empno;
emp表中,有一個員工是沒有上級的,如果這里使用內(nèi)連接,那么該員工的記錄就會被過濾掉,因此這里使用左外連接。
  • 實現(xiàn):
通過分析可知,對應的sql語句是:
  • SELECT
e1.ename,e2.ename
FROM
emp e1 LEFT OUTER JOIN emp e2
ON

將以上sql語句執(zhí)行,如圖1-2所示:

圖1-2 多表查詢練習2
使用左外連接查詢,左表是e1,因此e1表中的所有員工姓名都被查詢出來,e2表中不滿足條件的位置用null代替。

本文版權歸傳智播客人工智能+Python學院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
作者:傳智播客人工智能+Python學院
0 分享到:
和我們在線交談!