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

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

JAVA培訓(xùn)之多表查詢練習(xí)1

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

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

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

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

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

本文版權(quán)歸傳智播客人工智能+Python學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客人工智能+Python學(xué)院
0 分享到:
和我們?cè)诰€交談!