MySQL CTE 通用表達式詳解
在MySQL中,CTE(Common Table Expressions,通用表表達式)是一種簡潔而強大的語法,用于構建臨時的結果集,通常用于簡化復雜查詢。CTE通過關鍵字 WITH
引入,定義一個可以在后續(xù)查詢中引用的臨時結果集。CTE有兩種類型:普通CTE和遞歸CTE。
一、普通CTE
普通CTE用于定義一個非遞歸的臨時結果集,通常用于提高查詢的可讀性和維護性。
1. 語法
普通CTE的基本語法如下:
WITH cte_name (column1, column2, ...) AS ( SELECT column1, column2, ... FROM table_name WHERE condition ) SELECT * FROM cte_name; ?
2. 示例
假設我們有一個名為 employees
的表,結構如下:
CREATE TABLE employees ( emp_id INT, emp_name VARCHAR(100), dept_id INT, salary DECIMAL(10, 2) ); INSERT INTO employees (emp_id, emp_name, dept_id, salary) VALUES (1, 'Alice', 1, 5000.00), (2, 'Bob', 2, 6000.00), (3, 'Charlie', 1, 5500.00), (4, 'David', 3, 7000.00), (5, 'Eve', 2, 6500.00); ?
我們希望查詢部門ID為1的所有員工信息,可以使用普通CTE:
WITH dept1_employees AS ( SELECT emp_id, emp_name, salary FROM employees WHERE dept_id = 1 ) SELECT * FROM dept1_employees; ?
該查詢結果為:
+--------+----------+--------+
| emp_id | emp_name | salary |
+--------+----------+--------+
| 1 | Alice | 5000.00|
| 3 | Charlie | 5500.00|
+--------+----------+--------+
二、遞歸CTE
遞歸CTE用于解決具有層級關系的數(shù)據(jù)查詢問題,如組織結構、類別層級等。遞歸CTE由兩個部分組成:錨定成員(非遞歸部分)和遞歸成員。
1. 語法
遞歸CTE的基本語法如下:
WITH RECURSIVE cte_name (column1, column2, ...) AS ( -- 錨定成員 SELECT column1, column2, ... FROM table_name WHERE condition UNION ALL -- 遞歸成員 SELECT column1, column2, ... FROM cte_name JOIN table_name ON condition ) SELECT * FROM cte_name; ?
2. 示例
假設我們有一個名為 employees
的表,包含員工及其經(jīng)理的信息:
CREATE TABLE employees ( emp_id INT, emp_name VARCHAR(100), manager_id INT ); INSERT INTO employees (emp_id, emp_name, manager_id) VALUES (1, 'Alice', NULL), (2, 'Bob', 1), (3, 'Charlie', 2), (4, 'David', 1), (5, 'Eve', 3); ?
我們希望查詢員工Alice的所有直接和間接下屬,可以使用遞歸CTE:
WITH RECURSIVE subordinates AS ( -- 錨定成員:Alice本身 SELECT emp_id, emp_name, manager_id FROM employees WHERE emp_name = 'Alice' UNION ALL -- 遞歸成員:Alice的下屬及其下屬 SELECT e.emp_id, e.emp_name, e.manager_id FROM employees e JOIN subordinates s ON e.manager_id = s.emp_id ) SELECT * FROM subordinates; ?
該查詢結果為:
+--------+----------+------------+
| emp_id | emp_name | manager_id |
+--------+----------+------------+
| 1 | Alice | NULL |
| 2 | Bob | 1 |
| 3 | Charlie | 2 |
| 4 | David | 1 |
| 5 | Eve | 3 |
+--------+----------+------------+
到此這篇關于MySQL CTE 通用表達式的文章就介紹到這了,更多相關MySQL CTE 通用表達式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql 從 frm 文件恢復 table 表結構的3種方法【推薦】
這篇文章主要介紹了mysql 從 frm 文件恢復 table 表結構的3種方法 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09mysql server is running with the --skip-grant-tables option
今天在mysql中新建數(shù)據(jù)庫提示The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement,原來是數(shù)據(jù)中配置的--skip-grant-tables,這樣安全就降低了,這個一般當忘記root密碼的時候需要這樣操作2017-07-07MySQL數(shù)據(jù)庫中把int轉化varchar引發(fā)的慢查詢
這篇文章主要介紹了MySQL數(shù)據(jù)庫中把int轉化varchar引發(fā)的慢查詢 的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下2016-07-07MySQL拋出Incorrect string value異常分析
從上至下統(tǒng)一用上UTF-8就高枕無憂,今天還是遇到字符的異常,本文將介紹解決方法2012-11-11MySQL中count(*)、count(1)和count(col)的區(qū)別匯總
count()函數(shù)是用來統(tǒng)計表中記錄的一個函數(shù),返回匹配條件的行數(shù),下面這篇文章主要給大家總結介紹了關于MySQL中count(*)、count(1)和count(col)的區(qū)別,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。2018-03-03MariaDB(Mysql分支)my.cnf配置文件中文注釋版
這篇文章主要介紹了MariaDB my.cnf配置文件中文注釋版,MariaDB是Mysql的一個分支,完全兼容Mysql,需要的朋友可以參考下2014-06-06