SQL server資料庫with as子句與遞迴查詢的實現
sql server中遞迴併不與Oracle等資料庫中的遞迴一樣。在sql server中遞迴使用join自連線完成的,當然這些都要在with as短句中完成的,下面我們先來說一下with as 短句。
1.關於with as短句
WITH AS短語,也叫子查詢部分(subquery factoring),可以定義一個SQL片斷,該SQL片斷會被整個SQL語句用到。可以使SQL語句的可讀性更高,也可以在UNION ALL的不同部分,作為提供資料的部分。
對於UNION ALL,使用WITH AS定義了一個UNION ALL語句,當該片斷被呼叫2次以上,優化器會自動將該WITH AS短語所獲取的資料放入一個Temp表中。而提示meterialize則是強制將WITH AS短語的資料放入一個全域性臨時表中。很多查詢通過該方式都可以提高速度。
with cet as(
select id name,age from stuents where Name like '劉%'
)
--因為with as是一種子句形式,所以它的使用必須依賴於主查詢語句,否則會報錯
select * from cet
/*
**當然了,我是更喜歡這種形式去寫with as子句,
**這樣看起來更加清晰明瞭
**
with cet(id,name,age)as(
select id name,age from stuents where Name like '劉%'
)
*/
2.遞迴查詢使用
例如,這張表應該是一個樹的表格,我們現在運用遞迴查詢,要將樹的每一個節點標註上節點層級序號,查出這張表的資料以及每條資料對應樹節點的層級(例如:世界層級是1,中國、日本的樹層級是2)。
WITH cte(id,name,pid,sorder,slevel)AS(
--先找到遞迴的起點
SELECT id,name,pid,shoe_order as sorder,1 as slevel FROM tree_demo WHERE pid=0
--用join從起點開始連線形成遞迴查詢,然後用union all拼接上起點
UNION ALL
SELECT b.id,b.name,b.pid,b.shoe_order as sorder,c.slevel+1 as slevel FROM tree_demo b
JOIN cte c on b.pid=c.id
)
SELECT * FROM cte
首先我先找到樹的根節點(節點名稱是'世界'的節點,也就是pid=0),作為本次遞迴查詢的起點,然後查詢表格並將表格資料與子句查詢結果做關聯查詢從而形成遞迴,在最後將根節點與遞迴節點用union all拼接到一起,這便是遞迴查詢的最後結果了。
感謝大家的閱讀,也真心希望大家能有所收穫,同樣也感謝大家能提出寶貴的意見或者是建議,讓更多的人在技術這條路上走得更加坦蕩。
相關文章
- SQL Server實戰四:查詢資料庫的資料SQLServer資料庫
- SQL Server 跨資料庫查詢SQLServer資料庫
- 概括SQL Server實時查詢Oracle資料庫WSSQLServerOracle資料庫
- 資料庫遞迴查詢:MySQL VS Sequelize資料庫遞迴MySql
- sql server遞迴SQLServer遞迴
- SQL Server 查詢資料庫中所有表資料條數SQLServer資料庫
- SQL Server資料庫————模糊查詢和聚合函式SQLServer資料庫函式
- SQL server資料庫表碎片比例查詢語句SQLServer資料庫
- SQL Server2005使用CTE實現遞迴QCSQLServer遞迴
- SQL Server 資料庫查詢死鎖的處理步驟SQLServer資料庫
- Java實現遞迴查詢樹結構Java遞迴
- [SQL Server玩轉Python] 二.T-SQL查詢表格值及Python實現資料分析SQLServerPython
- SQL SERVER 2012查詢資料庫和所有表的大小方法彙總SQLServer資料庫
- 二分法查詢(遞迴實現)遞迴
- SqlServer遞迴查詢SQLServer遞迴
- PostgreSQL 遞迴查詢SQL遞迴
- sqlalchemy 遞迴查詢SQL遞迴
- SQL Server中Table字典資料的查詢SQL示例程式碼SQLServer
- Android SQL資料庫查詢方法 query( )AndroidSQL資料庫
- Excel資料庫轉MySQL,實現查詢Excel資料庫MySql
- SQL Server資料庫之datepart和datediff應用查詢當天上午和下午的資料SQLServer資料庫
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- 解析MSSQL跨資料庫查詢的實現方法SQL資料庫
- 遞迴查詢子元素遞迴
- 二分查詢的兩種實現形式遞迴和迭代遞迴
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- 分散式資料庫下子查詢和 Join 等複雜 SQL 如何實現?分散式資料庫SQL
- 第二章 :查詢與排序-------二分查詢的遞迴解法排序遞迴
- ORACLE資料庫遞迴查詢時間區間,可傳入指定日期Oracle資料庫遞迴
- Sql Server 的引數化查詢SQLServer
- SQL的資料庫操作:新增、更新、刪除、查詢SQL資料庫
- 資料庫映象 (SQL Server)資料庫SQLServer
- SQL Server資料庫安全SQLServer資料庫
- 使用cglib實現資料庫框架的級聯查詢CGLib資料庫框架
- 如何使用 Milvus 向量資料庫實現實時查詢資料庫
- SSH:hiberate實現資料的查詢(單查詢和全查詢)
- KCSQL SERVER實現連線與合併查詢dinSQLServer
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫