国产探花免费观看_亚洲丰满少妇自慰呻吟_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 就是一個可復用的結果集就好了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大悟县| 定日县| 湘潭县| 济阳县| 雷波县| 尚义县| 陆河县| 夹江县| 建宁县| 门源| 徐闻县| 青冈县| 客服| 黔西| 胶南市| 修文县| 漳平市| 常州市| 乐东| 元氏县| 灵山县| 泗阳县| 长白| 化德县| 万年县| 寿光市| 治县。| 灌云县| 天津市| 汝南县| 广昌县| 青神县| 五河县| 福泉市| 健康| 南开区| 牡丹江市| 涿鹿县| 原阳县| 尤溪县| 治多县|