子查詢及exists

2022-05-24 03:30:10 字數 510 閱讀 8699

子查詢分為無關子查詢和相關子查詢

無關子查詢,只查詢一次,與外查詢無關,可作為查詢條件:

select * from student where sno in (select sno from student where class = 98789);

也可作為乙個虛擬表使用。

select * from student  where exists (select * from student);--只要存在條件滿足,就查詢

在這裡引申出乙個exists,它和in的區別是:

使用exists,oracle會首先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項,這就節省了時間。oracle在執行in子查詢時,首先執行子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,待子查詢執行完畢,存放在臨時表中以後再執行主查詢。這也就是使用exists比使用in通常查詢速度快的原因

(** 

mysql之exists子查詢和in查詢的對比

exists和not exists對應 in 和not in 不同在於,在select 查詢中,exists和in的執行順序不同。sql mysql select from category id c name 1 ios 2 android 3 sb 3 rows in set 商品表 www.2...

帶有exists謂詞的子查詢 巢狀查詢

exists,not exists 1.含義 帶有exists謂詞的子查詢不返回任何實際資料,它只產生邏輯真值true或邏輯假值false。2.查詢所有選修了c1號課程的學生姓名 select sn from s where exists select from sc where sno s.sno...

oracle IN與EXISTS子查詢的關係

在我任職的公司裡面,有很多的規範啊手冊一類的東西。我們公司oracle語法規範裡面有2條我一直就很懷疑 1.子查詢結果集小,用in 2.外表小,子查詢表大,用exists 我前幾天看了一些文章說每個版本的oracle的cbo有一些的不同,我想試驗下,剛才的2條規則。由於我手上只有10g和11g的環境...