oracle子查詢PPT課件_第1頁
oracle子查詢PPT課件_第2頁
oracle子查詢PPT課件_第3頁
oracle子查詢PPT課件_第4頁
oracle子查詢PPT課件_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、目標目標通過本章學習,您將可以: 描述子查詢可以解決的問題 定義子查詢。 列句子查詢的類型。 書寫單行子查詢和多行字查詢。第1頁/共26頁使用子查詢解決問題使用子查詢解決問題誰的工資比 Abel 高?誰的工資比誰的工資比 Abel 高高?Main Query:Abel的工資是多少的工資是多少?Subquery第2頁/共26頁子查詢語法子查詢語法 子查詢 (內查詢) 在主查詢之前一次執行完成。 子查詢的結果被主查詢使用 (外查詢)。SELECTselect_listFROMtableWHEREexpr operator (SELECTselect_list FROMtable);第3頁/共26頁

2、SELECT last_nameFROM employeesWHERE salary (SELECT salary FROM employees WHERE last_name = Abel);子查詢子查詢11000第4頁/共26頁注意事項注意事項 子查詢要包含在括號內。 將子查詢放在比較條件的右側。 除非進行Top-N 分析,否則不要在子查詢中使用ORDER BY 子句。 單行操作符對應單行子查詢,多行操作符對應多行子查詢。第5頁/共26頁子查詢類型子查詢類型Main querySubqueryreturnsST_CLERK 多行子查詢多行子查詢ST_CLERKSA_MANMain quer

3、ySubqueryreturns 單行子查詢單行子查詢第6頁/共26頁單行子查詢單行子查詢 只返回一行。 使用單行比較操作符。Operator= = =MeaningEqual toGreater than Greater than or equal to Less than Less than or equal toNot equal to第7頁/共26頁 SELECT last_name, job_id, salaryFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141)AND

4、salary (SELECT salary FROM employees WHERE employee_id = 143);執行單行子查詢執行單行子查詢ST_CLERK2600第8頁/共26頁SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);在子查詢中使用組函數在子查詢中使用組函數2500第9頁/共26頁子查詢中的子查詢中的 HAVING 子句子句 首先執行子查詢。 向主查詢中的HAVING 子句返回結果。SELECT department_id, M

5、IN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) (SELECT MIN(salary) FROM employees WHERE department_id = 50);2500第10頁/共26頁SELECT employee_id, last_nameFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id);非法使用子查詢非法使用子查詢ERROR at line 4:ORA-01427: sin

6、gle-row subquery returns more thanone rowSingle-row operator with multiple-row subquery第11頁/共26頁子查詢中的空值問題子查詢中的空值問題no rows selectedSELECT last_name, job_idFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE last_name = Haas);Subquery returns no values第12頁/共26頁多行子查詢多行子查詢 返回多行。 使用多行比較操作符。O

7、perator IN ANY ALLMeaningEqual to any member in the listCompare value to each value returned by the subquery Compare value to every value returned by the subquery 第13頁/共26頁在多行子查詢中使用在多行子查詢中使用 ANY 操作符操作符9000, 6000, 4200SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary ANY (SELECT

8、 salary FROM employees WHERE job_id = IT_PROG)AND job_id IT_PROG;第14頁/共26頁SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary ALL (SELECT salary FROM employees WHERE job_id = IT_PROG)AND job_id IT_PROG;在多行子查詢中使用在多行子查詢中使用 ALL 操作符操作符9000, 6000, 4200 第15頁/共26頁子查詢中的空值問題子查詢中的空值問題SELEC

9、T emp.last_nameFROM employees empWHERE emp.employee_id NOT IN FROM employees mgr);第16頁/共26頁SELECT a.last_name, a.salary, a.department_id, b.salavgFROM employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) bAND a.salary b.salavg;在在 FROM 子句中使用子查詢子句中使用子查詢第17頁/共26

10、頁EXISTS 操作符操作符 EXISTS 操作符檢查在子查詢中是否存在滿足條件的行 如果在子查詢中存在滿足條件的行: 不在子查詢中繼續查找 條件返回 TRUE 如果在子查詢中不存在滿足條件的行: 條件返回 FALSE 繼續在子查詢中查找第18頁/共26頁SELECT employee_id, last_name, job_id, department_idFROM employees outerWHERE EXISTS ( SELECT X FROM employees WHERE manager_id = outer.employee_id);EXISTS 操作符應用舉例操作符應用舉例第1

11、9頁/共26頁SELECT department_id, department_nameFROM departments dWHERE NOT EXISTS (SELECT X FROM employees WHERE department_id = d.department_id);NOT EXISTS 操作符應用舉例操作符應用舉例第20頁/共26頁相關更新相關更新使用相關子查詢依據一個表中的數據更新另一個表的數據UPDATE table1 alias1SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column

12、 = );第21頁/共26頁 DELETE FROM table1 alias1 WHERE column operator (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);相關刪除相關刪除使用相關子查詢依據一個表中的數據刪除另一個表的數據使用相關子查詢依據一個表中的數據刪除另一個表的數據第22頁/共26頁DELETE FROM employees EWHERE employee_id = (SELECT employee_id FROM emp_history WHERE employee_id = E.employee_id);相關刪除應用舉例相關刪除應用舉例第23頁/共26頁總結總結通過本章學習,您已經學會: 在什么時候遇到什么問題應該使用子查詢。

溫馨提示

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

評論

0/150

提交評論