婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > mysql8 公用表表達(dá)式CTE的使用方法實例分析

mysql8 公用表表達(dá)式CTE的使用方法實例分析

熱門標(biāo)簽:南寧外呼系統(tǒng)招商 機(jī)器人打電銷電話 怎么更改高德地圖標(biāo)注 電話機(jī)器人是電腦呼號嗎 400電話到哪辦理優(yōu)惠 博樂電銷機(jī)器人 上海市三維地圖標(biāo)注 云南大數(shù)據(jù)外呼系統(tǒng) 鄭州網(wǎng)絡(luò)外呼系統(tǒng)價錢

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

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

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

一、cte的語法格式:

with_clause:
 WITH [RECURSIVE]
  cte_name [(col_name [, col_name] ...)] AS (subquery)
  [, cte_name [(col_name [, col_name] ...)] AS (subquery)] ...

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

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

WITH ... SELECT ...
WITH ... UPDATE ...
WITH ... DELETE ...

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

SELECT ... WHERE id IN (WITH ... SELECT ...) ...
SELECT * FROM (WITH ... SELECT ...) AS dt ...

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

INSERT ... WITH ... SELECT ...
REPLACE ... WITH ... SELECT ...
CREATE TABLE ... WITH ... SELECT ...
CREATE VIEW ... WITH ... SELECT ...
DECLARE CURSOR ... WITH ... SELECT ...
EXPLAIN ... WITH ... SELECT ...

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

CREATE TABLE `menu` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `name` varchar(32) DEFAULT '' COMMENT '名稱',
 `url` varchar(255) DEFAULT '' COMMENT 'url地址',
 `pid` int(11) DEFAULT '0' COMMENT '父級ID',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入點數(shù)據(jù):

INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('1', '后臺管理', '/manage', '0');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('2', '用戶管理', '/manage/user', '1');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('3', '文章管理', '/manage/article', '1');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('4', '添加用戶', '/manage/user/add', '2');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('5', '用戶列表', '/manage/user/list', '2');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('6', '添加文章', '/manage/article/add', '3');
INSERT INTO `menu` (`id`, `name`, `url`, `pid`) VALUES ('7', '文章列表', '/manage/article/list', '3');

四、非遞歸CTE

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

select m.*, (select name from menu where id = m.pid) as pname from menu as m;

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

with cte as (
 select * from menu
) 
select m.*, (select cte.name from cte where cte.id = m.pid) as pname from menu as m;

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

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

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

with cte1 as (
 select * from menu
), cte2 as (
 select m.*, cte1.name as pname from menu as m left join cte1 on m.pid = cte1.id 
)
select * from cte2;

 五、遞歸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,遞歸會停止。

with recursive cte(n) as (
 select 1
 union all
 select n + 1 from cte where n  10
)
select * from cte;

上面的語句,會遞歸顯示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就可以很好的處理了。

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

with recursive cte as (
 select id, name, cast('0' as char(255)) as path from menu where pid = 0
 union all
 select menu.id, menu.name, concat(cte.path, ',', cte.id) as path from menu inner join cte on menu.pid = cte.id
)
select * from 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)]有返回任何行時,遞歸停止。

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

with recursive cte as (
 select id, name, pid from menu where id = 7
 union all
 select menu.id, menu.name, menu.pid from menu inner join cte on cte.pid = menu.id
)
select * from cte;

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》

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

您可能感興趣的文章:
  • MySQL8新特性:自增主鍵的持久化詳解
  • 詳解MySQL8.0+常用命令
  • MySQL8.0新特性之支持原子DDL語句
  • MySQL8.0 DDL原子性特性及實現(xiàn)原理
  • Mysql8.0使用窗口函數(shù)解決排序問題
  • 詳解MySQL 8.0.18命令
  • MySQL 8.0.18給數(shù)據(jù)庫添加用戶和賦權(quán)問題
  • MySql8.0以上版本正確修改ROOT密碼的方法
  • 關(guān)于SQL中CTE(公用表表達(dá)式)(Common Table Expression)的總結(jié)
  • Sql學(xué)習(xí)第三天——SQL 關(guān)于CTE(公用表達(dá)式)的遞歸查詢使用
  • Sql學(xué)習(xí)第二天——SQL DML與CTE概述
  • SqlServer使用公用表表達(dá)式(CTE)實現(xiàn)無限級樹形構(gòu)建

標(biāo)簽:定西 白銀 寧夏 恩施 杭州 益陽 澳門 秦皇島

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql8 公用表表達(dá)式CTE的使用方法實例分析》,本文關(guān)鍵詞  mysql8,公用,表,表達(dá)式,CTE,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql8 公用表表達(dá)式CTE的使用方法實例分析》相關(guān)的同類信息!
  • 本頁收集關(guān)于mysql8 公用表表達(dá)式CTE的使用方法實例分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    美国精品在线观看| 91麻豆精品国产自产在线| 日本一区二区三级电影在线观看| 91成人网在线| 成人午夜私人影院| 国产一区二区三区在线观看精品 | 一区二区三区欧美在线观看| 久久久精品中文字幕麻豆发布| 欧美精品久久一区二区三区| 色8久久人人97超碰香蕉987| 丁香五精品蜜臀久久久久99网站| 老司机午夜精品| 丝袜美腿亚洲综合| 亚洲成精国产精品女| 亚洲自拍偷拍九九九| 亚洲精品视频免费看| 中文字幕日韩精品一区| 欧美高清在线视频| 国产日产欧美一区二区三区| 精品国精品国产尤物美女| 欧美成va人片在线观看| 日韩亚洲欧美高清| 日韩视频在线观看一区二区| 这里只有精品视频在线观看| 日韩精品资源二区在线| 欧美成人欧美edvon| 精品嫩草影院久久| 国产欧美一二三区| 欧美国产日韩亚洲一区| 国产精品激情偷乱一区二区∴| 中文字幕精品一区二区精品绿巨人 | 欧美网站一区二区| 欧美性一级生活| 欧美三区在线观看| 91精品国产91久久综合桃花| 91精品国产色综合久久久蜜香臀| 91精品国产综合久久久久久久| 日韩欧美一级二级三级久久久| 国产亚洲精品福利| 亚洲精品日产精品乱码不卡| 日本欧美一区二区| 国产一区不卡视频| 日本精品裸体写真集在线观看 | 久久久91精品国产一区二区三区| 久久一区二区三区四区| 欧美一区二区三区播放老司机| 久久综合一区二区| 日本一不卡视频| 99久久夜色精品国产网站| 精品毛片乱码1区2区3区| 亚洲国产精品一区二区久久| 国产精品99久久久久| 99久久国产综合精品色伊| 国模冰冰炮一区二区| 91蜜桃免费观看视频| 日韩欧美视频一区| 亚洲欧美韩国综合色| 欧美亚洲禁片免费| 日韩欧美色综合| 婷婷中文字幕一区三区| 一区二区欧美视频| 午夜精品福利一区二区蜜股av | 一本大道久久a久久综合婷婷| 欧美中文字幕久久| 欧美sm极限捆绑bd| 亚洲高清不卡在线| 国产精品一区不卡| 日韩三级电影网址| 亚洲精品第1页| 国产精品18久久久久久久久 | av动漫一区二区| av综合在线播放| 精品1区2区在线观看| 亚洲欧洲综合另类| 国产a区久久久| 精品国产乱码久久久久久久久| 亚洲一区二区视频在线观看| 丁香另类激情小说| 日韩欧美中文一区| 日韩影院精彩在线| 在线免费观看日本一区| 中文字幕日韩av资源站| 国产精品亚洲视频| 精品成人一区二区三区四区| 三级久久三级久久久| 91福利精品第一导航| 中文字幕亚洲成人| 99久久99久久精品免费看蜜桃| 久久久久久久久久看片| 日本强好片久久久久久aaa| 欧洲精品在线观看| 亚洲免费色视频| 色噜噜狠狠色综合中国| 亚洲激情男女视频| 一本到一区二区三区| 亚洲视频免费看| 99久久免费精品| 亚洲另类色综合网站| 日本久久电影网| 亚洲v中文字幕| 91麻豆精品国产91久久久久久久久| 亚洲h动漫在线| 91精品国产综合久久久久久久 | 亚洲影院在线观看| 91久久免费观看| 午夜免费欧美电影| 日韩欧美中文字幕一区| 国内不卡的二区三区中文字幕 | 岛国精品一区二区| 中文字幕字幕中文在线中不卡视频| av一区二区不卡| 一区二区视频免费在线观看| 欧美日韩成人综合天天影院| 日本在线观看不卡视频| 久久久久九九视频| 色婷婷亚洲婷婷| 欧美a级理论片| 亚洲欧洲日本在线| 欧美欧美欧美欧美首页| 久久精品国产一区二区三| 国产亚洲欧洲一区高清在线观看| 99久久精品国产网站| 日韩综合小视频| 国产午夜一区二区三区| 色婷婷综合久久久久中文 | 国产日产欧美精品一区二区三区| 北条麻妃一区二区三区| 日韩va欧美va亚洲va久久| 国产欧美日韩亚州综合| 欧美色大人视频| 国产不卡在线视频| 亚洲国产毛片aaaaa无费看| 日韩欧美国产综合| 国产一区二区按摩在线观看| 亚洲美女屁股眼交| 欧美精品一区二区三区蜜桃| kk眼镜猥琐国模调教系列一区二区| 午夜亚洲福利老司机| 日韩欧美123| 国产成人午夜视频| 一个色综合网站| 欧美一区二区视频网站| fc2成人免费人成在线观看播放| 男女男精品网站| 欧美国产激情二区三区| 欧美一区二区成人| 99久久国产综合精品麻豆| 美日韩黄色大片| 成人免费在线播放视频| 欧美精品丝袜中出| 色噜噜狠狠成人网p站| 免费成人美女在线观看| 亚洲一级二级在线| 亚洲三级视频在线观看| 欧美tk—视频vk| 欧美肥大bbwbbw高潮| 欧美日韩一卡二卡三卡| 一本色道久久综合狠狠躁的推荐| 国产高清亚洲一区| 蜜臀精品一区二区三区在线观看 | 欧美挠脚心视频网站| 色综合天天综合网天天看片| 国产精品77777竹菊影视小说| 亚洲高清免费观看| 中文字幕中文字幕在线一区| 精品国产乱码久久久久久牛牛| 在线播放一区二区三区| 欧洲视频一区二区| 韩国女主播成人在线观看| 天堂资源在线中文精品| 亚洲精品一区二区三区影院| 337p亚洲精品色噜噜| 91.com视频| 日韩欧美国产电影| 日韩女优视频免费观看| 色天使色偷偷av一区二区| 国产99久久久精品| 精品一区二区三区在线观看| 国产精品国产成人国产三级| 热久久国产精品| 精品国精品自拍自在线| 日韩免费电影一区| 欧美一级免费观看| 日韩一区二区精品在线观看| 欧美手机在线视频| 日本道免费精品一区二区三区| 99精品桃花视频在线观看| 国产91对白在线观看九色| 国产麻豆精品一区二区| 黄一区二区三区| 国产成人精品网址| 不卡av在线免费观看| 色呦呦日韩精品| 日韩一级二级三级| 久久午夜电影网| 中文字幕一区二区三区蜜月 | 成人黄色777网| 精品污污网站免费看| 欧美一级国产精品| 欧美经典一区二区|