首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SQL 执行顺序

了解 SQL 执行顺序非常有价值,它可以让我们写出语法正确 SQL,帮助我们简化编写新查询过程。 本文将在 MySQL 基础上,介绍查询语句执行顺序。...: FROM / JOIN 和所有 ON 条件 WHERE GROUP BY HAVING SELECT ORDER BY LIMIT 以上是 SQL 标准定义执行顺序。...这些优化可能会改变实际执行顺序,但它们最终必须返回与以默认执行顺序运行查询结果相同。 按照执行顺序规则,排在后面的子句产生结果不能被前面的子句引用。...SELECT CONCAT(job, '|', deptno) AS job_dept, COUNT(*) FROM emp GROUP BY job_dept 那是不是说这条 SQL 破坏了前面定义执行顺序呢...如果按照标准执行顺序执行两个大表 LEFT JOIN 再执行 WHERE 过滤,那整个 JOIN 操作将会占用很大内存。

2.3K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL 语句执行顺序

    for the right syntax to use near 'WHERE count > 1' at line 4 原因: WHERE 子句会比 SELECT 子句先执行,上面的 SQL 中 ,...SQL 语句书写顺序如下: SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY SQL 语句执行顺序如下: FROM -> WHERE...-> GROUP BY -> HAVING -> SELECT -> ORDER BY 其中 SELECT 和 FROM 是必须,其他关键词是可选,这六个关键词执行顺序SQL语句书写顺序并不是一样...,而是按照下面的顺序执行 FROM:需要从哪个数据表检索数据 WHERE:过滤表中数据 GROUP BY:将上面过滤出数据分组 HAVING:对上面已经分组数据进行过滤 SELECT:查看结果集中哪个列...,或列计算结果 ORDER BY:按照什么样顺序来查看返回数据 所以本文开头所说查询有两种实现 SQL: # 使用 HAVING 过滤分组中数据 SELECT id, COUNT(client

    3.6K41

    MySQLsql执行顺序

    SQL语句中每个关键字都会按照顺序往下执行,而每一步操作,会生成一个虚拟表,最后产生虚拟表会作为执行最终结果返回。下面的是常用关键字执行顺序: ?...)未匹配行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3; 4、WHERE:对虚拟表VT3进行WHERE条件过滤,只有符合记录才会被放入到虚拟表VT4; 5、...:对虚拟表VT6进行HAVING条件过滤,只有符合记录才会被插入到虚拟表VT7中; 8、SELECT:执行SELECT操作,选择指定列,插入到虚拟表VT8中; 9...、DISTINCT:对虚拟表VT8中记录进行去重,产生虚拟表VT9; 10、ORDER BY:将虚拟表VT9中记录按照进行排序操作,产生虚拟表VT10; 11、LIMIT...:取出指定行记录,产生虚拟表VT11,并将结果返回。

    2.2K20

    图解 SQL 优雅执行顺序

    这是一条标准查询语句: 这是我们实际上SQL执行顺序: 我们先执行from,join来确定表之间连接关系,得到初步数据 where对数据进行普通初步筛选 group by 分组 各组分别执行...而where只能是普通函数,一般情况下,有having可以不写where,把where筛选放在having里,SQL语句看上去更丝滑。...当前数据分组情况 执行having筛选条件,可以使用聚合函数。...筛选掉工资小于各组平均工资having salary<avg(salary) select 分组结束之后,我们再执行select语句,因为聚合函数是依赖于分组,聚合函数会单独新增一个查询出来字段...order by 最后我们执行order by 将数据按照一定顺序排序,比如这里按照id排序。如果此时有limit那么查询到相应我们需要记录数时,就不继续往下查了。

    20330

    Mysql-SQL执行顺序

    SQL执行顺序事实上,sql并不是按照我们书写顺序来从前往后、左往右依次执行,它是按照固定顺序解析,主要作用就是从上一个阶段执行返回结果来提供给下一阶段使用,sql执行过程中会有不同临时中间表...having count(*)>2  order by s.create_time limit 5;1、from 第一步就是选择出from关键词后面跟表,这也是sql执行第一步...:表示要从数据库中执行哪张表。...通过from 和 join on 选择出需要执行数据库表T和S,产生笛卡尔积,生成T和S合并临时中间表Temp1。...按照固定字段进行分组,产生临时中间表Temp4, "这个过程只是数据顺序发生改变,而数据总量不会变化,表中数据以组形式存在" 实例说明:在temp3表数据中对mobile

    29010

    Sql 执行顺序是怎样

    总第150篇/张俊红 学过 Sql,或了解过 Sql 的人,应该都会写下面这行代码: select * from t 上面代码表示查询 t 表中所有信息,是 Sql 查询中最基础,最简单一行代码,...代码中涉及到select、from、where、group by、having、order by、limit这7个关键词,基本上包括了 Sql 中所有的查询关键词,上面的顺序是这7个关键词语法顺序,...也就是你在写代码时候,应该按照这个顺序写,那这7个关键词执行顺序是什么样呢?...也就是先执行哪个再执行哪个? 可以肯定是,肯定不是从上至下执行,如果是这样子的话,就没有写这篇文章必要啦。...以上就是 Sql 语句一个基本执行顺序,总结一下就是: from-where-groupby-having-select-orderby-limit

    1.1K20

    Hive SQL语句正确执行顺序

    关于 sql 语句执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行先后顺序,有说 select 先执行,有说 group by...今天我们通过 explain 来验证下 sql 执行顺序。...在验证之前,先说结论,Hive 中 sql 语句执行顺序如下: from .. where .. join .. on .. select .. group by .. select .. having...语句是可以成功执行,我们看下它在 MR 中执行顺序: Map 阶段: 执行 from,进行表查找与加载; 执行 where,注意:sql 语句中 left join 写在 where 之前,但是实际执行执行...---- 上面这个执行顺序到底对不对呢,我们可以通过 explain 执行计划来看下,内容过多,我们分阶段来看。 首先看下 sql 语句执行依赖: ?

    7.2K52

    Mysql资料 查询SQL执行顺序

    具体顺序 1.FROM 执行笛卡尔积 FROM 才是 SQL 语句执行第一步,并非 SELECT 。对FROM子句中前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源数据集。...FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最后表(基础表 driving table)将被最先处理,即最后表为驱动表,当FROM 子句中包含多个表情况下,我们需要选择数据最少表作为基础表...同时,从这一步开始,后面的语句中都可以使用SELECT中别名。 6.AGG_FUNC 计算聚合函数 计算 max 等聚合函数。SQL Aggregate 函数计算从列中取得值,返回一个单一值。...HAVING 语句在SQL主要作用与WHERE语句作用是相同,但是HAVING是过滤聚合值,在 SQL 中增加 HAVING 子句原因就是,WHERE 关键字无法与聚合函数一起使用,HAVING子句主要和...同时,ORDER BY子句执行顺序为从左到右排序,是非常消耗资源。 12.LIMIT/OFFSET 指定返回行 从VC10开始处选择指定数量行,生成虚拟表 VT11,并返回调用者。

    3.3K00

    SQL语句各个部分执行顺序

    http://www.tuicool.com/articles/fERNv2 下面先给出上面的SQL语句执行顺序,然后进行讲解: (8)  select (9)  distinct (11)  top...where Table1.id<4 (5)  group by Table1.id (7)  having Table1.id<3 (10)  order by Table1.id desc 前方序号给出了执行顺序...: (1)from:对Table1和Table2执行笛卡尔积,也就是两个表各种组合,共5*5=25行,生成虚拟表VT1 (2)on:选择VT1中那些Table1.id=Table2.id所有行...(6)COUNT:执行聚合函数,选出对应Table1.id行数,生成结果给虚拟表VT5 (7)having:选择VT5中Table1.id<3所有结果,给虚拟表VT6 (8)select:选择VT6...(11)top:从游标VC9开始处选择指定行数,这里是1行,生成虚拟表VT10. 经过上面的过程,最终SQL语句将VT10返回给用户使用。

    1.8K70

    【看图学技术】- SQL 执行顺序

    SQL 执行顺序 群里面看到这个图,也感觉总结还挺好。 SQL 执行顺序是指在执行 SQL 查询时,各个子句和操作执行顺序。...以下是 SQL 查询典型执行顺序: FROM 子句:首先处理 FROM 子句,加载指定数据表。 ON 子句:如果存在 JOIN 操作,ON 子句会在此阶段处理,确定表之间连接条件。...SELECT 子句:在上述筛选过程之后,根据 SELECT 子句列进行数据选择与投影。 DISTINCT 子句:若包含 DISTINCT 关键字,查询结果会去除重复记录。...LIMIT 子句:限制查询结果数量。 需要注意是,这个顺序并不是绝对。不同数据库管理系统(DBMS)可能会根据查询优化器判断,对执行顺序进行调整,以获得更高查询性能。...但是,理解 SQL 执行顺序有助于编写高效查询语句,并减少不必要性能损失。

    16610

    SQL逻辑查询语句执行顺序

    group_by_list> HAVING ORDER BY LIMIT 二 SELECT语句关键字执行顺序...a.city = 'hangzhou' GROUP BY a.customer_id HAVING count(b.order_id) < 2 ORDER BY total_orders DESC; 五 执行顺序分析...在这些SQL语句执行过程中,都会产生一个虚拟表,用来保存SQL语句执行结果(这是重点),我现在就来跟踪这个虚拟表变化,得到最终查询结果过程,来分析整个SQL逻辑查询执行顺序和过程。...由于我测试SQL语句中并没有使用DISTINCT,所以,在该查询中,这一步不会生成一个虚拟表。...执行ORDER BY子句 对虚拟表中内容按照指定列进行排序,然后返回一个新虚拟表,我们执行测试SQL语句中ORDER BY total_orders DESC,就会得到以下内容: +------

    4.1K50

    django执行原生sql_mysql语句执行顺序

    大家好,又见面了,我是你们朋友全栈君。...前言 Django在查询数据时,大多数查询都能使用ORM提供API方法,但对于一些复杂查询可能难以使用ORMAPI方法实现,因此Django引入了SQL语句执行方法,有以下三种执行方式 extra...raw:执行原始SQL并返回模型实例对象。...execute:直接执行自定义SQL 以上3种方式,这里只介绍raw方式,用最多,也最推荐使用 raw 只能实现数据查询操作,并且要依靠模型对象,在Pycharm里打开raw源码,如下图所示,它一共定义了...4个参数,每个参数如下: raw_query:SQL语句 params:如果raw_query设置字符串格式化%s,那么该参数为raw_query提供数值 translations:为查询字段设置别名

    3.2K10

    图解 SQL 执行顺序,通俗易懂!

    点击关注公众号,Java干货及时送达 这是一条标准查询语句: 这是我们实际上SQL执行顺序: 我们先执行from,join来确定表之间连接关系,得到初步数据 where对数据进行普通初步筛选...group by 分组 各组分别执行having中普通筛选或者聚合函数筛选。...而where只能是普通函数,一般情况下,有having可以不写where,把where筛选放在having里,SQL语句看上去更丝滑。...当前数据分组情况 执行having筛选条件,可以使用聚合函数。...order by 最后我们执行order by 将数据按照一定顺序排序,比如这里按照id排序。如果此时有limit那么查询到相应我们需要记录数时,就不继续往下查了。

    2K71
    领券