11 MySQL 8 公用表表示式CTE的使用分析

2021-10-19 07:18:53 字數 2564 閱讀 5131

公用表表示式cte就是命名的臨時結果集,作用範圍是當前語句。

說白了,你可以把它理解成乙個可以多次重複使用的子查詢,當然跟子查詢還是有點區別的,cte可以引用其他cte,但子查詢不能引用其他子查詢。

自mysql 8.0版以來簡要介紹了公共表表示式或叫cte的功能,因此需要您在計算機上安裝mysql 8.0,因此以下語句僅適合在mysql8.0 以上版本。

一、cte 表示式

1、cte的結構包括名稱,可選列列表和定義cte的查詢。 定義cte後,可以像select,insert,update,delete或create view語句中的檢視一樣使用它。

以下說明了cte的基本語法:

with

cte_name

(column_list)as

(query

)select

*from

cte_name

;

請注意,查詢中的列數必須與column_list中的列數相同。 如果省略column_list,cte將使用定義cte的查詢的列列表。

2、簡單的mysql cte示例

with

customers_in_usaas(

select

customername

,state

from

customers

where

country

='usa'

)select

customername

from

customers_in_usa

where

state

='ca'

order

bycustomername

;

參見另外乙個例子:

with

topsales2013as(

select

salesrepemployeenumber

employeenumber

,sum

(quantityordered

*priceeach

)sales

from

orders

inner

join

orderdetails

using

(ordernumber

)inner

join

customers

using

(customernumber

)where

year

(shippeddate)=

2013

andstatus

='shipped'

group

bysalesrepemployeenumber

order

bysales

desc

limit5)

select

employeenumber

,firstname

,lastname

,sales

from

employees

join

topsales2013

using

(employeenumber

);

3. 更高階的mysql cte示例

with

salesrepas(

select

employeenumber

,concat

(firstname

,' '

,lastname)as

salesrepname

from

employees

where

jobtitle

='sales rep'),

customer_salesrepas(

select

customername

,salesrepname

from

customers

inner

join

salesrep

onemployeenumber

=salesrepemployeenumber

)select

*from

customer_salesrep

order

bycustomername

;

在這個例子中,在同一查詢中有兩個cte。 第乙個**cte(salesrep)獲得職位是銷售代表的員工。 第二個cte(customer_salesrep)**使用inner join子句與第乙個cte連線來獲取每個銷售代表負責的客戶。

在使用第二個cte之後,使用帶有order by子句的簡單select語句來查詢來自該cte的資料。

以上是一些簡單的使用。還有其他的使用方式。

mysql8 WITH AS(公用表表示式)

公用表表示式 cte 是乙個命名的臨時結果集,它存在於單個語句的範圍內,以後可以在該語句中引用,可能多次。以下討論描述了如何編寫使用cte的語句。要指定公用表表示式,請使用 with具有乙個或多個逗號分隔子句的子句。每個子句都提供乙個子查詢,該子查詢產生乙個結果集,並將乙個名稱與該子查詢相關聯。下面...

公用表表示式

公用表表示式 common table expressions 假設我們有乙個100w條資料的訂單表,需要分頁查詢。declare rownumber asint,pagenumber asint set rownumber 5 set pagenumber 2 with orderedorders...

公用表表示式CTE

公用表表示式cte表面上和派生表非常相似,看起來只是語義上的區別。但和派生表比較起來,cte具有幾個優勢 第一,如果須要在乙個cte中引用另乙個cte,不需要像派生表那樣巢狀,相反,只要簡單地在同乙個with子句中定義多個cte,並用逗號把它們分隔開。每個cte可以引用在它前面定義的所有cte。而外...