2017-04-03 108 views
0

聯合查詢如何工作?內部查詢是否根據外部查詢行進行迭代?假設我的學生桌只有1個ID列,其中的值爲1,2,3。任何人都可以給出圖例嗎?Oracle相關查詢?

select count(*) 
from student s where s.sid < any (select s1.id from student s1 where s1.id < s.id); 

回答

0

相關的子查詢是(理論上 - 沒有考慮可能的優化)對主表的每一行執行一次。

對於s.ID = 1個查詢沒有返回行(s1.ID < 1返回任何操作)

爲s.ID = 2則返回1和(謂詞s1.id < 2)

爲s.ID = 3它返回1,2-

因此,第一行(s.ID = 1)沒有被選擇(子查詢返回任何行),

第二行(一個或多個.ID = 2)謂詞是s.id < any (1),它被重寫爲爲ANY 請參閱規則和沒有選擇的行爲2 < 1是FALSE

用於第三行(s.ID = 3)的謂詞是s.id < any (1,2)這是改寫到s.id < 1 OR s.id < 2這是FLASE爲好。

所以查詢

create table student as 
select rownum id from dual connect by level <= 3; 

select * 
from student s where s.id < any (select s1.id from student s1 where s1.id < s.id); 

返回空結果(沒有行)