第6章 OracleDML高級查詢_第1頁
第6章 OracleDML高級查詢_第2頁
第6章 OracleDML高級查詢_第3頁
第6章 OracleDML高級查詢_第4頁
第6章 OracleDML高級查詢_第5頁
已閱讀5頁,還剩55頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java程序員Oracle就業(yè)課程Lesson6高級查詢主講:楊昊Q:952063095

掌握集合運算掌握子查詢掌握子查詢所可以處理的各類問題掌握多表銜接查詢運用自銜接讓一個表銜接它本身掌握子查詢處理程序中的各種業(yè)務邏輯目標I、集合運算集合運算符ABAAABBBUNION/UNIONALLINTERSECTMINUSEMPLOYEES:提供關于當前一切雇員的詳細信息JOB_HISTORY:當一個雇員轉換任務的時候,記錄前面任務開場和終了的日期,以及任務的標識號和部門本課中運用的表本課中運用的表:UNION運算符UNION運算符從兩個查詢中前往消除反復之后的結果ABUNION運算符的運用顯示當前和先前的一切雇員的的任務細節(jié)。每個雇員只顯示一次UNIONALL運算符ABUNIONALL前往兩個查詢的結果,其中包括反復的UNIONALL運算符的運用顯示當前和先前的一切雇員的部門INTERSECT運算符ABINTERSECT運算符的運用顯示在開場公司的任期之前,擁有任務資歷的雇員的IDs和任務IDsMINUS運算符ABMINUS運算符顯示那些一次都沒有轉換任務的雇員IDsII、子查詢運用子查詢處理問題誰的工資比Abel高?主查詢哪個雇員的工資比Abel高?Abel的工資是多少?子查詢?子查詢的語法子查詢〔內部查詢〕在主查詢之前執(zhí)行一次子查詢的結果被用于主查詢〔外部查詢〕運用子查詢單行子查詢只前往一行結果運用單行比較運算符執(zhí)行單行子查詢在子查詢中運用組函數(shù)在子查詢中運用HAVING子句Oracle首先執(zhí)行子查詢Oracle前往結果到主查詢的HAVING子句這個語句的錯誤是什么?這個語句將前往行嗎?運算符含義IN與列表中的任一成員相等ANY與子查詢返回的每一個值比較ALL與子查詢返回的所有值比較多行子查詢前往多行運用多行比較運算符在多行子查詢中運用ANY運算符在多行子查詢中運用ALL運算符子查詢中的空值相關子查詢子查詢參考父查詢表中的一列運用相關子查詢找到那些收入超越他們部門平均薪酬的一切雇員每次從外部查詢來的行被處置的時候,內部查詢就被求值運用相關子查詢顯示那些至少曾經改換了兩次任務的雇員EXISTS運算符檢測子查詢的結果集中行的存在假設一個子查詢的行值被找到:—內部查詢中的搜索將不會繼續(xù)—條件將會標志為TRUE假設一個子查詢的行值沒有被找到:—條件將會標志為FALSE—內部查詢中的搜索將會繼續(xù)運用EXISTS運算符運用EXISTS運算符找到那些至少有一個人向他們報告的雇員運用NOTEXISTS運算符找到沒有任何職員的部門III、多表銜接從多張表中獲取數(shù)據(jù)EMPLOYEESDEPARTMENTS笛卡爾銜接等值銜接非等值銜接外部銜接自銜接銜接類型產生一個笛卡銜接EMPLOYEES(20行)DEPARTMENTS(8行)笛卡爾積:20x8=160行笛卡爾積在以下情況下產生:—忽略了一個銜接條件—一個銜接條件失效—第一張表的一切行和第二張表的一切行銜接為了防止笛卡爾積的產生,通常包含一個有效銜接條件的WHERE子句。笛卡爾積運用Oracle語法銜接表運用一個銜接去查詢多張表的數(shù)據(jù)在WHERE子句中設定銜接條件當多張表的列重名時,以表名作為列名的前綴。等值銜接外鍵主鍵EMPLOYEESDEPARTMENTS運用等值銜接檢索記錄用表前綴在多張表中限定列名用表前綴提高系統(tǒng)性能用列別名區(qū)分不同表中同名的列限定運用二義性列名運用表別名用表別名簡化查詢用表名前綴提高性能兩張表以上的銜接EMPLOYEESDEPARTMENTSLOCATIONS銜接n張表至少需求n-1個銜接條件。例如:銜接3張表至少要2個銜接條件非等值銜接EMPLOYEESJOB_GRADESEMPLOYEES表中的工資應介于JOB_GRADES表的最低和最高工資之間用非等值銜接檢索記錄外部銜接在ID為190的部門中沒有任何雇員外部銜接語法利用一個外部銜接查詢那些無法滿足銜接條件的行外部銜接運算符是一個加號〔+〕wheree.dept_id(+)=d.id;+號在左邊,已右邊為準,左邊補齊+號在右邊,已左邊為準,右邊補齊外部銜接語法+號問題運用外部銜接自銜接EMPLOYEES(WORKER)EMPLOYEES(MANAGER)WORKER表中的MANAGER_ID等于MANAGER表中的EMPLOYEE_ID表的自銜接運用SQL99語法引見運用一個銜接查詢多張表的數(shù)據(jù)運用SQL99語法引見CrossjoinJoinOn()Leftouterjoinon()Rightouterjoin()Fullouterjoinon() CROSSJOIN產生了一個笛卡爾積〔Cartesianproduct〕,就象是在銜接兩個表格時忘記參與一個WHERE子句一樣

例: SELECTlast_name,dept_idFROMemp,dept;

例: SELECTename,locFROMempCROSSJOINdept;CROSSJOIN

ON子句被用于當在兩個表中的字段名不一致時來銜接表

例:

SELECTdepartment_name,city

FROMdepartment,location

WHEREdepartment.location_id=location.loc_id;

SELECTdepartment_name,city

FROMdepartmentdJOINlocationl

ON(d.location_id=l.id);ON子句 在LEFTOUTERJOIN中,會前往一切左邊表中的行,甚至在被銜接的表中沒有可對應的列名的情況下也如此。

例:

SELECTlast_name,dept_id

FROMempe,deptd

WHEREe.department_id=d.department_id(+);

SELECTlast_name,dept_id

FROMemp

LEFTOUTERJOINDeptONe.dept_id=d.dept_id;

LEFTOUTERJOIN 在RIGHTOUTERJOIN中前往的是表中一切右邊的行,甚至在被銜接的表中沒有對應的情況下也如此。例:

SELECTlast_name,d.dept_id

FROMemployeese,departmentsd

WHEREe.department_id(+)=d.department_id; SELECTlast_name,d.dept_id

FROMemployeese

RIGHTOUTERJOINdepartmentsd

ON(e.department_id=d.department_id);

RIGHTOUTERJOIN FULLOUTERJOIN=LEFTOUTJOIN+RIGHTOUTJOIN例:

SELECTlast_name,d.dept_id

FROMemployeese,departmentsd

WHEREe.department_id=d.department_id〔+〕 UNIONALL SELECTlast_name,d.dept_id

FROMemployeese,departmentsd

WHEREe.depar

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論