MySQL-8公⽤表表达式CTE的使⽤⽅法实例分析
公⽤表表达式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⽰例
ITH customers_in_usa AS (
SELECT
customerName, state
FROM
customers
WHERE
country ='USA'
)
SELECT
customerName
FROM
customers_in_usa
WHERE
state ='CA'
ORDER BY customerName;
参见另外⼀个例⼦:
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
AND status ='Shipped'
GROUP BY salesRepEmployeeNumber
ORDER BY sales DESC
LIMIT 5
)
SELECT
employeeNumber, firstName, lastName, sales
FROM
employees
JOIN
topsales2013 USING (employeeNumber);
在这个例⼦中,CTE中返回了在2013年前五名的销售代表。之后,我们引⽤了topsales2013 CTE来获取有关销售代表的其他信息,包括名字和姓⽒。
3. 更⾼级的MySQL CTE⽰例
WITH salesrep AS (
SELECT
employeeNumber,
CONCAT(firstName, '', lastName) AS salesrepName
FROM
employees
WHERE
jobTitle ='Sales Rep'
),
customer_salesrep AS (
SELECT
customerName, salesrepName
FROM
customers
INNER JOIN
salesrep ON employeeNumber = salesrepEmployeeNumber
简单的mysql语句)
SELECT
*
FROM
customer_salesrep
ORDER BY customerName;
在这个例⼦中,在同⼀查询中有两个CTE。第⼀个CTE(salesrep)获得职位是销售代表的员⼯。第⼆个CTE(customer_salesrep)使⽤INNER JOIN⼦句与第⼀个CTE连接来获取每个销售代表负责的客户。
在使⽤第⼆个CTE之后,使⽤带有ORDER BY⼦句的简单SELECT语句来查询来⾃该CTE的数据。
以上是⼀些简单的使⽤。还有其他的使⽤⽅式。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。