2024年10月sql语句的各种关键字解析过程的详细总结方法(sql关键字大全)

 更新时间:2024-10-12

  ⑴sql语句的各种关键字解析过程的详细总结方法(sql关键字大全)

  ⑵本文主要介绍sql语句各种关键字解析过程的详细总结方法(sql关键字百科),下面一起看看sql语句各种关键字解析过程的详细总结方法(sql关键字百科)相关资讯。

  ⑶由于最近需要研究sql查询的性能,我们研究了SQL语句的解决方案。在园里,我们写了很多相关的文章,各有侧重。本文详细介绍了一条SQL语句每个关键字的逐步分析过程,欢迎大家互相学习,以及SQL语句的解析顺序。简单的SQL语句按以下顺序进行分析:之后的表。来自身份数据源的语句查询。以及一些子句,比如(-j)笛卡尔积,(-j)过滤,(-j)添加外部列。应用对象后,虚拟表VT从进程中生成。(-j)由该步骤占据的笛卡尔积(交叉连接)生成两个相关表和一个虚拟表vt-j。(-j)过滤基于虚拟表vt-j,过滤所有满足谓词条件的列,生成虚拟表vt-j。(-j)添加一个外部行。如果使用外部连接,它将被添加到不满足上表中条件的列vt-j中,虚拟表vt-j将生成一个外部行。。VT过程中由过滤器生成的临时表,以及WHERE子句中的列入到VT表中。项。组和列组将根据VT生成一个表组。生成此表。项。在该表中,有不同的过滤器组,并且术语满足加入VT表的条件。第五条。选择要处理的元素会在SELECT子句中生成一个VT表。(-)通过计算的表达式和vt-SELECT子句中的表达式的计算(-)重复vt-中的列并对其进行约简以产生vt-的完全不同的外观(-)过滤掉合格列的ORDERBY子句定义的结果以产生vt-表。通过vt-的形式和分类,根据订单的条件子句的结果,从表中导出VC的订单表。客户和订单的例子首先,创建一个客户表并插入以下数据:客户号Sidi,Madrid,frndo,Madrid,krlos,Madrid,mrphs,Xi;创建一个订单表并插入以下数据:订单号、客户号、frndo、frndo、krlos、krlos、krlos和mrphs无效。如果我们要查询从马德里订购少于的客户并显示他们的订单号,订单将按从小到大排序。复制代码代码如下:选择c.customerid,count(o.orderid)作为numorders,从客户到C.Left外部连接dbo。订单是O在c.customerid=o在c.city=马德里。该组有一个计数(o.OrderID)lt;throughc.customerid.numorders的查询结果如下:客户号numorderszeroFRNdoII接下来,我们将详细介绍SQL如何计算结果:from子句from子句标识要查询的表。如果指定了表操作,将从左到右进行处理。基于一个或两个表的每个表的操作都会返回一个输出表,左表的输出就是下一个表的操作输入的结果。比如crosstab(-j)笛卡尔积,(-j)filter,从外部列添加的(-j)的相关操作。句子生成虚拟表VT。步骤-j:执行笛卡尔积(交叉链接)笛卡尔积将列出两个表的行的所有可能组合,并生成表vt-j。如果左表M列和右表n列,然后vt-j表生成笛卡尔积,则mnn列。Stepbystep-j相当于执行:select*客户C的交联订单o结果如下:(共×列)C.CustomeridC.Cityo.OrderIDo.CustomeridMadrid-FRNdoMadrid-FRNdoMadrid-KrlosMadrid-KrlosMadrid-KrlosMadrid-FourKrlosMadrid-Madrid-Sixmrph。马德里七个无效frndo马德里一个frndofrndo马德里两个frndofrndo马德里三个krlosfrndo马德里四个krlosfrndo马德里五个krlosfrndo马德里六个mrphsfrndo马德里七个无效krlos马德里一个fr。ndoKrlosMadridIIFRNdoKrlosMadridIIIKrlosKrlosMadridIVKrlosKrlosMadridVKrlosMadridVIMRPhsKrlosMadridVIIInvalidmrphsZionIFRNdoMRPhsZionIIFRNdoMRPhsTinAnSankrlosmrphsZion四krlosmrphsZion五KrlosMRPhsZion六MRPhsZion七nullstep-j:过滤应用,(连接条件)过滤是SQL的三个过滤条件的首次实现。当过滤条件被应用于前一步骤中生成的虚拟表(vt-j)时,过滤条件被满足并被添加到虚拟表vt-j中tomeridc.cityo.orderido.customeridfrndoMadrid-frndofrndoMadridIIfrndokrlosMadridIIIkrloskrlosMadridIVkrloskrlosMadridVkrlosmrphsZionVImrphssstep-J:添加外部列的这一步只有在使用外部连接时才会发生。左(右或全部),您可以将一个或两个表标记为预订表。作为一个保留表,这意味着您想要的所有列都将返回到表中,即使表中的数据没有t满足添加mark以将保留表置于子句之外的筛选条件。left,在表的右侧添加rightouter是保留表,all-outer连接将这两个表标记为保留表。步骤-j根据虚拟表vt-j,加上餐桌上列不满足预定的条件,根本没有预定,也没有对应的列表,所以标记为空。在此过程中生成的vt-j虚拟表。c.Customeridc.Cityo.OrderIDo.CustomeridéMadridinvalid无效FRNdoMadrid-FRNdoFRNdoMadridIIFRNdokrlosMadridIIIkrloskrlosMadridIVkrloskrlosMadridVkrlosMRPHsZionSixmrph如果from子句中有多个表操作,SQL将从左到右进行处理,左边生成的临时表结果将作为右边表的输入表。步骤WHERE子句将过滤器应用于上一步中生成的临时表,并根据过滤条件生成临时表VT。注意:因为数据没有分组,所以您可以不要使用聚合运算。例如,你可以不要使用OrderDate=max这样的句子。此外,你可以不要使用在SELECT子句中创建的变量的别名,因为SELECT子句尚未处理。例如,你可以不要写下面的句子:选择年份(order)作为orderyear。订购年份>年。通过应用这个过滤器,由c.city=马德里如下:c.Customeridc.Cityo.OrderIDo.Customerid无效frndoMadrid-frndofrndoMadridIIfrndokrlos马德里IIIkrloskrlos。马德里四krloskrlos马德里五krlos这种情况下需要使用c.customerid=o。在此步骤中,customerid筛选器中的子句“没有订单的客户”被过滤掉,但在步骤-j中,它重新加入外部列。但是,因为您只想返回来自马德里的客户,所以在筛选的城市中需要WHERE子句(inc.city=Madrid)。如果将它放在筛选器上,不属于马德里的客户将被添加到外部列中。这里和地方的区别需要在这里说明。主要区别是在滤镜前加了外列,哪里是岗位。如果该列被过滤掉,它将增加到-j。;不需要添加外部列,两个过滤器是相同的。第三步GROUPBY子句该子句将上一步数据生成的临时表分组,每一行只分成一组,生成虚拟表VT。VT表包含VT表中的所有数据和组标识符。这是生成的临时表VT如下:groupc.Customeridc.Customeridc.Cityo.OrderIDo.Customerid在马德里无效。无效frndofrndoMadrid-frndofrndoMadridIIfrndokrlosMadridIIIkrlos。KrosKrosMadridfourKrosKrosMadridfivekrlosSQL最后返回结果,每个包必须返回一行(除非被过滤掉)。因此,当一个组使用一条SQL语句时,该组后面的处理子句如selection和HAVING子句只能用于该组,该组后面的列必须使用聚合函数(如maximum、minimum、count、AVG等。)来保证每组只返回。步骤HAVING子句HAVING子句过滤上一步生成的临时表和只作用于后一组的数据,满足将该组添加到虚拟表VT的条件。应用此过滤器时:复制代码如下:拥有COUNT(O.orderid)后,生成的VT表内容如下:groupc.Customeridc.Customeridc.Cityo.orderido.Customerid无效。无效frndofrndoMadrid-frndofrndoMadridIIfrndo有一点需要注意的是,它使用了count(O.OrderID)而不是quantity(*)。因为外部列被添加到查询中,所以计数方忽略空列,这将导致意外的结果。第五步select子句虽然出现在SQL语句之前,但是选择是在第五步处理的,表的SELECT子句的返回最终会返回给调用者。这个子句有三个阶段:(-)计算表达式,和(-)。不同处理,(-)顶部过滤应用。步骤-中的计算表达式select子句中的表达式可以返回或操作上一步中返回的表的基本列。如果SQL语句是一个聚合查询,在个步骤之后,您只能使用列组,并且必须对表中不是组的列使用聚合操作。没有一个基本列必须是别名,如year,orderyear。注意:不能在SELECT子句中使用上一步中创建的别名,甚至不能选择该子句。原因是很多SQL操作同时操作(一个操作),不再引入并发操作。因此,在别名中创建的SELECT子句中只能使用以下术语,如order。例如,选择年份(订单)作为orderyear。订购年度。在这个例子中,复制代码如下:Selectc.customerid,Count(o.orderid)asnumorders,结果将是一个虚拟表VT-:c.CustomeridnumordersFifssazeroFRNdo两步-DISTINCT子句:如果使用的SQL语句不同,SQL将删除重复的列,生成虚拟表vt-。-:应用上述步骤顶部的选项是函数的T-SQL显示显示多少行。基于顺序在ORDERBY子句中定义了对指定数量的列的查询。这个过程产生一个虚拟表vt-。如上所述,这一步取决于序列顺序来确定应该首先显示哪些列。如果你不如果不使用join子句指定结果的顺序,则每个返回的结果都可能不一致。在我们的例子中,步骤-稍微有点,因为我们没有不要使用热门关键词。步骤:在该步骤中,对上一步中Orderby子句返回的虚拟表进行排序,并根据ORDERBY子句中指定的顺序返回游标VC。ORDERBY子句也是惟一的,可以使用select子句创建别名。注意:这一步与以往不同,这一步的结果是指针,而不是基于集合论的table.sql。一组不确定行的顺序只是一个逻辑组的成员,所以成员的顺序并不重要。带有ORDERBY子句的SQL返回一个对象,组织的每个部门根据具体的sequence.ansi都需要这样一个对象作为游标,了解这一点对你理解SQL很重要。以上步骤如图所示。本书主要内容参考微软SQLServer:T-SQL查询中的内容。如果你想了解更多关于SQL查询的知识,可以找这本书。你看,我有英文原版PDF,你想找我就找我。

您可能感兴趣的文章:

相关文章