国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql8 公用表表達式CTE的使用方法實例分析

2024-07-24 12:54:30
字體:
來源:轉載
供稿:網友

本文實例講述了mysql8 公用表表達式CTE的使用方法。,具體如下:

公用表表達式CTE就是命名的臨時結果集,作用范圍是當前語句。

說白點你可以理解成一個可以復用的子查詢,當然跟子查詢還是有點區別的,CTE可以引用其他CTE,但子查詢不能引用其他子查詢。

一、cte的語法格式:

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

二、哪些地方可以使用with語句創建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 ...

三、我們先建個表,準備點數據

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;

插入點數據:

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

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

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 就是一個可復用的結果集就好了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 台南县| 衡水市| 马龙县| 昭通市| 浠水县| 琼结县| 桐梓县| 固安县| 富蕴县| 舟曲县| 东丰县| 乐昌市| 华池县| 东丰县| 曲水县| 专栏| 宁都县| 昌平区| 文水县| 云南省| 莱芜市| 墨脱县| 吉林省| 琼中| 邻水| 通江县| 阿巴嘎旗| 河东区| 东方市| 莱西市| 昭通市| 天峻县| 江城| 赤峰市| 洞头县| 贞丰县| 宁乡县| 葫芦岛市| 博湖县| 治县。| 缙云县|