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實現