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);
聯合查詢如何工作?內部查詢是否根據外部查詢行進行迭代?假設我的學生桌只有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);
相關的子查詢是(理論上 - 沒有考慮可能的優化)對主表的每一行執行一次。
對於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);
返回空結果(沒有行)。