Oracle(五)--)高級子查詢(二)
一、相關子查詢 相關子查詢按照一行接一行的順序執行,主查詢的每一行都執行一次子查詢。
例:若 employees 表中 employee_id 與 job_history 表中 employee_id 相同的數目不小於 2 ,輸出這些相同 id 的員工的 employee_id , last_name 和其 job_id。 讓表 employees 進入子查詢,通過 employee_id 與 job_history 建立聯系。 sql 語句與查詢結果如下
二、EXISTS 關鍵字 ·EXISTS 操作符檢查在子查詢中是否存在滿足條件的行 ·如果在子查詢中存在滿足條件的行: -- 不在子查詢中繼續查找 -- 條件返回 TRUE ·如果在子查詢中不存在滿足條件的行: -- 條件返回 FALSE -- 繼續在子查詢中查找 例:
查詢結果如下:
三、相關XX
1、相關更新 -- 使用相關子查詢依據一個表中的數據更新另一個表的數據 1)建立一個新表
2)插入一列新的記錄
3)為新列插入數據,數據必須一一對應
-- 此操作使得不同表的信息可以集中到一個表
2、相關刪除 -- 使用相關子查詢依據一個表中的數據刪除另一個表的數據 例:刪除表 employees ,與 emp_history 表都有的數據 1)創建表 emp022 ,將 employees 表中 department_id 為 80,90 的數據添加進去
2)創建表 emp033 ,將 employees 表中 department_id 為 90 的添加進去
3)將 emp022 表中與 emp033 表數據重復的部分進行刪除
四、WITH 子句 1)使用 WITH 子句,可以避免在 SELECT 語句中重復書寫相同的語句塊; 2)WITH 子句將該子句中的語句塊執行一次並存儲到用戶的臨時表空間中; 3)使用 WITH 子句可以提高查詢效率。
例:查詢公司中工資比 Fay 高的員工的信息 不使用 with 子句:
使用 with 子句:
此例並不明顯,但當數據量較大且查詢相同部分時,使用 WITH 子句會大大提高查詢效率。
例2:查詢公司中各部門的總工資大於公司中各部門的平均總工資的部門信息
如果采取以前的查詢方式,將會有很多的嵌套查詢,使用 WITH 子句將大大簡化查詢,提高效率。