> 文章列表 > sql with

sql with

sql with

什么是'.sql with.'

'SQL with'是一种SQL语言的扩展,允许程序员在一个SQL查询内定义一个或多个临时表格或视图,这些临时表格或视图可以供查询使用。这种技术也称为公用表达式或递归SQL。SQL with语句的格式非常简单,只需要在查询语句前使用公用表达式定义即可。

为什么使用'.sql with.'

使用SQL with语句可以让我们在一道查询题中,用到多个子查询时,可以避免繁琐的重复写重复的(子)查询语句。此外,使用SQL with语句还可以让我们更好地组织查询代码,使代码结构更加清晰易懂,也更加容易维护。

.sql with.的语法规则

SQL with语句的一般语法格式如下:
WITH cte_name (column1, column2, …) AS (
subquery
) sql_statement;
对于上面的语法:cte_name:定义临时表的名称;column1,column2 …:列的列表;subquery:指向要执行的子查询的查询的名字,最终返回值将被转换为临时表的数据列;sql_statement:SELECT语句,从临时表中查询的数据。

使用'.sql with.'的例子

在下面的例子中,我们假设我们想以总销售额为排名要求,按部门划分并验证其总销售额(在SalesOrderHeader中的OrderDate之后),请看下面的SQL查询:

WITH sales_summary(dept_name, sales_order_total) AS(
SELECT h.sales_person_id,
sum(d.line_total)
FROM sales.SalesOrderHeader h
JOIN sales.SalesOrderDetail d
ON h.sales_order_id = d.sales_order_id
WHERE '20050531' <= CONVERT(VARCHAR(8), h.order_date, 112)
GROUP BY h.sales_person_id
),
member_sales(dept_name, member_sales_total) AS(
SELECT sm.german, sum(sales_order_total)
FROM sales_summary s
JOIN sales.SalesPerson sp
ON s.dept_name = sp.sales_person_id
JOIN sales.SalesTerritory ste
ON sp.territory_id = ste.territory_id
JOIN sales.CountryRegion cr
ON ste.country_region_code = cr.country_region_code
JOIN sales.StateProvince spv
ON ste.territory_id = spv.territory_id
JOIN HR.Employee e
ON sp.sales_person_id = e.employee_id
JOIN Person.Contact con
ON e.contact_id = con.contact_id
JOIN dbo.SalesPerson_GP sm
ON sp.sales_person_id = sm.sales_person_id
GROUP BY sm.german)
SELECT d.english AS Department,
m.member_data AS SalesPerson,
ss.sales_order_total AS SalesOrderTotal
FROM sales.SalesPersonDepartment spd
JOIN Person.Department d
ON spd.department_id = d.department_id
LEFT OUTER JOIN member_sales m
ON d.english = m.dept_name
LEFT OUTER JOIN sales_summary ss
ON m.dept_name= cast(ss.dept_name AS NVARCHAR(max))
ORDER BY ss.sales_order_total DESC

结语

以上就是关于SQL with语句的一些基本介绍、语法规则和使用例子。使用SQL with语句可以大大提高我们SQL查询数据的效率,减少重复编写相同的查询代码,也方便代码的维护与修改。希望这些介绍可以对你有所帮助。