欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL CTE 通用表達式詳解

 更新時間:2025年06月10日 09:55:05   作者:yt94832  
在MySQL中,CTE是一種簡潔而強大的語法,用于構建臨時的結果集,通常用于簡化復雜查詢,下面通過本文給大家介紹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種方法【推薦】

    這篇文章主要介紹了mysql 從 frm 文件恢復 table 表結構的3種方法 ,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • MySQL8.0無法遠程連接訪問的解決方法

    MySQL8.0無法遠程連接訪問的解決方法

    本文主要介紹了MySQL8.0無法遠程連接訪問的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • Mysql百萬級分頁優(yōu)化技巧

    Mysql百萬級分頁優(yōu)化技巧

    這篇文章主要介紹了Mysql百萬級分頁優(yōu)化技巧,包括普通分頁和優(yōu)化分頁兩種,在數(shù)據(jù)量比較大的時候,我們盡量去利用索引來優(yōu)化語句。下面通過本文給大家詳細講解,一起看看吧
    2016-12-12
  • mysql server is running with the --skip-grant-tables option

    mysql 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-07
  • MySQL數(shù)據(jù)庫中把int轉化varchar引發(fā)的慢查詢

    MySQL數(shù)據(jù)庫中把int轉化varchar引發(fā)的慢查詢

    這篇文章主要介紹了MySQL數(shù)據(jù)庫中把int轉化varchar引發(fā)的慢查詢 的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • MySQL拋出Incorrect string value異常分析

    MySQL拋出Incorrect string value異常分析

    從上至下統(tǒng)一用上UTF-8就高枕無憂,今天還是遇到字符的異常,本文將介紹解決方法
    2012-11-11
  • MySQL中count(*)、count(1)和count(col)的區(qū)別匯總

    MySQL中count(*)、count(1)和count(col)的區(qū)別匯總

    count()函數(shù)是用來統(tǒng)計表中記錄的一個函數(shù),返回匹配條件的行數(shù),下面這篇文章主要給大家總結介紹了關于MySQL中count(*)、count(1)和count(col)的區(qū)別,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2018-03-03
  • MariaDB(Mysql分支)my.cnf配置文件中文注釋版

    MariaDB(Mysql分支)my.cnf配置文件中文注釋版

    這篇文章主要介紹了MariaDB my.cnf配置文件中文注釋版,MariaDB是Mysql的一個分支,完全兼容Mysql,需要的朋友可以參考下
    2014-06-06
  • Windows下MySql錯誤代碼1045的解決方法

    Windows下MySql錯誤代碼1045的解決方法

    這篇文章主要介紹了Windows下MySql錯誤代碼1045的解決方法,文中還包含了2個Linux下的解決方法,需要的朋友可以參考下
    2014-06-06
  • IDEA找不到Database的完美解決方法

    IDEA找不到Database的完美解決方法

    IntelliJ IDEA中可以用database來連接數(shù)據(jù)庫,但也會經(jīng)常遇到問題,下面這篇文章主要給大家介紹了關于IDEA找不到Database的完美解決方法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2023-05-05

最新評論