SQL 使用WITH

  • 70
  • 0
  • SQL
  • 2024-10-18

SQL WITH的應用方法, WITH AS短語,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。

WITH AS的含義
    WITH AS,也叫做子查詢部分(subquery factoring),可以讓你做很多事情,定義一個SQL片斷,該SQL片斷會被整個SQL語句所用到。有的時候,是為了讓SQL語句的可讀性更高些,也有可能是在UNION ALL的不同部分,作為提供數據的部分。
特別對於UNION ALL比較有用。因為UNION ALL的每個部分可能相同,但是如果每個部分都去執行一遍的話,則成本太高,所以可以使用WITH AS短語,則只要執行一遍即可。如果WITH AS短語所定義的表名被調用兩次以上,則優化器會自動將WITH AS短語所獲取的數據放入一個TEMP表裡,如果只是被調用一次,則不會。而提示materialize則是強制將WITH AS短語裡的數據放入一個全局臨時表裡。很多查詢通過這種方法都可以提高速度。

使用SQL WITH的時機點,需依據開發需求,對於WITH我是很陌生,是在一個專案中才有用到

之前類似需求應用,是查詢完給C#做LINQ處裡….可以達到目的。

在這紀錄一下WITH的應用,有用到預存程序上就可以不必使用這作法直接使用TEMPTABLE應用會比較好用

當需求需先取得某TABLEJOIN某TABLE的,才做其他應用時可以使用WITH的語法將資料整理,可提供下一段語法應用

WITH notes AS (  Select * From TempNote   WHERE NoteState=1 ),

temp as (select * From ATable  LEFT JOIN  notes  ON  notes .id =  ATable .id  WHERE  A=1) 

SELECT * FROM temp 

這樣類型的應用,當然我這邊舉例十分不對…,這邊只是單純紀錄應用方法。