會通資訊|ArgoERP 提供全方位數位化轉型方案|立即諮詢相關資訊!

TOP

ArgoERP

Aug. 1 2024

WITH AS用法及ArgoERP資料庫實例應用

作者:Ray

WITH AS語法在ORACLE中可以幫助開發人員更有效地撰寫複雜的SQL,並提高程式碼的可讀性及維護性。本文將介紹WITH AS語法的基本概念,並探討在ArgoERP實際應用中的場景和優點。


甚麼是WITH AS語法?

WITH AS語法,也被稱為”Common Table Expressions”(CTE),是一種在SQL中定義暫時性查詢結果的語法,概念像是建立一個臨時的VIEW,可將複雜的子查詢以WITH語法給予一個別名(Alias),並在後續的查詢使用該別名來對資料作查詢或執行DML指令,且可反覆進行使用。


基本語法架構:

在此語法的結構中,利用WITH語法去定義每個子查詢,每個子查詢都需有一個不重複的別名,定義完後可使用SELECT來呼叫這些已被定義的別名,亦可在使用INSERT、UPDATE或DELETE時銜接WITH語法達到寫入或異動資料的目的。

1.單一CTE:
其中subquery_alias為該子查詢的別名、AS後方為一子查詢語句,後續的SELECT可直接引用這個別名。


2.多個CTE:
其中subquery_alias為第一個子查詢的別名、subquery_alias_2為第一個子查詢的別名,最後可用SELECT將兩個CTE進行JOIN查詢得到結果。


3.遞迴CTE:
其中包含基礎成員及遞迴成員,基礎成員與遞迴成員的關係像是父階與子階,透過遞迴的方式將所有子階的資料帶出來。


[編號] = ‘090917’底下有090917-1及090917-3。


[編號] = ‘090917-1’底下有090917-2、[編號] = ‘090917-3’底下有AG-01_ZB及AG-02_ZB以此類推下去。



應用場合:

1.分解複雜查詢:當查詢涉及使用多個子查詢時,可以使用CTE將查詢分解為更細的、可管理的部分,這樣可以提高查詢的可讀性和維護性。
2.提高效能:使用WITH AS可以避免多次計算相同的子查詢,從而減少查詢執行時間,提高效能。


以下為WITH AS應用於ArgoERP資料庫的實例:

1.今天想要比較[年月] = ‘2020/01’、[部門] = ‘20001’各職稱平均薪資,與公司各職稱平均薪資的差異及查看該部門的平均薪資。
其中第一個WITH AS建立的hr_salary為各年月部門+職稱的平均薪資、第二個hr_salary_2為各年月部門的平均薪資、第三個hr_salary_3為各年月公司職稱的平均薪資。 透過將三個CTE進行JOIN查詢後即可看到部門職稱平均薪資與公司職稱平均薪資差異及部門平均薪資。


其中[差異]為[部門職稱平均薪資] – [公司職稱平均薪資]。


2.使用者亦可使用WITH AS結合INSERT語法將資料寫入至指定的TABLE。




結語:

透過使用Oracle WITH AS語法可幫助開發人員顯著提高SQL查詢的可讀性和維護性,無論是分解複雜查詢、處理層級結構數據…等,CTE都能夠提供有效的解決方案,但使用時須注意效能問題,透過合理地使用WITH AS語法可提升資料查詢和處理的效率。


(02)2521-2589#110
winnie@argotek.com.tw

 

成功!
感謝您訂閱會通電子報
OK
成功!
您已取消訂閱會通電子報
OK