SQL with as 替代臨時表的用法

2022-02-14 01:22:50 字數 1460 閱讀 1927

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命令不顯示臨時表。由於臨時表只...