本文主要介绍sql语句各种关键字解析过程的详细总结方法(sql关键字百科),下面一起看看sql语句各种关键字解析过程的详细总结方法(sql关键字百科)相关资讯。
由于最近需要研究sql查询的性能,我们研究了sql语句的解决方案。在园里,我们写了很多相关的文章,各有侧重。本文详细介绍了一条sql语句每个关键字的逐步分析过程,欢迎大家互相学习,以及sql语句的解析顺序。简单的sql语句按以下顺序进行分析:1之后的表。来自身份数据源的语句查询。以及一些子句,比如(1-j1)笛卡尔积,(1-j2)过滤,(1-j3)添加外部列。应用对象后,虚拟表vt1从进程中生成。(1-j1)由该步骤占据的笛卡尔积(交叉连接)生成两个相关表和一个虚拟表vt1-j1。(1-j2)过滤基于虚拟表vt1-j1,过滤所有满足谓词条件的列,生成虚拟表vt1-j2。(1-j3)添加一个外部行。如果使用外部连接,它将被添加到不满足上表中条件的列vt1-j2中,虚拟表vt1-j3将生成一个外部行。2。vt1过程中由过滤器生成的临时表,以及where子句中的列入到vt2表中。3项。组和列组将根据vt2生成一个表组。生成此表。4项。在该表中,有不同的过滤器组,并且术语满足加入vt4表的条件。第五条。选择要处理的元素会在select子句中生成一个vt5表。(5-1)通过计算的表达式和vt5-1 select子句中的表达式的计算(5-2)重复vt5-1中的列并对其进行约简以产生vt5-2的完全不同的外观(5-3)过滤掉合格列的orderby子句定义的结果以产生vt5-3表。通过vt5-3的形式和分类,根据订单的条件子句的结果,从表中导出vc6的订单表。客户和订单的例子首先,创建一个客户表并插入以下数据:客户号sidi,madrid,frndo,madrid,krlos,madrid,mrphs,xi ;创建一个订单表并插入以下数据:订单号、客户号、frndo、frndo、krlos、krlos、krlos和mrphs无效。如果我们要查询从马德里订购少于3的客户并显示他们的订单号,订单将按从小到大排序。复制代码代码如下:选择c.customerid,count (o.orderid)作为numorders,从客户到c. left外部连接dbo。订单是o在c.customerid = o在c.city = 马德里。该组有一个计数(o . orderid) lt;3 through c . customerid . num orders的查询结果如下:客户号num orders \zero frn do ii接下来,我们将详细介绍sql如何计算结果:from子句from子句标识要查询的表。如果指定了表操作,将从左到右进行处理。基于一个或两个表的每个表的操作都会返回一个输出表,左表的输出就是下一个表的操作输入的结果。比如crosstab (1-j1)笛卡尔积,(1-j2) filter,从外部列添加的(1-j3)的相关操作。句子生成虚拟表vt1。步骤1-j1:执行笛卡尔积(交叉链接)笛卡尔积将列出两个表的行的所有可能组合,并生成表vt1-j1。如果左表m列和右表n列,然后vt1-j1表生成笛卡尔积,则m n n列。step by step 1-j1相当于执行:select *客户c的交联订单o结果如下: (共4×7列)c . customerid c . city o . orderid o . customerid madrid-frn do madrid-frn do madrid-krlos madrid-krlos madrid-krlos madrid-four krlos madrid-madrid-six mrph。马德里七个无效frndo马德里一个frndo frndo马德里两个frndo frndo马德里三个krlos frndo马德里四个krlos frndo马德里五个krlos frndo马德里六个mrphs frndo马德里七个无效krlos马德里一个fr。ndo krlos madrid ii frn do krlos madrid iii krlos krlos madrid iv krlos krlos madrid v krlos madrid vi mrp hs krlos madrid vii invalid mrphs zion i frn do mrp hs zion ii frn do mrp hs tin an san krlos mrphs zion四krlos mrphs zion五krlos mrp hs zion六mrp hs zion七nullstep 1-j2:过滤应用,(连接条件)过滤是sql的三个过滤条件的首次实现。当过滤条件被应用于前一步骤中生成的虚拟表(vt1-j1)时,过滤条件被满足并被添加到虚拟表vt1-j2中to merid c . city o . orderid o . customerid fr ndo madrid-fr ndo fr ndo madrid ii fr ndo krlos madrid iii krlos krlos madrid iv krlos krlos madrid v krlos mrphs zion vi mrphssstep 1-j3:添加外部列的这一步只有在使用外部连接时才会发生。左(右或全部),您可以将一个或两个表标记为预订表。作为一个保留表,这意味着您想要的所有列都将返回到表中,即使表中的数据没有 t满足添加mark以将保留表置于子句之外的筛选条件。left,在表的右侧添加rightouter是保留表,all-outer连接将这两个表标记为保留表。步骤1-j3根据虚拟表vt1-j2,加上餐桌上列不满足预定的条件,根本没有预定,也没有对应的列表,所以标记为空。在此过程中生成的vt1-j3虚拟表。c . customerid c . city o . orderid o . customeridémadrid invalid无效frn do madrid-frn do frn do madrid ii frn do krlos madrid iii krlos krlos madrid iv krlos krlos madrid v krlos mrp hs zion six mrph如果from子句中有多个表操作,sql将从左到右进行处理,左边生成的临时表结果将作为右边表的输入表。步骤where子句将过滤器应用于上一步中生成的临时表,并根据过滤条件生成临时表vt2。注意:因为数据没有分组,所以您可以 不要使用聚合运算。例如,你可以 不要使用orderdate = max这样的句子。此外,你可以 不要使用在select子句中创建的变量的别名,因为select子句尚未处理。例如,你可以 不要写下面的句子:选择年份(order)作为orderyear。订购年份> 2008年。通过应用这个过滤器,由c.city = 马德里如下:c . customerid c . city o . orderid o . customerid无效fr ndo madrid-fr ndo fr ndo madrid ii fr ndo krlos马德里iii krlos krlos。马德里四krlos krlos马德里五krlos这种情况下需要使用c.customerid = o。在此步骤中,customerid筛选器中的子句“没有订单的客户”被过滤掉,但在步骤1-j3中,它重新加入外部列。但是,因为您只想返回来自马德里的客户,所以在筛选的城市中需要where子句(in c.city = madrid)。如果将它放在筛选器上,不属于马德里的客户将被添加到外部列中。这里和地方的区别需要在这里说明。主要区别是在滤镜前加了外列,哪里是岗位。如果该列被过滤掉,它将增加到1-j3。;不需要添加外部列,两个过滤器是相同的。第三步group by子句该子句将上一步数据生成的临时表分组,每一行只分成一组,生成虚拟表vt3。vt3表包含vt2表中的所有数据和组标识符。这是生成的临时表vt3如下:group c . customerid c . customerid c . city o . orderid o . customerid在马德里无效。无效fr ndo fr ndo madrid-fr ndo fr ndo madrid ii fr ndo krlos madrid iii krlos。kros kros madrid four kros kros madrid five krlos sql最后返回结果,每个包必须返回一行(除非被过滤掉)。因此,当一个组使用一条sql语句时,该组后面的处理子句如selection和having子句只能用于该组,该组后面的列必须使用聚合函数(如maximum、minimum、count、avg等。)来保证每组只返回。步骤4 having子句having子句过滤上一步生成的临时表和只作用于后一组的数据,满足将该组添加到虚拟表vt4的条件。应用此过滤器时:复制代码如下:拥有count (o.orderid) 3后,生成的vt4表内容如下:group c . customerid c . customerid c . city o . orderid o . customerid无效。无效fr ndo fr ndo madrid-fr ndo fr ndo madrid ii fr ndo有一点需要注意的是,它使用了count (o. orderid)而不是quantity (*)。因为外部列被添加到查询中,所以计数方忽略空列,这将导致意外的结果。第五步select子句虽然出现在sql语句之前,但是选择是在第五步处理的,表的select子句的返回最终会返回给调用者。这个子句有三个阶段:(5-1)计算表达式,和(5-2)。不同处理,(5-3)顶部过滤应用。步骤5-1中的计算表达式select子句中的表达式可以返回或操作上一步中返回的表的基本列。如果sql语句是一个聚合查询,在3个步骤之后,您只能使用列组,并且必须对表中不是组的列使用聚合操作。没有一个基本列必须是别名,如year,orderyear。注意:不能在select子句中使用上一步中创建的别名,甚至不能选择该子句。原因是很多sql操作同时操作(一个操作),不再引入并发操作。因此,在别名中创建的select子句中只能使用以下术语,如order。例如,选择年份(订单)作为orderyear。订购年度。在这个例子中,复制代码如下:select c.customerid,count (o.orderid) as numorders,结果将是一个虚拟表vt5-1:c . customerid num orders fifssa zero frn do两步5-2 distinct子句:如果使用的sql语句不同,sql将删除重复的列,生成虚拟表vt5-2。5-3:应用上述步骤顶部的选项是函数的t-sql显示显示多少行。基于顺序在orderby子句中定义了对指定数量的列的查询。这个过程产生一个虚拟表vt5-3。如上所述,这一步取决于序列顺序来确定应该首先显示哪些列。如果你不 如果不使用join子句指定结果的顺序,则每个返回的结果都可能不一致。在我们的例子中,步骤5-3稍微有点,因为我们没有 不要使用热门关键词。步骤6:在该步骤中,对上一步中order by子句返回的虚拟表进行排序,并根据order by子句中指定的顺序返回游标vc6。orderby子句也是惟一的,可以使用select子句创建别名。注意:这一步与以往不同,这一步的结果是指针,而不是基于集合论的table.sql。一组不确定行的顺序只是一个逻辑组的成员,所以成员的顺序并不重要。带有orderby子句的sql返回一个对象,组织的每个部门根据具体的sequence.ansi都需要这样一个对象作为游标,了解这一点对你理解sql很重要。以上步骤如图所示。本书主要内容参考微软sql server 2008: t-sql查询中的内容。如果你想了解更多关于sql查询的知识,可以找这本书。你看,我有英文原版pdf,你想找我就找我。
了解更多sql语句各种关键字解析过程的详细总结方法(sql关键字百科)相关内容请关注本站点。
外接硬盘会不会损坏硬盘,硬盘过安检会不会损坏
用手机登录163邮箱登录口(手机登录163邮箱入口)
阿拉德之怒ios下载不了怎么办(阿拉德之怒ios下载不了吗)
Wp81怎么安装诺基亚专属软件,诺基亚手机怎么安装软件啊
华为备份图标不见了怎么办,华为应用市场桌面上图标没了
sql语句的各种关键字解析过程的详细总结方法(sql关键字大全)
华为6xwifi怎么样,华为6x好不好网速快不快和g9比呢
高级骂人的网络用语,2022流行的骂人网络用语
摔炮在淘宝上叫什么来着(摔炮在淘宝上叫什么店铺)
去哪里找m2固态硬盘螺丝,m2固态硬盘不上螺丝行不行
如何用手机运行电脑系统(手机怎么运行电脑软件)
win7怎么进入u盘启动系统,win7怎么能到U盘里面启动
电脑主板有哪些,电脑有几种主板呢
换一个一体机电脑屏幕多少钱,电脑屏幕受撞击后花屏了
手机系统最新排名(手机系统排行榜2021)
u盘安装找不到固态硬盘,笔记本电脑u盘装系统找不到固态硬盘
iphone5买到翻新机怎么办,在实体店买到翻新机怎么办
宽带不能上网了是什么原因,宽带指示灯也不亮(宽带不能上网了是什么原因,宽带指示灯正常)
电脑开机后出现英文怎么解决,电脑长时间不用开机后出现英文怎么办?
windows10弹出用户账户控制(window10老是跳出来用户账户控制)