仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 638|回复: 7
打印 上一主题 下一主题

[学习教程] MYSQL网站制作之SQLServer中SELECT语句的实行按次

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:15:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL的支持者们却认为,MySQL所保留的功能都是精华,并且是你部署、MySQL学习教程配置和维护这个数据库所必不可少的一些功能。明天在写一条语句的时分,在查询剖析器里边实行
要用10s,换用别的一种写法只用少于1s的工夫,同事说是由于Sql句语实行按次的缘故原由。之前看过一点相
关的书,有一点印象,到网上找了材料,进修下。
逻辑查询处置步骤
复制代码代码以下:
(8)SELECT(9)DISTINCT
(11)<TOP_specification><select_list>
(1)FROM<left_table>
(3) <join_type>JOIN<right_table>
(2)   ON<join_condition>
(4)WHERE<where_condition>
(5)GROUPBY<group_by_list>
(6)WITH{CUBEROLLUP}
(7)HAVING<having_condition>
(10)ORDERBY<order_by_list>

每一个步骤发生一个假造表,该假造表被用作下一个步骤的输出。只要最初一步天生的表前往给挪用者。如
果没有某一子句,则跳过响应的步骤。
1.FROM:对FROM子句中的前两个表实行笛卡尔积,天生假造表VT1。
2.ON:对VT1使用ON选择器。只要那些使<join_condition>为真的行才被拔出VT2。
3.OUTER(JOIN):假如指定了OUTERJOIN,保存表中未找到婚配的即将作为内部行增加到VT2,天生VT3。
假如FROM子句包括两个以上的表,则对上一个连接天生的了局表和下一个表反复实行步骤1到步骤3,直到
处置完一切的表为止。
4.对VT3使用WHERE选择器。只要使<where_condition>为TRUE的行才被拔出VT4。
5.GROUPBY:按GROUPBY子句中的列列表对VT4中的行分组,天生VT5。
6.CUBEROLLUP:把超组拔出VT5,天生VT6。
7.HAVING:对VT6使用HAVING选择器。只要使<having_condition>为TRUE的组才会被拔出VT7。
8.SELECT:处置SELECT列表,发生VT8。
9.DISTINCT:将反复的行从VT8中移除,发生VT9。
10.ORDERBY:将VT9中的行按ORDERBY子句中的列列表排序,天生一个有表(VC10)。
11.TOP:从VC10的入手下手处选择指定命量或比例的行,天生表VT11,并前往给挪用者。
以下是别的网友的增补:
仿佛自已在誊写SQL语句时因为不分明各个关头字的实行按次,常常构造的SQL语句短少很好的逻辑,凭感到"拼集"(欠好意义,假如您的SQL语句也常常"拼集",那您是否是得好好检查一下呢?,呵呵).
如许做的确是爽了本人,可苦了呆板,服务器还必要在我们的乱七八糟的SQL语句中寻觅它下一句必要实行的关头字在那里.
效力嘛,因为我们的感到神经对秒以下的变更其实不敏感,临时就以为自已写的SQL按次可有可无,"归正没甚么变更!",呵呵.实在服务器对每句SQL剖析工夫城市有具体纪录的,人人能够看一下自已按习气写的SQL和按尺度按次写的SQL剖析工夫不同有多年夜.
因而,倡议人人在平常事情中SQL语句按尺度按次写,一是专业,二是有用,呵呵,不外我以为最次要的是内心感到恬逸.
尺度的SQL的剖析按次为:
(1).FROM子句,组装来自分歧数据源的数据
(2).WHERE子句,基于指定的前提对纪录举行选择
(3).GROUPBY子句,将数据分别为多个分组
(4).利用聚合函数举行盘算
(5).利用HAVING子句选择分组
(6).盘算一切的表达式
(7).利用ORDERBY对了局集举行排序
举例申明:在先生成就表中(暂记为tb_Grade),把"考生姓名"内容不为空的纪录依照"考生姓名"分组,而且选择分组了局,选出"总成就"年夜于600分的.
尺度按次的SQL语句为:
select考生姓名,max(总成就)asmax总成就
fromtb_Grade
where考生姓名isnotnull
groupby考生姓名
havingmax(总成就)>600
orderbymax总成就
在下面的示例中SQL语句的实行按次以下:
(1).起首实行FROM子句,从tb_Grade表组装数据源的数据
(2).实行WHERE子句,选择tb_Grade表中一切数据不为NULL的数据
(3).实行GROUPBY子句,把tb_Grade表按"先生姓名"列举行分组
(4).盘算max()会萃函数,按"总成就"求出总成就中最年夜的一些数值
(5).实行HAVING子句,选择课程的总成就年夜于600分的.
(7).实行ORDERBY子句,把最初的了局按"Max成就"举行排序.
好了,看了这些以后,我信任人人都晓得了SQL中select语句的实行按次了吧!哈哈!对于现有业务,可以轻松移植到MySQL。当你需要替换掉老的硬件,当你需要削减历史遗留下的老系统的时候,选用MySQL对于财务部门来说更具吸引力。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 06:17:58 | 只看该作者
入门没那么困难,精通没那么容易
飘灵儿 该用户已被删除
板凳
发表于 2015-1-24 09:49:40 | 只看该作者
原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
老尸 该用户已被删除
地板
发表于 2015-2-1 05:23:16 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
蒙在股里 该用户已被删除
5#
发表于 2015-2-7 01:24:36 | 只看该作者
光写几个SQL实在叫无知。
admin 该用户已被删除
6#
发表于 2015-2-19 09:38:51 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-13 03:05:34 | 只看该作者
发几份SQL课件,以飨阅者
若天明 该用户已被删除
8#
发表于 2015-3-20 10:54:33 | 只看该作者
having子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having条件显示特定的组,也可以使用多个分组标准进行分组。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-6 03:58

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表