Oracle子查詢的用法

2021-09-02 13:37:52 字數 2443 閱讀 1851

在執行資料庫操作(包括查詢、新增、修改、刪除等操作)的過程中,如果某個操作需要依賴另乙個select語句的查詢結果,那麼就可以把select語句嵌入到該操作語句中,這樣就形成了乙個子查詢。實際上,在關係型資料庫中,各表之間的資料關係非常密切,它們相互關聯,相互依存,這樣就可以根據資料之間的關係使用相應的子查詢,從而實現複雜的查詢。

子查詢是在sql語句內的另外一條select語句,也被稱為內查詢或是內select語句。在select、insert、update或delete命令中允許是乙個表示式的地方都可以包含子查詢,子查詢甚至可以包含在另外乙個子查詢中。

例,在emp表中查詢部門名稱(dname)為「research」的員工資訊:

查詢也可以使用多表關聯查詢實現(多表關聯效率高於子查詢):

在執行子查詢操作的語句中,子查詢也稱為內查詢,包含子查詢的查詢語句也被稱為外查詢或主查詢。子查詢:select deptno from dept where dname=『research』;那麼外查詢語句就是:select empno,ename,job from emp

在一般情況下,外查詢語句檢索一行,子查詢語句需要檢索一遍資料,然後判斷外查詢語句的條件是否滿足。如果條件滿足,則外查詢語句將檢索到的資料行新增到結果集中,如果條件不滿足,外查詢語句繼續檢索下一行資料,所以子查詢相對多表關聯查詢要慢一些。

另外,在使用子查詢時,還應注意以下規則:子查詢必須使用括號「()」括起來;子查詢中不能包含order by子句。;子查詢允許巢狀多層,但不能超過255層。在oracle 11g中,通常把子查詢再細化為單行子查詢,多行子查詢和關聯子查詢3種。

單行子查詢是指返回一行資料的子查詢語句,當在where子句中引用單行子查詢時,可以使用單行比較運算子(=、>、=、<=和<>)。

例,在emp表中,查出既不是最高工資,也不是最低工資的員工的資訊:

在上面的語句中,如果內層子查詢語句的執行結果為空值,那麼外層的where子句就始終不會滿足條件,這樣該查詢的結果就必須為空值,因為空值無法參與比較運算。

在執行單行子查詢時,要注意查詢的返回結果必須是一行資料,否則oracle系統會提示無法執行。另外,子查詢也不能包含order by子句,如果非要對資料進行排序的話,那麼只能在外查詢語句中使用order by子句。

多行子查詢是指返回多行資料的子查詢語句。當在where子句中使用多行子查詢時,必須使用多行運算子(in、any、all)。

使用in運算子:當在多行子查詢中使用in運算子時,外查詢會嘗試與子查詢結果中的任何乙個結果進行匹配,只要有乙個匹配成功,則外查詢返回當前檢索的記錄。例,在emp表中,查詢不是銷售部門(sales)的員工資訊:

使用any運算子:any運算子必須與單行比較運算子結合使用,並且返回行只要匹配子查詢的任何乙個結果即可。例,在emp表中,查詢工資大於部門編號為10的任意乙個員工工資即可的其他部門的員工資訊:

使用all運算子:all運算子必須與單行運算子結合使用,並且返回行必須匹配所有子查詢結果。例,在emp表中,查詢工資大於部門編號為30的所有員工工資的員工資訊:

在單行子查詢和多行子查詢中,內查詢和外查詢是分開執行的,也就是說內查詢的執行與外查詢的執行是沒有關係的,外查詢僅僅是使用內查詢的最終結果。在一些特殊需求的子查詢中,內查詢的執行需要借助於外查詢,而外查詢的執行又離不開內查詢的執行,這時,內查詢和外查詢是相互關聯的,這種子查詢就被稱為關聯子查詢。

在emp表中,使用「關聯子查詢」檢索工資大於同職位的平均工資的員工資訊:

在上面的查詢語句中,內層查詢使用關聯子查詢計算每個職位的平均工資。而關聯子查詢必須知道職位的名稱,為此外層查詢就要使用f.job字段值為內層查詢提供職位名稱,以便於計算出某個職位的平均工資。如果外層查詢正在檢索的資料行的工資高於平均工資,則該行的員工資訊會顯示出來,否則不顯示。

注意,在執行關聯子查詢的過程中,必須遍歷資料表中的每條記錄,因此如果被遍歷的資料表中有大量資料記錄,則關聯子查詢的執行速度會比較慢。關聯子查詢不但可以作為select語句的子語句,也可以作為insert、update和delete語句的關聯子查詢。

ORACLE子查詢的多種用法

一 用於查詢 第乙個是最普通的子查詢,子查詢 內查詢 在主查詢之前一次執行完成。子查詢的結果被主查詢 外查詢 使用。子查詢一般是返回單行,要是返回多行,就要用到使用多行比較操作符 in,all,any 二 使用子查詢建立表 這就是把子查詢查詢出來的資料,建立成乙個表,表中的列的資料型別 約束和原來的...

子查詢IN的用法

今天我們要介紹的是子查詢 子查詢大家應該都不陌生啦,在很多地方可以使用到的 首先我們來總結一下 sql子查詢可以用在哪些地方 子查詢的位置 select 子查詢 from 子查詢 where 子查詢 insert table columns 子查詢 delete table from 子查詢 whe...

Oracle的查詢 子查詢

子查詢 子查詢返回乙個值 查詢出工資和scott一樣的員工資訊 select from emp where sal in select sal from emp where ename scott 子查詢返回乙個集合 查詢出工資和10號部門任意員工一樣的員工資訊 select from emp wh...