百度
360搜索
搜狗搜索

select语句执行顺序,sql查询语句的各个命令执行的标准顺序是什么?为什么?详细介绍

本文目录一览: select语句的各个子句的顺序是怎样的?

select语句的各个子句,按顺序有:
(1)from:从哪些表中筛选;
(2)where:从表中筛选的条件;
(3)group by:分组依据;
(4)having:在统计结果中再次筛选;
(5)order by:排序;
(6)limit:分页。
扩展资料
子查询是嵌套于SELECT、INSERT、UPDATE、DELETE等语句中的查询。按照子查询返回结果的数量,分为标量子查询和多值子查询;按照对外部查询的依赖性,分为独立子查询和相关子查询。
子查询出现在SELECT语句的结果列表中,那幺子查询应该是返回单一值;这种子查询往往可以用表的Join操作代替。
子查询用在WHERE子句的表达式中,可以返回单一值用于比较运算符(>、<、>=等等)之后;也可以返回多值且有ANY、SOME、ALL等关键字前缀用于比较运算符之后;还可以返回多值与关键字IN、EXISTS、NOT IN、NOT EXISTS连用。子查询可以嵌套子查询。

sql关键词执行先后顺序是什么

sql关键词执行的先后顺序是:首先执行from语句,where语句,group by语句,having语句最后是order by语句【推荐课程:MySQL教程】sql关键词执行顺序例:select m.* from(select t.*,rownum r from(select id,name,e.username,e.realname from departments d ,employees e where d.manager=e.username(+)order by id desc ) t where rownum<=? ) m where r>?select m.*(select t.*,t.rownum r from(select a,b,c,d from table1 order by a desc) t where rownum < = ? ) mwhere r > ?标准的 SQL 的解析顺序为(1)FROM 子句, 组装来自不同数据源的数据(2)WHERE 子句, 基于指定的条件对记录进行筛选(3)GROUP BY 子句, 将数据划分为多个分组(4)使用聚合函数进行计算(5)使用 HAVING 子句筛选分组(6)计算所有的表达式(7)使用 ORDER BY 对结果集进行排序例在学生成绩表中 (暂记为 tb_Grade), 把 "考生姓名"内容不为空的记录按照 "考生姓名" 分组, 并且筛选分组结果, 选出 "总成绩" 大于 600 分的SQL 语句为:select 考生姓名, max(总成绩) as max总成绩from tb_Gradewhere 考生姓名 is not nullgroup by 考生姓名having max(总成绩) > 600order by max总成绩在上面的示例中 SQL 语句的执行顺序如下:(1) 首先执行 FROM 子句, 从 tb_Grade 表组装数据源的数据(2)执行 WHERE 子句, 筛选 tb_Grade 表中所有数据不为 NULL 的数据(3) 执行 GROUP BY 子句, 把 tb_Grade 表按 "学生姓名" 列进行分组(4)计算 max() 聚集函数, 按 "总成绩" 求出总成绩中最大的一些数值(5) 执行 HAVING 子句, 筛选课程的总成绩大于 600 分的.(6) 执行 ORDER BY 子句, 把最后的结果按 "Max 成绩" 进行排序.总结:

SQL执行顺序

查询语句中select from where group by having order by的执行顺序

1.查询中用到的关键词主要包含六个,并且他们的顺序依次为?

select--from--where--group by--having--order by?

其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序?

与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行?

from--where--group by--having--select--order by,?

from:需要从哪个数据表检索数据?

where:过滤表中数据的条件?

group by:如何将上面过滤出的数据分组?

having:对上面已经分组的数据进行过滤的条件??

select:查看结果集中的哪个列,或列的计算结果?

order by :按照什么样的顺序来查看返回的数据

2.from后面的表关联,是自右向左解析的?

而where条件的解析顺序是自下而上的。?

也就是说,在写SQL文的时候,尽量把数据量大的表放在最右边来进行关联,?

而把能筛选出大量数据的条件放在where语句的最下面。

SQL Select语句完整的 执行顺序 【从DBMS使用者角度】:

1、from子句组装来自不同数据源的数据;

2、where子句基于指定的条件对记录行进行筛选;

3、group by子句将数据划分为多个分组;

4、使用聚集函数进行计算;

5、使用having子句筛选分组;

6、计算所有的表达式;

7、使用order by对结果集进行排序 。

from 子句--执行顺序为从后往前、从右到左

表名(最后面的那个表名为驱动表,执行顺序为从后往前, 所以数据量较少的表尽量放后)

oracle 的解析器按照从右到左的顺序处理,FROM 子句中的表名,FROM 子句中写在最后的表(基础表 driving

table)将被最先处理,即最后的表为驱动表,在FROM 子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3

个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指被其他表所引用的表

多表连接时,使用表的别名并把别名前缀于每个Column上。可以减少解析的时间并减少那些由Column 歧义引起的语法错误.

where子句--执行顺序为自下而上、从右到左

ORACLE 采用自下而上从右到左的顺序解析Where 子句,根据这个原理,表之间的连接必须写在其他Where 条件之前,?可以过滤掉最大数量记录的条件必须写在Where 子句的末尾。

group by--执行顺序从左往右分组

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。即在GROUP BY前使用WHERE来过虑,而尽量避免GROUP BY后再HAVING过滤。

having 子句----很耗资源,尽量少用

避免使用HAVING 子句,?HAVING 只会在检索出所有记录之后才对结果集进行过滤. 这个处理需要排序,总计等操作.

如果能通过Where 子句在GROUP BY前限制记录的数目,那就能减少这方面的开销.

(非oracle 中)on、where、having 这三个都可以加条件的子句中,on 是最先执行,where 次之,having 最后,因为on 是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,

where 也应该比having 快点的,因为它过滤数据后才进行sum,在两个表联接时才用on 的,所以在一个表的时候,就剩下where 跟having比较了。

在这单表查询统计的情况下,如果要过滤的条件没有涉及到要计算字段,那它们的结果是一样的,只是where 可以使用rushmore 技术,而having 就不能,在速度上后者要慢。

如果要涉及到计算的字段,就表示在没计算之前,这个字段的值是不确定的,where 的作用时间是在计算之前就完成的,而having 就是在计算后才起作用的,所以在这种情况下,两者的结果会不同。

在多表联接查询时,on 比where 更早起作用。系统首先根据各个表之间的联接条件,把多个表合成一个临时表后,再由where 进行过滤,然后再计算,计算完后再由having 进行过滤。

阅读更多 >>>  update sql语句用法,SQL里面update 的用法

由此可见,要想过滤条件起到正确的作用,首先要明白这个条件应该在什么时候起作用,然后再决定放在那里。

select子句--少用*号,尽量取字段名称 。

ORACLE 在解析的过程中, 会将依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 使用列名意味着将减少消耗时间。

sql 语句用大写的;因为 oracle 总是先解析 sql 语句,把小写的字母转换成大写的再执行

order by子句--执行顺序为从左到右排序,很耗资源

数据库中,select where group by having 执行顺序

1.查询中用到的关键词主要包含六个,并且他们的顺序依次为
select--from--where--group
by--having--order
by
其中select和from是必须的,其他关键词是可选的,这六个关键词的执行顺序
与sql语句的书写顺序并不是一样的,而是按照下面的顺序来执行
from--where--group
by--having--select--order
by,
from:需要从哪个数据表检索数据
where:过滤表中数据的条件
group
by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order
by
:按照什么样的顺序来查看返回的数据
2.from后面的表关联,是自右向左解析的
而where条件的解析顺序是自下而上的。
也就是说,在写SQL文的时候,尽量把数据量大的表放在最右边来进行关联,
而把能筛选出大量数据的条件放在where语句的最下面。
where
最先执行,然后按group
by分组,之后满足having条件的组被留下,执行select筛选。
Group
By

Having,
Where
,Order
by这些关键字是按照如下顺序进行执行的:Where,
Group
By,
Having,
Order
by。
一、使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。
二、数据分组(group
by
):
select
列a,聚合函数(聚合函数规范)
from
表明
where
过滤条件
group
by
列a
group
by
字句也和where条件语句结合在一起使用。当结合在一起时,where在前,group
by
在后。即先对select
xx
from
xx的记录集合用where进行筛选,然后再使用group
by
对筛选后的结果进行分组。
三、使用having字句对分组后的结果进行筛选,语法和where差不多:having
条件表达式
需要注意having和where的用法区别:
1.having只能用在group
by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
2.where肯定在group
by
之前,即也在having之前。
3.where后的条件表达式里不允许使用聚合函数,而having可以。
四、当一个查询语句同时出现了where,group
by,having,order
by的时候,执行顺序和编写顺序是:
1.执行where
xx对全表数据做筛选,返回第1个结果集。
2.针对第1个结果集使用group
by分组,返回第2个结果集。
3.针对第2个结果集中的每1组数据执行select
xx,有几组就执行几次,返回第3个结果集。
4.针对第3个结集执行having
xx进行筛选,返回第4个结果集。
5.针对第4个结果集排序。
拓展资料
当我们看到一个类似上述的包含了where,
group
by,
having,
order
by等关键字的SQL时,我们要首先要知道其执行顺序是怎样的,才能判断出其所表达的含义;
下面列出其执行顺序:
1.
根据where子句选择行;
2.
根据group
by
子句组合行;
3.
根据having子句筛选组;
4.
根据order
by子句中的分组函数的结果对组进行排序,order
by必须使用分组函数或者使用Group
by子句中指定的列;
下面看一个例子:
我们现在知道,其执行顺序如下:
1.基于Where
Rating>1
筛选出符合条件的行;
2.基于group
by
CategoryName
对筛选的结果进行分组;
3.为每个CategoryName组计算Count(*)
4.
基于having
CategoryName
like
'A%'留下符合条件的组
5.
根据order
by
的条件对剩下的行组进行排序,SQL中的count(*)也是分组函数。

sql语句执行顺序、

顺序如下:
8、SELECT (9)DISTINCT 10、

1、FROM [left_table]3、 JOIN 2、 ON 4、WHERE 5、GROUP BY 6、WITH 7、HAVING 9、ORDER BY SQL 不同于与其他编程语言的最明显特征是处理代码的顺序。在大数编程语言中,代码按编码顺序被处理,但是在SQL语言中,第一个被处理的子句是FROM子句,尽管SELECT语句第一个出现,但是几乎总是最后被处理。逻辑查询处理阶段简介1、FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT12、ON:对VT1应用ON筛选器。只有那些使为真的行才被插入VT2。3、OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到 VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。4、WHERE:对VT3应用WHERE筛选器。只有使为true的行才被插入VT4.5、GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.6、CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.7、HAVING:对VT6应用HAVING筛选器。只有使为true的组才会被插入VT7.8、SELECT:处理SELECT列表,产生VT8.9、DISTINCT:将重复的行从VT8中移除,产生VT9.10、ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).11、TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用者。SELECT查询语句中的各种子句之间有执行顺序吗 当然有了,会按照where的条件一个个筛选下来,所以我们经常把过滤性最强的条件放在最前面,比如按照 where 未删除的数据,某个类别的数据,某个日期的数据这样的顺序来先执行连接操作(JOIN)在执行where操作,在GROUP BY 在执行组函数,在执行HAVING,在执行ORDER BY.它是根据条件判来断执行功能的,它的判断条件是同一的,因判断所得值不同而执行不同的功能。严格说来,是有顺序的。但是,以每秒三十万公里的速度进行了判断,使人感觉不到有顺序的分别。符合条件值就进入;不符合条件值就过。一旦进入了子句内部了顺序分别的就明显了。sql执行顺序以及on和where的区别 :on 是作为表链接时间关联条件用 如 a表left join b表 on 关联条件, 如果on 后面的条件不成立,(1.)select语句的执行顺序Processing Order of the SELECT statementThe following steps show the processing order for a SELECT statement.1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBE or WITH ROLLUP7.HAVING8.SELECT9.DISTINCT10.ORDER BY11.TOP(5)SELECT DISTINCT(7)TOP() (1)FROM JOIN ON (2)WHERE (3)GROUP BY (4)HAVING (6)ORDER BY T-SQL在查询各个阶级分别干了什么:(1)FROM 阶段FROM阶段标识出查询的来源表,并处理表运算符。在涉及到联接运算的查询中(各种join),主要有以下几个步骤:a.求笛卡尔积。不论是什么类型的联接运算,首先都是执行交叉连接(cross join),求笛卡儿积,生成虚拟表VT1-J1。b.ON筛选器。这个阶段对上个步骤生成的VT1-J1进行筛选,根据ON子句中出现的谓词进行筛选,让谓词取值为true的行通过了考验,插入到VT1-J2。c.添加外部行。如果指定了outer join,还需要将VT1-J2中没有找到匹配的行,作为外部行添加到VT1-J2中,生成VT1-J3。经过以上步骤,FROM阶段就完成了。概括地讲,FROM阶段就是进行预处理的,根据提供的运算符对语句中提到的各个表进行处理(除了join,还有apply,pivot,unpivot)(2)WHERE阶段WHERE阶段是根据中条件对VT1中的行进行筛选,让条件成立的行才会插入到VT2中。(3)GROUP BY阶段GROUP阶段按照指定的列名列表,将VT2中的行进行分组,生成VT3。最后每个分组只有一行。(4)HAVING阶段该阶段根据HAVING子句中出现的谓词对VT3的分组进行筛选,并将符合条件的组插入到VT4中。(5)SELECT阶段这个阶段是投影的过程,处理SELECT子句提到的元素,产生VT5。这个步骤一般按下列顺序进行a.计算SELECT列表中的表达式,生成VT5-1。b.若有DISTINCT,则删除VT5-1中的重复行,生成VT5-2c.若有TOP,则根据ORDER BY子句定义的逻辑顺序,从VT5-2中选择签名指定数量或者百分比的行,生成VT5-3(6)ORDER BY阶段根据ORDER BY子句中指定的列明列表,对VT5-3中的行,进行排序,生成游标VC6.如果On和where只能选其一的话:先进行on的过滤, 而后才进行join, 这样就避免了两个大表产生全部数据的笛卡尔积的庞大数据. 这些步骤执行时, 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。如果没有在查询中指定某一子句,将跳过相应的步骤。(2) 那 on 和where 那个更高效呢如果是inner join, 放on和放where产生的结果一样, 但没说哪个效率速度更高? 如果有outer join (left or right), 就有区别了, 因为on生效在先, 已经提前过滤了一部分数据, 而where生效在后.综合一下, 感觉还是放在on里更有效率, 因为它先于where执行.先笛卡尔积, 然后再on过滤, 如果join是inner的, 就继续往下走, 如果join 是left join, 就把on过滤掉的左主表中的数据再添加回来; 然后再执行where里的过滤;on中不是最终过滤, 因为后面left join还可能添加回来, 而where才是最终过滤.只有当使用外连接(left, right)时, on 和 where 才有这个区别, 如果用inner join, 在哪里制定都一样, 因为on 之后就是where, 中间没有其它步骤.sql查询语句的各个命令执行的标准顺序是什么?为什么? 一般都是按语句顺序进行查询,至于标准顺序,要看语句格式和公式等,一般有些语句或者符号或者公式是有优先级的。至于为什么,sql数据库就是这么规定的。具体还是多看教科书。查询语句是sql语句中使用最多的操作,也涉及到非常多的命令。比如where过滤,groupby分组,order by 排序 limit取值 having等。虽然多,但是各个命令执行的时候却是有顺序的,顺序如下:select *from 表名①-- where 条件1②-- group by 依据列③-- having 条件2④-- order by 依据列⑤-- limit 0,1为什么是这么个顺序,原因:limit取值永远是最后一个.如果你要order by排序,前提是要首先得到一个查询结果.查询结果中的三个关键词,where总是是放在表名的后面,而havin过滤永远是放在group后面,所以就有了这么个顺序.如果不遵循顺序,就会出现错误。是不是这样,我们可以用下面的建表语句验证下.drop table if exists students;create table students ( studentNo varchar(10) primary key, name varchar(10), sex varchar(1), hometown varchar(20), age tinyint(4), class varchar(10), card varchar(20));insert into students values('001', '王昭君', '女', '北京', '20', '1班', '340322138004'),('002', '诸葛亮', '男', '上海', '18', '2班', '340322138004'),('003', '张飞', '男', '南京', '24', '3班', '340322138004'),('004', '白起', '男', '安徽', '22', '4班', '340322138004'),('005', '大乔', '女', '天津', '19', '3班', '340322138004'),('006', '孙尚香', '女', '河北', '18', '1班', '340322138004'),('007', '百里玄策', '男', '山西', '20', '2班', '340322138004'),('008', '小乔', '女', '河南', '15', '3班', null),('009', '百里守约', '男', '湖南', '21', '1班', ''),('010', '妲己', '女', '广东', '26', '2班', '340322138004'),('011', '李白', '男', '北京', '30', '4班', '340322138004'),('012', '孙膑', '男', '新疆', '26', '3班', '340322138005')查询该表中除1班外,所有其他班级的最大年龄,最小年龄,并且按照班号进行降序排列(过滤掉2班,只显示最前面的一条信息)那么sql语句就是: select class,max(age),min(age) from students where class !='1班' group by class having class !='2班' order by class desc limit 1 在这条语句中,新人非常容易犯的错误 就是根据题意,将having放在order by 后面导致错误。原因在于order by应该放在hving的后面。 还有其他疑问的话建议你去搜一下黑马程序员,在IT业内算是比较有实力的机构,里面有线上和线下的课程,还有免费的视频,每天看一点学一下还是比较有用的。不过,如果真的是想入行或者进阶的话,花一段时间高专注度的学习是非常有必要的,投资自己报课试一下吧。sql语句执行顺序 1、先执行from,join来确定表之间的连接关系,得到初步的数据。2、where对数据进行普通的初步的筛选。3、group by 分组。4、各组分别执行having中的普通筛选或者聚合函数筛选。5、然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段。6、将查询结果去重distinct。7、最后合并各组的查询结果,按照order by的条件进行排序。SQL语句性能优化:1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2,应尽量避免在 where 子句中对字段进行 null 值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默 认值。3,应尽量避免在 where 子句中使用!=或<>操作符, MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。4,应尽量避免在 where 子句中使用 or 来连接条件, 否则将导致引擎放弃使用索引而进行全表扫描, 可以 使用UNION合并查询:select id from t where num=10 union all select id from t where num=20 少长咸集 上一篇 sumifs函数详解,SUMPRODUCT函数怎么用 发表于2024-04-22 浏览12 评论0 下一篇 chane,CHANE_是黄金吗 发表于2024-04-22 浏览11 评论0 网站分类 编程语言 146620 硬件开发 79839 前沿技术 145028 资讯 76943 最近发表 2025-05-06linux怎么修改无线ip地址 2025-05-06linux的txt如何去掉回车 2025-05-06入linux命令 2025-05-06linux如何打包tar命令 2025-05-06不玩游戏可以用linux系统吗 2025-05-06linux是什么体验 2025-05-06linux怎么用源安装软件 2025-05-06linux服务的作用是什么 2025-05-06实验linux常用命令 2025-05-06linux如何用if 最新留言 © 2025 技术 Copyright Your WebSite.Some Rights Reserved.皖ICP备2023002134号 Powered By Z-Blog Theme By 吉光片羽

阅读更多 >>>  中国电信卡发什么短信查流量

网站数据信息

"select语句执行顺序,sql查询语句的各个命令执行的标准顺序是什么?为什么?"浏览人数已经达到18次,如你需要查询该站的相关权重信息,可以点击进入"Chinaz数据" 查询。更多网站价值评估因素如:select语句执行顺序,sql查询语句的各个命令执行的标准顺序是什么?为什么?的访问速度、搜索引擎收录以及索引量、用户体验等。 要评估一个站的价值,最主要还是需要根据您自身的需求,如网站IP、PV、跳出率等!