sql中的with as

String sql = “select * from emp where empno in (select a.empno from (select rownum,e.* from emp e) a where rownum<=10)”;

上面sql的查詢原理:紅色標記部分爲子查詢部分,sql先執行子查詢部分,得到一個結果集(10條),然後在執行外部查詢,在執行外部查詢的時候,要和子查詢的結果集比較10次,

 

使用with as:

with ss as (select a.empno from (select rownum,e.* from emp e) a where rownum<=10)

select * from emp where empno in (select * from ss)

 

1、如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的數據放入一個TEMP表裏,如果只是被調用一次,則不會

2、如果一個sql經常被調用,一般用with  as實現

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章