版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
目標(biāo)了解復(fù)雜查詢的概念理解高級查詢的概念以及對其各個復(fù)雜、查詢的應(yīng)用掌握SQL語句在Oracle數(shù)據(jù)庫的高級應(yīng)用:分組查詢、連接查詢、子查詢、合并查詢等分組查詢當(dāng)執(zhí)行數(shù)據(jù)統(tǒng)計時,需要將表中的數(shù)據(jù)劃分成幾個組,最終統(tǒng)計每個組的數(shù)據(jù)結(jié)果數(shù)據(jù)分組統(tǒng)計是通過GROUPBY子句、分組函數(shù)以及HAVING子句共同實現(xiàn)分組查詢分組函數(shù):作用于多行,并返回單一的值分組函數(shù)一般要與GROUPBY結(jié)合使用。如果沒有GROUPBY子句會匯總所有的行,并產(chǎn)生一個結(jié)果selectavg(sal)as平均工資fromemp;雇員表中所有員工的平均工資selectcount(*)fromempwheresal>=2000;工資大于等于2000的員工人數(shù)分組查詢GROUPBY:對查詢結(jié)果進(jìn)行分組統(tǒng)計selectdeptno,avg(sal),max(sal)fromempgroupbydeptno;使用GROUPBY進(jìn)行單列分組顯示每個部門平均工資和最高工資
selectdeptno,job,avg(sal),max(sal)fromempgroupbydeptno,job;使用GROUPBY進(jìn)行多列分組顯示每個部門每種崗位的平均工資和最高工資
注意:SELECT選擇列表中的列必須出現(xiàn)在groupby子句中分組查詢HAVING:限制分組統(tǒng)計結(jié)果HAVING子句必須跟在GROUPBY之后selectdeptno,avg(sal),max(sal)fromempgroupbydeptnohavingavg(sal)<2500;顯示平均工資低于2500的部門號、平均工資及最高工資
連接查詢相等連接:檢索主從表之間的相關(guān)數(shù)據(jù)selecte.ename,e.sal,d.dnamefromempe,deptdwheree.deptno=d.deptno;顯示所有雇員的姓名、和工資及其所在的部門名稱
enamesal……deptnodeptnodname……selecte.ename,e.sal,d.dnamefromempe,deptdwheree.deptno=d.deptnoandd.deptno=10;使用AND指定其它條件連接查詢不等連接:在連接條件中使用除相等比較符外的其它比較操作符的連接查詢selecte.ename,e.sal,d.dnamefromempe,deptdwheree.deptnobetween10and20;查詢部門號在10和20之間的部門名稱、雇員名稱、雇員薪水
連接查詢自連接:在同一張表之間的連接查詢。用在自參照表上顯示上下級關(guān)系或者層次關(guān)系
selecta.enamefromempa,empbwherea.empno=b.mgrandb.ename=‘BLAKE’;顯示雇員“BLAKE”的上級經(jīng)理的名字EMPNOENAMEMGR……7839KING7566JONES78397698BLAKE78397782CLARK7839……連接查詢內(nèi)連接和外連接內(nèi)連接用于返回滿足條件的記錄外連接不僅返回滿連接足條件的所有記錄,而且還返回不滿足條件的記錄SELECTtable1.column,table2.columnFROMtable1[INNER|LEFT|RIGHT|FULL]JOINtable2ONtable1.column=table2.column;INNERJOIN表示內(nèi)連接LEFTJOIN表示左聯(lián)接RIGHTJOIN表示右連接FULLJOIN表示完全連接ON后跟連接條件連接的語法:連接查詢內(nèi)連接
(INNERJOIN)selecte.ename,d.dnamefromempeinnerjoindeptdone.deptno=d.deptnoande.deptno=20;查詢部門編號為“20”的所有雇員姓名及雇員所在部門的名稱selecte.ename,d.dnamefromempe,deptdwheree.deptno=d.deptnoande.deptno=20;另一種寫法(相等連接)連接查詢左外連接
(LEFT[OUTER]JOIN)selectd.dname,e.enamefromdeptdleftjoinempeond.deptno=e.deptnoandd.deptno=20;顯示所有部門的名稱,及部門編號為20的所有雇員名字連接查詢右外連接
(RIGHT[OUTER]JOIN)selectd.dname,e.enamefromdeptdrightjoinempeond.deptno=e.deptnoande.deptno=20;顯示所有雇員名字,及部門編號為20的雇員所在的部門的名稱連接查詢完全外連接(FULL[OUTER]JOIN)
selectd.dname,e.enamefromdeptdfulljoinempeond.deptno=e.deptnoande.deptno=20;顯示部門編號為20的所有雇員名字及對應(yīng)的部門名稱,同時列出其他的雇員名字和部門名稱子查詢子查詢:嵌入在其它SQL語句中的SELECT語句,也叫做嵌套查詢
子查詢又被分為單行子查詢多行子查詢多列子查詢子查詢單行子查詢:內(nèi)層子查詢只返回單行數(shù)據(jù)外層查詢的WHERE子句中可以使用單行比較運算符(<>、=、>=、<=、>、<)selectename,deptnofromempwheredeptno=(selectdeptnofromempwhereename=‘BLAKE’);顯示“BLAKE”所在部門的所有雇員名字及部門編號子查詢多行子查詢:內(nèi)層子查詢返回多行數(shù)據(jù)外層查詢的WHERE子句中必須使用多行比較符(IN、ALL、ANY)selectename,deptnofromempwheredeptnoin(selectdeptnofromempwhereename=‘BLAKE’);使用IN顯示“BLAKE”所在部門的所有雇員名字及部門編號子查詢selectename,deptnofromempwheresal>all(selectsalfromempwheredeptno=20);使用ALL顯示比部門編號為20的所有雇員的工資都高的雇員信息selectename,deptnofromempwheresal>any(selectsalfromempwheredeptno=10);使用ANY顯示比部門編號為10的任一雇員的工資高的雇員信息子查詢多列子查詢:內(nèi)層子查詢返回多列數(shù)據(jù)selectename,job,sal,deptnofromempwhere(deptno,job)=(selectdeptno,jobfromempwhereename=‘SMITH’);顯示與“SMITH”同一部門,同一職務(wù)的雇員信息子查詢其它常用的子查詢selectename,job,sal,deptnofromempwhereexists(select*fromdeptwheredept.deptno=emp.deptnoandloc=‘NEWYORK’);相關(guān)子查詢:內(nèi)部子查詢需要引用外部主查詢列表顯示工作在‘NEWYORK‘的所有雇員信息相關(guān)子查詢常用EXISTS謂詞來實現(xiàn)如果子查詢存在返回結(jié)果,則條件為TRUE,否則為FALSE子查詢insertintoemployee(id,name)selectempno,enamefromemp;INSERT語句中使用子查詢updateempsetsal=(selectsalfromempwhereename=‘SMITH’);UPDATE語句中使用子查詢deletefromempwheresal=(selectsalfromempwhereename=‘SMITH’);DELETE語句中使用子查詢合并查詢合并查詢:將兩個或多個分結(jié)果集進(jìn)行集合操作得到新的結(jié)果集可采用的集合操作符有:UNION(并集,結(jié)果總集刪除重復(fù)記錄)UNIIONALL(并集,結(jié)果不刪除重復(fù)記錄)INTERSECT(交集)MINUS(差集)合并查詢UNION:獲取兩個結(jié)果集的并集,自動過濾掉重復(fù)數(shù)據(jù)行,按輸出結(jié)果的第一列排序
selectename,job,salfromempwheresal>=2000unionselectename,job,salfromempwherejob=‘MANAGER’;查詢工資在2000以上,或者職務(wù)是“MANAGER”的員工的名字,職務(wù)和工資UNIONALL:與UNIN的區(qū)別是它不會過濾掉重復(fù)數(shù)據(jù)行合并查詢INTERSECT:獲取兩個結(jié)果集的交集,即顯示同時存在于兩個結(jié)果集中的數(shù)據(jù)。selectename,job,salfromempwheresal>=2000intersectselectename,job,salfromempwherejob=‘MANAGER’;查詢工資在2000以上,并且職務(wù)是“MANAGER”的員工的名字,職務(wù)和工資合并查詢MINUS:獲取兩個結(jié)果集的差集。即顯示在第一個結(jié)果集中存在,第二個結(jié)果集中不存在的數(shù)據(jù)集。selectename,job,salfromempwheresal>=2000minusselectename,job,salfromempwherejob=‘MANAGER’;查詢工資在2000以上,但職務(wù)不是“MANAGER”的員工的名字,職務(wù)和工資其它復(fù)雜的查詢使用CASE表達(dá)式selectename,sal,casewhensal>3000then3whensal>200then2 else1endgradefromemp;對雇員表雇員工資進(jìn)行查詢分級對于工資在3000以上的定為最高級(第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 辦公樓茶水間防滑合同(企業(yè)福利2025)
- XB企業(yè)應(yīng)收賬款管理存在的問題與對策
- 建筑防水概述
- 2025年物業(yè)設(shè)備設(shè)施試卷及答案
- 2025年德陽統(tǒng)考英語真題及答案
- 2025年大慶初中考試題目及答案
- 外墻保溫補(bǔ)修合同范本
- 內(nèi)江中考政治試卷及答案
- 陜西省榆林市七校聯(lián)考2024-2025學(xué)年高二上學(xué)期11月期中考試化學(xué)試題+答案
- 中鐵入職合同范本
- 谷物烘干機(jī)結(jié)構(gòu)設(shè)計
- 鋼軌探傷工勞動安全培訓(xùn)課件
- 新疆交通投資責(zé)任有限公司 筆試內(nèi)容
- 檢修安全培訓(xùn)內(nèi)容課件
- 公路養(yǎng)護(hù)培訓(xùn)課件
- 2025年6月浙江省高考化學(xué)試卷真題(含答案及解析)
- 天車安全培訓(xùn)教學(xué)課件
- 2025年丹梔逍遙丸行業(yè)研究報告及未來行業(yè)發(fā)展趨勢預(yù)測
- 醫(yī)院清潔消毒培訓(xùn)
- 安全事故三要素培訓(xùn)總結(jié)課件
- 儲能項目并網(wǎng)消防專篇
評論
0/150
提交評論