标签:VBA 有时候,工作簿中可能有大量的命名区域。...下面是一段简单的代码,它将列出工作簿中的所有定义的名称,并显示名称所指向的单元格区域。...Sub NamesList() Dim wks As Worksheet Dim nm As Name '可以修改为你想置名称和引用区域的工作表 Set wks = Sheet1...'忽略错误 On Error Resume Next '遍历名称 For Each nm In Names '在列A中列出名称 wks.Range...("A" & Rows.Count).End(xlUp)(2) = nm.Name '在列B中列出名称指向的区域 wks.Range("B" & Rows.Count)
Common table expression (CTE)通用表表达式是MySQL8推出的新功能。它是一种临时表,使用“WITH”命令,可以执行递归查询。...是的,使用WITH语句,可以使你的查询看起来清晰明了,更加易读,但好处不止是这个,CTE可以多次参照。...FROM d AS d1 JOIN d AS d2 ON d1.b = d2.a; 也可以在其他CTE中引用CTE名称,从而使CTE能够基于其他CTE进行定义。...递归CTE常见于生成序列,层次或树状结构的遍历。...使用CTE,除了上述的好处之外,还会带来性能的提升。原因在于,如果使用派生表进行多次参照,将会多次物化相同的表。更多的空间,更多的时间,更长的锁等等会引起性能问题,类似于视图引用。
在数据库管理中,处理具有层次结构的数据一直是一项常见任务。MySQL的递归查询功能通过公用表表达式(CTE)为处理这类数据提供了便捷的方式。...语法解释 在MySQL中,递归查询的基本语法结构如下所示: WITH RECURSIVE cte_name AS ( -- 初始查询(第一次迭代) SELECT initial_query...案例演示 下面通过一个实际案例来展示如何在MySQL中利用递归查询处理组织结构数据。假设我们有一个名为employees的表,包含员工的id、姓名和直接上级的id。...MySQL5.7中的实现 在 MySQL 5.7 中,递归查询不支持使用公用表表达式(CTE),而是通过使用用户定义变量(User-Defined Variables)和自连接(Self Join...递归查询在实际应用中还能快速准确地分析和查找复杂层级数据关系,提升数据处理效率和准确性。 希望这篇文章能帮助您了解MySQL中的递归查询,以及如何利用这一功能处理层次结构数据。
接着我将讨论使用 CTE 相对于使用传统的 T-SQL 构造的优势,如派生表、视图和自定义过程。在本期专栏中,我将给出示例并解释它们的使用方法和适用情况。...要创建派生表,在由括号包围的 FROM 子句中移动 SELECT 语句即可。接着就能像表或视图一样查询或者联接它。图 2 中的代码解决的查询与图 1 所解决的相同,但使用的是派生表而不是视图。...尽管只能在派生表所在的语句中访问它们,但是,表通常使查询变得更难以阅读和维护。如果想要在同一个批处理中多次使用派生表,此问题会变得更加严重,因为随后必须复制和粘贴派生表才能重复使用它。...的结构 现在我将用一个简单的 CTE 为例来演示如何构造 CTE。...对随后销售机构层次结构中的每一后续层次,其 SalesLevel 都以此方式递增。
在最近的活字格项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式显然是不能满足要求...举例:有如下的部门表 ? 以及员工表 ? 如果想查询所有西北区的员工(包含西北、西安、兰州),如下图所示: ? 如何用CTE的方式实现呢? Talk is cheap....(Common Table Expression)为“公用表变量”而不是“公用表达式”,因为从行为和使用场景上讲,CTE更多的时候是产生(分迭代或者不迭代)结果集,供其后的语句使用(查询、插入、删除或更新...),如上述的例子就是一个典型的利用迭代遍历树形结构数据。...CTE的优点: 递归的特点使得原本需要使用临时表、存储过程才能完成的逻辑,通过SQL就可以完成,尤其针对一些树或者是图的数据模型 因为是会话内的临时结果集,不需要去显示的声明或销毁 改写后的SQL语句可读性提高
下面是创建CTE的语法结构: 1: WITH cte_name(column name list) 2: AS 3: ( 4: query 5: ) E.G....下面介绍几个典型的运用: 1、将复杂的Aggregate置于CTE中,将复杂的问题分解为多个步骤。...3、用于具有层次结构记录的递归查询 比如一个公司的员工体系就是一个包含上下级关系的具有层次化的树形结构。...假设我们有如下一个EMPLOYEE表,通过REPORT_TO体现每个员工的上下级关系(假设Empoyee_Name具有唯一性)。 ? 我们现在的需求是:列出员工A的所有下级。...为了实现这样的一个功能,我们需要以一种特殊的结构来创建CTE: 1: WITH CTE_EMPLOYEE(EMPLOYEE_ID, EMPLOYEE_NAME,REPORT_TO) 2: AS
在GAM页中,如果某个位值为0,则表示它所对应的区已经分配给了某个对象使用,值为1时表示这个区是空闲的。...不过它的位图映射关系正好是相反的:在GAM中设置为1的,在SGAM中设置为0——用于代表一个空闲的区。...在必须使用临时表的情况下,可以参照一下预防措施: 使用临时表(create table #Temp)而不是使用表变量(Declare @table table),这样做的原因是可以在临时表上使用索引。...那么,采用什么办法避免使用临时表和表变量呢? CTE表达式(Common Table Expression, CTE) 子查询 在数据库架构中创建物理表,而不是在历史数据库中创建临时表。...选择/改善Union : · 使用Case When 子句代替,它们可以做聚合和详细的查询 · 使用动态查询:用强大的sp_executesq来节省每次运行查询执行计划,节省时间消耗。
递归成员是一个引用了CTE名称的查询,对CTE名称的引用表示查询在一个执行序列中逻辑上的“前一个结果集”,第一次调用递归成员时,它表示的就是定位点成员的查询结果,之后调用递归时,引用CTE则代表前一次调用所返回的结果集...在返回的查询结果上,两个成员必须保持一直(列的属性); 例如: 定位点成员对HR.Employees表中empid=2的结果进行查询,这个查询只执行一次; 递归成员则对CTE(前一次查询的结果集)和Employees...case表达式,如果事先不知道要扩展的值,而且希望从数据中查询出这些值,就得使用动态SQL来构建查询字符串,并进行查询。...,在来源表中没有行可以与之匹配的时候,和when not matched 区别在于:when not matched表示目标表中没有,而源表中有;when not matched by source 表示目标表中有...,但是源表中没有。
本节讨论的相关内容包括:视图、派生表、CTE、内联表值函数 场景:如果要查询一组数据(例如聚合数据,也就是几个表聚合在一起的数据),这些数据并未在数据库中以表的形式存在。...1、视图:通常用来分解大型的查询。使查询更容易,无需在临时表中复制或者存储数据。视图存于数据库,适用于所有批处理的数据库对象。不适用于单个T-SQL的批处理。...不允许使用order by(除非和top一起使用) 派生表不能使相关的(where 外部查询表.a=内部查询表.a)[除了apply] 3、CTE 可定义多个 with c1 as () c2 as (...) 不可嵌套,但为了实现和嵌套派生表相同的效果,可以在c2中使用c1 多引用优势,在接下来的查询中,多次引用cte,替代派生表的重复定义,多次查询方案。...好处是写法简单,但是实质,仍然是重新组织查询,直接访问底层的对象。所以如果数据表中包含大量的行,此时应该考虑使用临时表或表变量,减少访问基础表的次数为一次。
1.创建标量函数 即返回一个单个值的函数 定义如下 IF OBJECT_ID (N'dbo.ufnGetInventoryStock', N'FN') IS NOT NULL DROP FUNCTION...创建表值函数 即返回的是一个列表集合 定义如下 IF OBJECT_ID (N'Sales.ufn_SalesByStore', N'IF') IS NOT NULL DROP FUNCTION...SELECT * FROM Sales.ufn_SalesByStore (602); 表值函数示例2: 定义如下 IF OBJECT_ID (N'dbo.ufn_FindReports', N'TF...nvarchar(50) NOT NULL, RecursionLevel int NOT NULL ) --Returns a result set that lists all the employees...e.BusinessEntityID, e.OrganizationNode, p.FirstName, p.LastName, e.JobTitle, 0 -- Get the initial list of Employees
递归CTE是引用自己的CTE,就像Python中的递归函数一样。递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...它们都用来比较两个查询/表之间的行。所说,这两个人之间存在微妙的细微差别。 首先,除了过滤删除重复并返回不同的行与不在中的不同行。...同样,除了在查询/表中相同数量的列,其中不再与每个查询/表比较单个列。 6.自联结 一个SQL表自行连接自己。你可能会认为没有用,但你会感到惊讶的是这是多么常见。...在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。在这种情况下,可能需要自我连接来解决独特的问题。 让我们来看看一个例子。...在SQL中,您可以使用几种方式将“等级”分配给行,我们将使用示例进行探索。
作者:Guilhem Bichot 译:徐轶韬 在MySQL 8.0.1中,我们引入了对递归通用表表达式(CTE)的支持。...今天,我想提出一个解决方案,当使用递归CTE编写查询时,几乎每个人都会遇到:发生无限递归时,如何调试? 考虑以下示例查询,该查询生成从1到5的整数: ? 此查询正常执行,这是它的结果: ?...尽管这只是一个小示例,但CTE可以永远递归还有其他原因:查询可能非常复杂,我们犯了逻辑错误;或数据集可能是格式错误的层次结构,并且包含意外的循环。...但是在进行此类修改之前,您可能更希望先了解循环是如何形成的,涉及哪些表、列……。 为此,MySQL可以做什么来帮助我们调试问题? 从版本8.0.19开始,我使它允许任何递归CTE包含LIMIT子句。...在本文的结尾,虽然LIMIT-in-CTE可能不会改变SQL 的面貌,但我相信它几乎可以为在MySQL中操作递归CTE的每个人节省时间,这是一件非常好的事情! 一如既往,感谢您选择MySQL!
如果o1表中某行的订单ID和子查询返回的订单ID匹配,那么o1中的这个订单ID就是当前客户的最大订单ID,在这种情况下,查询便会返回o1表中的这个行。 ...举个栗子,下面的代码定义了一个名为USACusts的CTE,它的内部查询返回所有来自美国的客户,外部查询则选择了CTE中的所有行: WITH USACusts AS ( select custid...3.3 视图 派生表和CTE都是不可重用的,而视图和内联表值函数却是可重用,它们的定义存储在一个数据库对象中,一旦创建,这些对象就是数据库的永久部分。...当需要使用表表达式,而且不计划重用它们的定义时,可以使用派生表或CTE,与派生表相比,CTE更加模块化,更容易维护。 当需要定义可重用的表表达式时,可以使用视图或内联表值函数。...如果不需要支持输入,则使用视图;反之,则使用内联表值函数。 四、集合运算 4.1 UNION 并集运算 ? 在T-SQL中。UNION集合运算可以将两个输入查询的结果组合成一个结果集。
递归 CTE 是引用自己的 CTE,就像 Python 中的递归函数一样。递归 CTE 尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。...递归 CTE 有 3 个部分: 锚构件:返回 CTE 的基本结果的初始查询 递归成员:引用 CTE 的递归查询。...首先,除了过滤删除重复并返回不同的行与不在中的不同行。 同样,除了在查询 / 表中相同数量的列,其中不再与每个查询 / 表比较单个列。推荐:Java 面试练题宝典 ### 6....自联结 一个 SQL 表自行连接自己。你可能会认为没有用,但你会感到惊讶的是这是多么常见。在许多现实生活中,数据存储在一个大型表中而不是许多较小的表中。...在 SQL 中,您可以使用几种方式将 “等级” 分配给行,我们将使用示例进行探索。
在上一篇文章中,我们探讨了 MySQL 的查询语句。今天,我们将继续深入数据库的世界,聚焦于 PostgreSQL 的查询语句。 导语 大家好!我是猫头虎博主。...摘要 在这篇博客里,我们将从基础的 SELECT 语句开始,然后逐渐过渡到更复杂的查询,如 JOIN 操作,分组与聚合,甚至窗口函数和 CTE(公共表表达式)。...SELECT 语句 基础查询 最基础的查询语句如下: SELECT column1, column2 FROM table_name; 例如,从 employees 表中选取 name 和 salary...: SELECT name, salary FROM employees; 排序与筛选 你也可以使用 WHERE 和 ORDER BY 对数据进行筛选和排序。...希望这篇文章能帮助你更高效地使用 PostgreSQL。 如果你觉得这篇文章有用,请不要忘记点赞和分享! 感谢大家的支持,猫头虎博主,下次见! 原创声明 ======= · 原创作者: 猫头虎
领取专属 10元无门槛券
手把手带您无忧上云