sql中 with as 的用法和注意事項
1.為什麼使用with as
我們在使用sql語句的時候經常使用子查詢,但是子查詢占用系統的資源是很多了,如果用在了迴圈中更是可怕,當然我們可以使用表量函式,但是標量函式的成本還是否不小,所以sql2005給我們提供了乙個表示式 with as
使用with as應該注意
1 with as後面必須緊跟使用cte(common table express) (with as)的語句
with a as
select * from tb1
select * from tb2,a where a.id=tb1.id
2 多個cte 之間加,分割
with t1 as
select * from t1
t2 as
select * from t2
t3 as
select * from t3
3 如果cte 和某個表重名則第乙個使用cte 後面的就是使用了表
--table1 資料庫中有table1
with table1 as
select * from tb1
select * from tb2,table1 where tb1.id=table1.id --cte
select * from tb2,table1 where tb1.id=table1.id --table1
4 如果cte屬於批處理的一部分,那麼用;和批處理分割
declare @t1 int
set @t1=2
with t as
select * from table1
select * from tb2 ,t where tb2.id=t.id
今天又學到了with
with 除了有上面提到的功能以為,with 還有以下的功能
1 遞迴呼叫
假如,有乙個父子關係的表結構,就拿員工表吧,employeeid,reportto ,firstname,lastname,其中reportto儲存著當前記錄的直接上級
那麼我們怎麼才能查詢出給定乙個人的下級(所有下級),答案是使用with遞迴
with emp as
select employeeid,reportto,firstname,lastname
from employees where employee=4
join all
select emp.employeeid,emp.reportto,emp.firstname,emp.lastname
from employees emp
join emp
on emp.employeeid=emp.reportto
select * from emp
在with中第乙個是錨點,就是從那裡開始,第二個迴圈是遞迴的主體,知道查詢結果為空就結束,這樣我們就實現了我們的要求了
SQL中表變數是否必須替代臨時表
2010 09 08 17 35 佚名 網際網路 在sql資料庫中,必須使用表變數來代替臨時表嗎?答案取決於三個因素 插入到表中的行數 從中儲存查詢的重新編譯的次數 以及查詢型別及其對效能的指數和統計資訊的依賴性。在某些情況下,可將乙個具有臨時表的儲存過程拆分為多個較小的儲存過程,以便在較小的單元上...
Oracle儲存過程中使用臨時表的替代方案
近日接手乙個分析類老專案改造工作,使用者要求使用oracle資料庫 原先版本為sql server2005 由於原專案中大量使用儲存過程實現複雜的業務資料查詢,在sql server中由於使用錶值函式 臨時表等非常方便,所以當時實現起來並不費事,而現在轉為oracle就不一樣了,限制太多 說實話 甲...
36 臨時表和臨時表
臨時表特點 建表語法是create temporary table乙個臨時表只能被建立它的session訪問,對其他執行緒不可見。臨時表和普通表可以同名。同乙個session內有臨時表和普通表的時候,show crete語句 增刪改查訪問的是臨時表。show tabls命令不顯示臨時表。由於臨時表只...