日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql cte 语法,mysql8 公用表表达式CTE的使用方法实例分析

發(fā)布時間:2025/3/21 数据库 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql cte 语法,mysql8 公用表表达式CTE的使用方法实例分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文實(shí)例講述了mysql8 公用表表達(dá)式cte的使用方法。分享給大家供大家參考,具體如下:

公用表表達(dá)式cte就是命名的臨時結(jié)果集,作用范圍是當(dāng)前語句。

說白點(diǎn)你可以理解成一個可以復(fù)用的子查詢,當(dāng)然跟子查詢還是有點(diǎn)區(qū)別的,cte可以引用其他cte,但子查詢不能引用其他子查詢。

一、cte的語法格式:

二、哪些地方可以使用with語句創(chuàng)建cte

1、select, update,delete 語句的開頭

2、在子查詢的開頭或派生表子查詢的開頭

3、緊接select,在包含 select聲明的語句之前

三、我們先建個表,準(zhǔn)備點(diǎn)數(shù)據(jù)

插入點(diǎn)數(shù)據(jù):

四、非遞歸cte

這里查詢每個菜單對應(yīng)的直接上級名稱,通過子查詢的方式。

這里換成用cte完成上面的功能

上面的示例并不是很好,只是用來演示cte的使用。你只需要知道 cte 就是一個可復(fù)用的結(jié)果集就好了。

相比較某些子查詢,cte 的效率會更高,因為非遞歸的 cte 只會查詢一次并復(fù)用。

cte 可以引用其他 cte 的結(jié)果,比如下面的語句,cte2 就引用了 cte1 中的結(jié)果。

五、遞歸cte

遞歸cte是一種特殊的cte,其子查詢會引用自身,with子句必須以 with recursive 開頭。

cte遞歸子查詢包括兩部分:seed 查詢 和?recursive 查詢,中間由union [all] 或 union distinct 分隔。

seed 查詢會被執(zhí)行一次,以創(chuàng)建初始數(shù)據(jù)子集。

recursive 查詢會被重復(fù)執(zhí)行以返回數(shù)據(jù)子集,直到獲得完整結(jié)果集。當(dāng)?shù)粫扇魏涡滦袝r,遞歸會停止。

上面的語句,會遞歸顯示10行,每行分別顯示1-10數(shù)字。

遞歸的過程如下:

1、首先執(zhí)行 select 1 得到結(jié)果 1, 則當(dāng)前 n 的值為 1。

2、接著執(zhí)行 select n + 1 from cte where n < 10,因為當(dāng)前 n 為 1,所以where條件成立,生成新行,select n + 1 得到結(jié)果 2,則當(dāng)前 n 的值為 2。

3、繼續(xù)執(zhí)行?select n + 1 from cte where n < 10,因為當(dāng)前 n 為 2,所以where條件成立,生成新行,select n + 1 得到結(jié)果 3,則當(dāng)前 n 的值為 3。

4、一直遞歸下去

5、直到當(dāng) n 為 10 時,where條件不成立,無法生成新行,則遞歸停止。

對于一些有上下級關(guān)系的數(shù)據(jù),通過遞歸cte就可以很好的處理了。

比如我們要查詢每個菜單到頂級菜單的路徑

遞歸的過程如下:

1、首先查詢出所有 pid = 0 的菜單數(shù)據(jù),并設(shè)置path 為 '0',此時cte的結(jié)果集為 pid = 0 的所有菜單數(shù)據(jù)。

2、執(zhí)行 menu inner join cte on menu.pid = cte.id ,這時表 menu 與 cte (步驟1中獲取的結(jié)果集) 進(jìn)行內(nèi)連接,獲取菜單父級為頂級菜單的數(shù)據(jù)。

3、繼續(xù)執(zhí)行?menu inner join cte on menu.pid = cte.id,這時表 menu 與 cte (步驟2中獲取的結(jié)果集) 進(jìn)行內(nèi)連接,獲取菜單父級的父級為頂級菜單的數(shù)據(jù)。

4、一直遞歸下去

5、直到?jīng)]有返回任何行時,遞歸停止。

查詢一個指定菜單所有的父級菜單

希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。

原文鏈接:https://www.cnblogs.com/jkko123/p/10176323.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的mysql cte 语法,mysql8 公用表表达式CTE的使用方法实例分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。