-
2019-02-22 14:44:49
select语句完整语法:
SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number>
执行顺序:
from →join →on →where →group by→having→select→order by→limit
(1)各个关键词的作用:
from:需要从哪个数据表检索数据
join:联合多表查询返回记录时,并生成一张临时表
on:在生成临时表时使用的条件
where:过滤表中数据的条件
group by:如何将上面过滤出的数据分组
having:对上面已经分组的数据进行过滤的条件
select:查看结果集中的哪个列,或列的计算结果
order by :按照什么样的顺序来查看返回的数据
limit:限制查询结果返回的数量(2)on与where的用法区别:
a.on后面的筛选条件主要是针对的是关联表【而对于主表刷选条件不适用】。
b.如果是想再连接完毕后才筛选就应把条件放置于where后面。对于关联表我们要区分对待。如果是要条件查询后才连接应该把查询件放置于on后。
c.对于主表的筛选条件应放在where后面,不应该放在on后面(3)having和where的用法区别:
a.having只能用在group by之后,对分组后的结果进行筛选(即使用having的前提条件是分组)。
b.where肯定在group by 之前,即也在having之前。
c.where后的条件表达式里不允许使用聚合函数,而having可以。(4)count用法
使用count(列名)当某列出现null值的时候,count(*)仍然会计算,但是count(列名)不会。
更多相关内容 -
Mysql 语句执行顺序
2022-01-19 15:46:31一、Mysql 语法顺序 ...二、Mysql执行顺序 from on join where group by having select distinct union order by 注: 1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表一、Mysql 语法顺序
select[distinct] from join(如left join) on where group by having union order by limit
二、Mysql执行顺序
from on join where group by having select distinct union order by
注:
1)使用distinct要写在所有要查询字段的前面,后面有几个字段,就代表修饰几个字段,而不是紧随distinct的字段;
2)group by执行后(有聚合函数),group by后面的字段在结果中一定是唯一的,也就不需要针对这个字段用distinct;
-
MySQL语句执行顺序和编写顺序实例解析
2020-12-14 07:28:27select语句完整语法: SELECT DISTINCT <select_list> FROM <join> JOIN ON WHERE GROUP BY HAVING ORDER BY ...执行顺序: from →join →on →where →group by→having→select→order -
sql和MySQL的语句执行顺序分析
2020-12-16 01:37:05目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from ... -
MySQL 各语句执行顺序
2022-01-10 11:14:42语句中各子句完整执行顺序概括(按照顺序号执行): 每个子句执行顺序分析 语句中各子句完整执行顺序概括(按照顺序号执行): from (注:这里也包括from中的子语句) join on where group by(开始使用select中...目录
语句中各子句完整执行顺序概括(按照顺序号执行):
- from (这里也包括from中的子语句)
- join
- on
- where
- group by(开始使用select中的别名,后面的语句中都可以使用;但是不能使用ROW_NUMBER()等窗口函数的别名)
- avg,sum.... 等聚合函数
- having
- select
- distinct
- order by
- limit
每个子句执行顺序分析
所有的 查询语句都是从from开始执行的,在执行过程中,每个步骤都会为下一个步骤生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入。
1. from
form是一次查询语句的开端。
- 如果是一张表,会直接操作这张表;
- 如果这个from后面是一个子查询,会先执行子查询中的内容,子查询的结果也就是第一个虚拟表T1。(注意:子查询中的执行流程也是按照本篇文章讲的顺序哦)。
- 如果需要关联表,使用join,请看2,3
2. join
如果from后面是多张表,join关联,会首先对前两个表执行一个笛卡尔乘积,这时候就会生成第一个虚拟表T1(注意:这里会选择相对小的表作为基础表);
3. on
对虚表T1进行ON筛选,只有那些符合的行才会被记录在虚表T2中。(注意,这里的这里如果还有第三个表与之关联,会用T2与第三个表进行笛卡尔乘积生产T3表,继续重复3. on步骤生成T4表,不过下面的顺序讲解暂时不针对这里的T3和T4,只是从一个表关联查询T2继续说)
4. where
对虚拟表T2进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表T3中。
5.group by
group by 子句将中的唯一的值组合成为一组,得到虚拟表T4。如果应用了group by,那么后面的所有步骤都只能操作T4的列或者是执行6.聚合函数(count、sum、avg等)。(注意:原因在于分组后最终的结果集中只包含每个组中的一行。谨记,不然这里会出现很多问题,下面的代码误区会特别说。)
6. avg,sum.... 等聚合函数
聚合函数只是对分组的结果进行一些处理,拿到某些想要的聚合值,例如求和,统计数量等,并不生成虚拟表。
7. having
应用having筛选器,生成T5。HAVING子句主要和GROUP BY子句配合使用,having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。
8. select
执行select操作,选择指定的列,插入到虚拟表T6中。
9. distinct
对T6中的记录进行去重。移除相同的行,产生虚拟表T7.(注意:事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。)
10. order by
应用order by子句。按照order_by_condition排序T7,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。
oder by的几点说明
- 因为order by返回值是游标,那么使用order by 子句查询不能应用于表表达式。
- order by排序是很需要成本的,除非你必须要排序,否则最好不要指定order by,
- order by的两个参数 asc(升序排列) desc(降序排列)
11. limit
取出指定行的记录,产生虚拟表T9, 并将结果返回。
limit后面的参数可以是 一个limit m ,也可以是limit m n,表示从第m条到第n条数据。
(注意:很多开发人员喜欢使用该语句来解决分页问题。对于小数据,使用LIMIT子句没有任何问题,当数据量非常大的时候,使用LIMIT m,n是非常低效的。因为LIMIT的机制是每次都是从头开始扫描,如果需要从第60万行开始,读取3条数据,就需要先扫描定位到60万行,然后再进行读取,而扫描的过程是一个非常低效的过程。所以,对于大数据处理时,是非常有必要在应用层建立一定的缓存机制)
-
Mysql 的 SQL 语句执行顺序
2022-02-18 09:10:02记录一下 Mysql 的 SQL 语句执行顺序 from join on where group by (可以使用 select 中的别名,后面的语句中都可以使用) count、sum、svg… having select distinct limit 1、确定范围:确定查询范围,过滤不想要...select 语句定义:
<SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>] [<ORDER BY clause>] [<LIMIT clause>]
select 语句的执行顺序
- from
- join
- on
- where
- group by (可以使用 select 中的别名,后面的语句中都可以使用)
- count、sum、svg…
- having
- select
- distinct
- order by
- limit
1、确定范围:确定查询数据范围(1->2->3)
2、数据处理:过滤不符合的数据,对需要的数据进行分组统计,过滤不符合的统计结果(4->5->6->7)
3、返回结果:确定返回的列,去重,确定返回条数(8->9->10->11)特别注意:
1、where 语句和 group by 语句后面不可以使用聚合函数(count、sum、svg…)
2、mysql 中 group by 语句及其之后的语句可以使用 select 中的别名- 根据 sql 语句执行顺序,group by 在 select 之前执行,所以 group by 是无法使用 select 后面的别名的
- mysql 中 group by 之所以能使用 select 后面的别名是因为 mysql 对其进行了扩充,其他数据库不支持
-
关于sql和MySQL的语句执行顺序(必看)
2016-03-29 12:15:09目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3)... -
简单了解mysql语句书写和执行顺序
2020-12-14 09:06:50mysql语句的书写顺序和执行顺序有很大差异。 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join> join on where group by <分组条件> having <分组后的筛选条件> ... -
mysql语句执行顺序
2018-04-29 17:42:56MySQL的语句执行顺序MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对... -
MySQL的语句执行顺序
2017-12-07 16:32:34MySQL的语句一共分为11步,如下图所标注的那样,最先执行的总是FROM操作,最后执行的是LIMIT操作。其中每一个操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是... -
MySQL执行过程以及顺序
2019-10-10 14:26:09前言:MySQL在我们的开发中基本每天都要面对的,作为开发中的数据...MySQL服务端是如何处理请求的,又是如何执行sql语句的?本篇博客将来探讨这个问题: 本篇博客的目录 一:MySQL执行过程 二:MySQL执行过程中的状态 三... -
mysql中的查询语句的执行顺序
2021-03-10 19:40:49一、sql语句的执行顺序 1.sql语句的执行顺序 (7)select (8)distinct 字段名1,字段名2... (5)[fun 字段名] (1)from 表名 (2)inner|left|right|full|cross join on 连接条件 (3)where 筛选条件 (4)group by 分组条件... -
mysql - select语句执行顺序/where语句执行顺序
2021-01-29 09:49:221.SELECT语句处理顺序 2.where 后条件执行先后顺序 1.SELECT语句处理顺序 (1)from (2)on (3)join (4)where (5)group by (开始使用select中的别名,后面的语句中都可以使用) (6)avg,sum.... (7)having (8... -
MySQL 基础 ———— SQL语句的执行顺序与 LIMIT 子句
2019-11-10 09:34:52引言 到目前为止,已经总结了常见的SQL子句,包括 SELECT 、FROM、JOIN ...ON、...除了上述这些子句,下面将会介绍另一个比较常用的子句 LIMIT ,并且总结一下SQL 语句的执行顺序。 一、LIMIT 子句 LIMIT 子句... -
MySQL中SQL语句执行顺序
2018-06-15 12:46:44【1】SQL执行语法顺序 --查询组合字段 (5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<select_list> --连表 (1)from (1-J)<left_table><join_... -
MySQL和Oracle中where条件语句的执行顺序
2021-03-03 22:01:58一、MySQL中SQL的书写顺序和执行顺序 sql编写顺序: select distinct…from…join…on…where…group by…having…order by…limit… sql解析顺序: from…on…join…where…group by…having…select distinct…... -
SQL语句执行深入讲解(MySQL架构总览-查询执行流程-SQL解析顺序)
2020-12-15 20:40:43本文将从MySQL总体架构—>查询执行流程—>语句执行顺序来探讨一下其中的知识。 一、MySQL架构总览: 架构最好看图,再配上必要的说明文字。 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解。 从... -
MySQL,SQL语句执行顺序
2021-01-19 16:30:591.SQL执行顺序:select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not nullgroup by考生姓名having max(总成绩) > 600order by max总成绩(1). 首先执行 FROM 子句, 从 tb_Grade 表组装... -
MySql执行顺序及执行计划
2019-03-06 12:41:12一、mySql的执行顺序 mysql执行sql的顺序从 From 开始,以下是执行的顺序流程 1、FROM table1 left join table2 on 将table1和table2中的数据产生笛卡尔积,生成Temp1 2、JOINtable2 所以先是确定表,再确定关联... -
MySQL 查询执行顺序?
2021-05-29 16:40:24目录前言一、SQL查询执行顺序二、具体步骤执行顺序简介1、执行FROM语句2、执行ON过滤3、添加外部行(外联结)4、执行WHERE过滤5、执行GROUP BY分组6、执行HAVING过滤7、SELECT列表8、执行DISTINCT子句9、执行ORDER ... -
MySQL查询语句执行顺序以及各关键字的详解,并实战分组后每组显示前几条数据
2019-04-16 18:46:24无论什么语言,不管什么框架,在这个大数据的时代,最终都会和数据库打...今天我们一起讨论一下mysql查询语句的执行顺序,这对项目开发中编写sql语句非常重要,知道sql语句里各个关键字的作用,从此写sql不是问题!!! -
简单了解MySQL SELECT执行顺序
2020-09-09 03:22:41MySQL数据据库中我们经常使用SQL SELECT语句来查询数据,那么关于它的执行顺序,下面小编来带大家简单了解一下 -
SQL语句执行顺序及MySQL中limit的用法
2021-01-19 05:12:33一、 SQL语句执行顺序及MySQL中limit的用法执行顺序:from...where...group by... having.... select ... order by... limitlimit限制查询的结果序号limit off, n: 从off偏移取n个数据limit n: 取前n个数据,相当于... -
MySQL(五)SELECT语句执行顺序
2021-01-27 16:29:06上一篇讲述了Oracle的SELECT语法的执行顺序,这篇讲述MySQL的SELECT语法的执行顺序。MySQL的SELECT语法的执行顺序和Oracle的基本相同,只是增加了MySQL独有的LIMIT语法。目录一、SELECT语句的处理过程1、 FROM阶段2... -
SQL语句执行深入讲解(MySQL架构总览->查询执行流程->SQL解析顺序)
2020-09-09 05:48:52主要给大家介绍了SQL语句执行的相关内容,文中一步步给大家深入的讲解,包括MySQL架构总览->查询执行流程->SQL解析顺序,需要的朋友可以参考下 -
一条select语句执行顺序--MySQL进阶
2022-03-26 10:16:41答案:执行顺序是下面代码中的数字标记: (8) SELECT (9)DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition> (4) WHERE &...