精华内容
下载资源
问答
  • 本篇文章是对oracle select执行顺序进行了详细的分析介绍,需要的朋友参考下
  • MySQL数据据库中我们经常使用SQL SELECT语句来查询数据,那么关于它的执行顺序,下面小编来带大家简单了解一下
  • MySQL SELECT执行顺序

    千次阅读 2017-08-16 15:36:01
    mysql select 执行顺序, select语句执行顺序, select 执行顺序, sql select执行顺序, mysql语句执行顺序 1、FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。 2、ON: 对虚表VT1进行ON过滤,只有那些符合...


    SELECT语句的完整语法为:

    (7)  SELECT 
    (8)  DISTINCT <select_list>
    (1)  FROM <left_table>
    (3)  <join_type> JOIN <right_table>
    (2)  ON <join_condition>
    (4)  WHERE <where_condition>
    (5)  GROUP BY <group_by_list>
    (6)  HAVING <having_condition>
    (9)  ORDER BY <order_by_condition>
    (10) LIMIT <limit_number>

    说明:语法前面的序号为SELECT执行顺序

    MySQL的SELECT执行顺序一共分为10步,如上所标注的那样,最先执行的是FROM操作,最后执行的是LIMIT操作。其中每一次操作都会产生一张虚拟的表,这个虚拟的表作为一个处理的输入,只是这些虚拟的表对用户来说是透明的,但是只有最后一个虚拟的表才会被作为结果返回。如果没有在语句中指定某一个子句,那么将会跳过相应的步骤。

    下面我们来具体分析一下查询处理的每一个阶段

     SELECT a.customer_id, COUNT(b.order_id) as total_orders
     FROM table1 AS a
     LEFT JOIN table2 AS b
     ON a.customer_id = b.customer_id
     WHERE a.city = 'hangzhou'
     GROUP BY a.customer_id
     HAVING count(b.order_id) < 2
     ORDER BY total_orders DESC;
    1、FORM: 对FROM左边的表和右边的表计算笛卡尔积,产生虚表VT1。
    2、ON: 对虚表VT1进行ON过滤,只有那些符合<join-condition>的行才会被记录在虚表VT2中。
    3、JOIN: 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3。
    4、WHERE: 对虚拟表VT3进行WHERE条件过滤。只有符合<where-condition>的记录才会被插入到虚拟表VT4中。
    5、GROUP BY: 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5。
    6、HAVING: 对虚拟表VT5应用having过滤,只有符合<having-condition>的记录才会被 插入到虚拟表VT6中。
    7、SELECT: 执行select操作,选择指定的列,插入到虚拟表VT7中。
    8、DISTINCT: 对VT7中的记录进行去重。产生虚拟表VT8.
    9、ORDER BY: 将虚拟表VT8中的记录按照<order_by_list>进行排序操作,产生虚拟表VT9.
    10、LIMIT:取出指定行的记录,产生虚拟表VT10, 并将结果返回。

    参考: SQL逻辑查询语句执行顺序


    展开全文
  • Sql查询原理与Select执行顺序(详细)

    万次阅读 多人点赞 2017-02-06 16:53:50
    一切都是为了性能,一切都是为了...一、查询的逻辑执行顺序 (1) FROM left_table (3) join_type JOIN right_table (2) ON join_condition (4) WHERE where_condition (5) GROUP BY group_by_list

    原文地址:点击打开链接

    一切都是为了性能,一切都是为了业务


    一、查询的逻辑执行顺序


    (1) FROM left_table

    (3) join_type JOIN right_table (2) ON join_condition

    (4) WHERE where_condition

    (5) GROUP BY group_by_list

    (6) WITH {cube | rollup}

    (7) HAVING having_condition

    (8) SELECT (9) DISTINCT (11) top_specification select_list

    (9) ORDER BY order_by_list


    标准的 SQL 的解析顺序为:


    (1) FROM 子句 组装来自不同数据源的数据


    (2) WHERE 子句 基于指定的条件对记录进行筛选


    (3) GROUP BY 子句 将数据划分为多个分组


    (4) 使用聚合函数进行计算


    (5) 使用HAVING子句筛选分组


    (6) 计算所有的表达式


    (7) 使用ORDER BY对结果集进行排序


    二、执行顺序


    1. FROM:对FROM子句中前两个表执行笛卡尔积生成虚拟表vt1


    2. ON: 对vt1表应用ON筛选器只有满足 join_condition 为真的行才被插入vt2


    3. OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束。


    4. WHERE:对vt3应用 WHERE 筛选器只有使 where_condition 为true的行才被插入vt4


    5. GROUP BY:按GROUP BY子句中的列列表对vt4中的行分组生成vt5


    6. CUBE|ROLLUP:把超组(supergroups)插入vt6,生成vt6


    7. HAVING:对vt6应用HAVING筛选器只有使 having_condition 为true的组才插入vt7


    8. SELECT:处理select列表产生vt8


    9. DISTINCT:将重复的行从vt8中去除产生vt9


    10. ORDER BY:将vt9的行按order by子句中的列列表排序生成一个游标vc10


    11. TOP:从vc10的开始处选择指定数量或比例的行生成vt11 并返回调用者


    看到这里,那么用过Linq to SQL的语法有点相似啊?如果我们我们了解了SQL Server执行顺序,那么我们就接下来进一步养成日常SQL的好习惯,也就是在实现功能的同时有考虑性能的思想,数据库是能进行集合运算的工具,我们应该尽量的利用这个工具,所谓集合运算实际就是批量运算,就是尽量减少在客户端进行大数据量的循环操作,而用SQL语句或者存储过程代替。


    三、只返回需要的数据


    返回数据到客户端至少需要数据库提取数据、网络传输数据、客户端接收数据以及客户端处理数据等环节,如果返回不需要的数据,就会增加服务器、网络和客户端的无效劳动,其害处是显而易见的,避免这类事件需要注意:


    A、横向来看


    (1) 不要写SELECT * 的语句,而是选择你需要的字段。


    (2) 当在SQL语句中连接多个表时, 请使用表的别名并把别名前缀于每个Column上。这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。


    如有表table1(ID,col1)和table2(ID,col2)


    Select A.ID, A.col1, B.col2

    – Select A.ID, col1, col2 –不要这么写,不利于将来程序扩展

    from table1 A inner join table2 B on A.ID=B.ID Where …


    B、纵向来看


    (1) 合理写WHERE子句,不要写没有WHERE的SQL语句。


    (2) SELECT TOP N * – 没有WHERE条件的用此替代。


    四、尽量少做重复的工作


    A、控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的。


    B、减少多次的数据转换,也许需要数据转换是设计的问题,但是减少次数是程序员可以做到的。


    C、杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。


    D、合并对同一表同一条件的多次UPDATE,比如


    UPDATE EMPLOYEE SET FNAME=’HAIWER’

    WHERE EMP_ID=’ VPA30890F’UPDATE EMPLOYEE SET LNAME=’YANG’

    WHERE EMP_ID=’ VPA30890F’


    这两个语句应该合并成以下一个语句


    UPDATE EMPLOYEE SET FNAME=’HAIWER’,LNAME=’YANG’WHERE EMP_ID=’ VPA30890F’


    E、UPDATE操作不要拆成DELETE操作+INSERT操作的形式,虽然功能相同,但是性能差别是很大的。


    五、注意临时表和表变量的用


    在复杂系统中,临时表和表变量很难避免,关于临时表和表变量的用法,需要注意:


    A、如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成。


    B、如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据。


    C、如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据。


    D、其他情况下,应该控制临时表和表变量的使用。


    E、关于临时表和表变量的选择,很多说法是表变量在内存,速度快,应该首选表变量,但是在实际使用中发现:


    (1) 主要考虑需要放在临时表的数据量,在数据量较多的情况下,临时表的速度反而更快。


    (2) 执行时间段与预计执行时间(多长)


    F、关于临时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择,一般情况下:


    SELECT INTO会比CREATE TABLE + INSERT INTO的方法快很多,但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程。


    所以我的建议是,在并发系统中,尽量使用CREATE TABLE + INSERT INTO,而大数据量的单个语句使用中,使用SELECT INTO。


    六、子查询的用法


    子查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它子查询中。


    任何允许使用表达式的地方都可以使用子查询,子查询可以使我们的编程灵活多样,可以用来实现一些特殊的功能。但是在性能上,往往一个不合适的子查询用法会形成一个性能瓶颈。如果子查询的条件中使用了其外层的表的字段,这种子查询就叫作相关子查询。


    相关子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入。 关于相关子查询,应该注意:


    (1) NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法。比如:


    SELECT PUB_NAME FROM PUBLISHERS WHERE PUB_ID NOTIN (SELECT PUB_ID FROM TITLES WHERE TYPE =’BUSINESS’)


    可以改写成:


    SELECT A.PUB_NAME FROM PUBLISHERS A LEFTJOIN TITLES B ON B.TYPE =’BUSINESS’AND A.PUB_ID=B. PUB_ID WHERE B.PUB_ID IS NULL


    比如NOT EXISTS:


    SELECT TITLE FROM TITLES

    WHERE NOT EXISTS

    (SELECT TITLE_ID FROM SALES WHERE TITLE_ID = TITLES.TITLE_ID)


    可以改写成


    SELECT TITLE

    FROM TITLES LEFTJOIN SALES

    ON SALES.TITLE_ID = TITLES.TITLE_ID

    WHERE SALES.TITLE_ID ISNULL


    2)如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替。比如:


    SELECT PUB_NAME

    FROM PUBLISHERS

    WHERE PUB_ID IN

    (SELECT PUB_ID

    FROM TITLES

    WHERE TYPE =’BUSINESS’)


    可以改写成


    SELECT A.PUB_NAME –SELECT DISTINCT A.PUB_NAME

    FROM PUBLISHERS A INNERJOIN TITLES B

    ON B.TYPE =’BUSINESS’AND

    A.PUB_ID=B. PUB_ID


    (3) IN的相关子查询用EXISTS代替,比如:


    SELECT PUB_NAME FROM PUBLISHERS

    WHERE PUB_ID IN

    (SELECT PUB_ID FROM TITLES WHERE TYPE =’BUSINESS’)


    可以用下面语句代替:


    SELECT PUB_NAME FROM PUBLISHERS WHERE EXISTS

    (SELECT1FROM TITLES WHERE TYPE =’BUSINESS’AND

    PUB_ID= PUBLISHERS.PUB_ID)


    4) 不要用COUNT(*)的子查询判断是否存在记录,最好用LEFT JOIN或者EXISTS,比如有人写这样的语句:


    SELECT JOB_DESC FROM JOBS

    WHERE (SELECTCOUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)=0


    应该改成:


    SELECT JOBS.JOB_DESC FROM JOBS LEFTJOIN EMPLOYEE

    ON EMPLOYEE.JOB_ID=JOBS.JOB_ID

    WHERE EMPLOYEE.EMP_ID ISNULL

    SELECT JOB_DESC FROM JOBS

    WHERE (SELECT COUNT(*) FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)


    应该改成:


    SELECT JOB_DESC FROM JOBS

    WHEREEXISTS (SELECT 1 FROM EMPLOYEE WHERE JOB_ID=JOBS.JOB_ID)


    七:尽量使用索引


    建立索引后,并不是每个查询都会使用索引,在使用索引的情况下,索引的使用效率也会有很大的差别。只要我们在查询语句中没有强制指定索引,索引的选择和使用方法是SQLSERVER的优化器自动作的选择,而它选择的根据是查询语句的条件以及相关表的统计信息,这就要求我们在写SQL语句的时候尽量使得优化器可以使用索引。为了使得优化器能高效使用索引,写语句的时候应该注意:


    (1)不要对索引字段进行运算,而要想办法做变换,比如:


    SELECT ID FROM T WHERE NUM/2=100


    应改为:


    SELECT ID FROM T WHERE NUM=100*2

    SELECT ID FROM T WHERE NUM/2=NUM1


    如果NUM有索引应改为:


    SELECT ID FROM T WHERE NUM=NUM1*2


    如果NUM1有索引则不应该改。


    (2)发现过这样的语句:


    SELECT 年,月,金额 FROM 结余表 WHERE100*年+月=2010*100+10


    应该改为


    SELECT 年,月,金额 FROM 结余表 WHERE 年=2010 AND 月=10


    (3)不要对索引字段进行格式转换


    日期字段的例子:


    WHERECONVERT(VARCHAR(10), 日期字段,120)=’2010-07-15′


    应该改为


    WHERE日期字段〉=’2010-07-15′AND 日期字段’2010-07-16′


    ISNULL转换的例子:


    WHEREISNULL(字段,”)”应改为:WHERE字段”

    WHEREISNULL(字段,”)=”不应修改

    WHEREISNULL(字段,’F') =’T'应改为: WHERE字段=’T’

    WHEREISNULL(字段,’F')’T'不应修改


    (4) 不要对索引字段进行格式转换


    WHERELEFT(NAME, 3)=’ABC’ -或者

    WHERE SUBSTRING(NAME,1, 3)=’ABC’


    应改为: WHERE NAME LIKE’ABC%’


    日期查询的例子:


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期=’2010-06-30′ AND 日期 ’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)0


    应改为:WHERE 日期 ’2010-06-30′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期 ’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)0


    应改为:WHERE 日期=’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期=’2010-06-30′


    (5)不要对索引字段使用函数


    WHERE LEFT(NAME, 3)=’ABC’ 或者WHERE SUBSTRING(NAME,1, 3)=’ABC’


    应改为: WHERE NAME LIKE ’ABC%’


    日期查询的例子:


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期=’2010-06-30′AND 日期 ’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)0


    应改为:WHERE 日期 ’2010-06-30′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期 ’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)0


    应改为:WHERE 日期=’2010-07-01′


    WHEREDATEDIFF(DAY, 日期,’2010-06-30′)=0


    应改为:WHERE 日期=’2010-06-30′


    (6)不要对索引字段进行多字段连接


    比如:


    WHERE FAME+’. ‘+LNAME=’HAIWEI.YANG’


    应改为:


    WHERE FNAME=’HAIWEI’ AND LNAME=’YANG’


    八:多表连接的连接条件对索引的选择有着重要的意义,所以我们在写连接条件条件的时候需要特别注意。


    A、多表连接的时候,连接条件必须写全,宁可重复,不要缺漏。


    B、连接条件尽量使用聚集索引


    C、注意ON、WHERE和HAVING部分条件的区别


    ON是最先执行, WHERE次之,HAVING最后,因为ON是先把不符合条件的记录过滤后才进行统计,它就可以减少中间运算要处理的数据,按理说应该速度是最快的,WHERE也应该比HAVING快点的,因为它过滤数据后才进行SUM,在两个表联接时才用ON的,所以在一个表的时候,就剩下WHERE跟HAVING比较了。


    考虑联接优先顺序:


    (1) INNER JOIN

    (2) LEFT JOIN (注:RIGHT JOIN 用 LEFT JOIN 替代)

    (3) CROSS JOIN


    其它注意和了解的地方有:


    A、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。


    B、注意UNION和UNION ALL的区别。– 允许重复数据用UNION ALL好


    C、注意使用DISTINCT,在没有必要时不要用。


    D、TRUNCATE TABLE 与 DELETE 区别。


    E、减少访问数据库的次数。


    还有就是我们写存储过程,如果比较长的话,最后用标记符标开,因为这样可读性很好,即使语句写的不怎么样,但是语句工整,C# 有region,SQL我比较喜欢用的就是:


    –startof 查询在职人数


    SQL语句


    –end of


    正式机器上我们一般不能随便调试程序,但是很多时候程序在我们本机上没问题,但是进正式系统就有问题,但是我们又不能随便在正式机器上操作,那么怎么办呢?我们可以用回滚来调试我们的存储过程或者是SQL语句,从而排错。


    BEGINTRAN

    UPDATE a SET 字段=”

    ROLLBACK


    作业存储过程我一般会加上下面这段,这样检查错误可以放在存储过程,如果执行错误回滚操作,但是如果程序里面已经有了事务回滚,那么存储过程就不要写事务了,这样会导致事务回滚嵌套降低执行效率,但是我们很多时候可以把检查放在存储过程里,这样有利于我们解读这个存储过程,和排错。


    BEGINTRANSACTION

    –事务回滚开始

    –检查报错

    IF ( @@ERROR0 )
    BEGIN
    --回滚操作
    ROLLBACKTRANSACTION
    RAISERROR( '删除工作报告错误' 16 3 )
    RETURN
    END

    –结束事务

    COMMITTRANSACTION


    精简版:点击打开链接

    展开全文
  • select执行顺序

    2020-09-18 13:51:07
    ================ select 执行顺序======================= 一 、select语句关键字的定义顺序: select distinct <select_list> from <left_table> <join_type> join on <join_condition> ...

    ================ select 执行顺序=======================
    一 、select语句关键字的定义顺序:
    select distinct <select_list>
    from <left_table>
    <join_type> join
    on <join_condition>
    where <where_condition>
    group by <group_by_list>
    having <having_condition>
    order by <order_by_condition>
    limit <limit_number>

    二 、 select语句关键字的执行顺序:
    (7) select
    (8) distinct <select_list>
    (1) from <left_table>
    (3) <join_type> join <right_table>
    (2) on <join_condition>
    (4) where <where_condition>
    (5) group by <group_by_list>
    (6) having <having_condition>
    (9) order by <order_by_condition>
    (10) limit <limit_number>

    第一步 执行 from 知道先从<left_table>这个表开始的
    第二步 执行 on 过滤 根据 <join_condition> 这里的条件过滤掉不符合内容的数据
    第三步 执行 join 添加外部行
    -------- inner join 找两张表共同的部分
    --------- left join 以左表为准,找出左表所有的信息,包括右表没有的
    --------- right join 以右表为准,找出左表所有的信息,包括左表没有的
    --------- #注意:mysql不支持全外连接 full JOIN 可以用union
    第四步 执行 where 条件 where后加需要满足的条件,然后就会得到满足条件的数据
    第五步 执行 group by 分组 当我们得到满足where条件后的数据时候,group by 可以对其进行分组操作
    第六步 执行 having 过滤 having 和 group by 通常配合使用,可以对 满足where条件内容进行过滤
    第七步 执行 select 打印操作 当以上内容都满足之后,才会执行得到select列表
    第八步 执行 distinct 去重 得到select列表之后,如果指定有 distinct ,执行select后会执行 distinct去重操作
    第九步 执行 order by 排序 以上得到select列表 也经过去重 基本上就已经得到想要的所有内容了 然后就会执行 order by 排序asc desc
    第十步 执行 limit 限制打印行数,我们可以用limit 来打印出我们想要显示多少行。

    展开全文
  • 1.SELECT语句处理顺序 2.where 后条件执行先后顺序 1.SELECT语句处理顺序 (1)from (2)on (3)join (4)where (5)group by (开始使用select中的别名,后面的语句中都可以使用) (6)avg,sum.... (7)having (8...

    目录

    1.SELECT语句处理顺序

    2.where 后条件执行先后顺序


    1.SELECT语句处理顺序

    (1)from

     

    (2)on

    (3)join

    (4)where

    (5)group by (开始使用select中的别名,后面的语句中都可以使用)

    (6)avg,sum....

    (7)having

    (8)select

    (9)distinct

    (10)order by

    (11)limit

    过程解释:

    第一步:首先对from子句中的前两个表执行一个笛卡尔乘积,此时生成虚拟表vt1(若有3个表以上,选择其中相对小的两表),求笛卡尔积。不论是什么类型的联接运算,首先都是执行交叉连接(CROSS JOIN)

    第二步:接下来便是应用on筛选器,on中的逻辑表达式将应用到 vt1 中的各个行,筛选出满足on逻辑表达式的行,生成虚拟表 vt2

    第三步:如果是outer join 那么这一步就将添加外部行,left outer jion 就把左表在第二步中过滤的添加进来,如果是right outer join 那么就将右表在第二步中过滤掉的行添加进来,这样生成虚拟表 vt3

    第四步:如果 from 子句中的表数目多于两个表,那么就将vt3和第三个表连接从而计算笛卡尔乘积,生成虚拟表,该过程就是一个重复1-3的步骤,最终得到一个新的虚拟表 vt3。

    第五步:应用where筛选器,对上一步生产的虚拟表引用where筛选器,生成虚拟表vt4,在对于包含outer join子句的查询,到底在on筛选器还是用where筛选器指定逻辑表达式呢?on中指定逻辑表达式只会筛选outer join表的,不会对from的表进行筛选 ,where是最终筛选。

    第六步:group by 子句将中的唯一的值组合成为一组,得到虚拟表vt5。如果应用了group by,那么后面的所有步骤都只能得到的vt5的列或者是聚合函数(count、sum、avg等)。原因在于最终的结果集中只为每个组包含一行。这一点请牢记。

    第七步:应用cube或者rollup选项,为vt5生成超组,生成vt6.

    第八步:应用having筛选器,生成vt7。having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。

    第九步:处理select子句。将vt7中的在select中出现的列筛选出来。生成vt8.

    第十步:应用distinct子句,vt8中移除相同的行,生成vt9。事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。

    第十一步:应用order by子句。按照order_by_condition排序vt9,此时返回的一个游标,而不是虚拟表。sql是基于集合的理论的,集合不会预先对他的行排序,它只是成员的逻辑集合,成员的顺序是无关紧要的。对表进行排序的查询可以返回一个对象,这个对象包含特定的物理顺序的逻辑组织。这个对象就叫游标。正因为返回值是游标,那么使用order by 子句查询不能应用于表表达式。排序是很需要成本的,除非你必须要排序,否则最好不要指定order by,最后,在这一步中是第一个也是唯一一个可以使用select列表中别名的步骤。

    第十二步: LIMIT:取出指定行的记录,产生虚拟表VT11, 并将结果返回。

     

     

    2.where 后条件执行先后顺序

    mysql:其条件执行顺序是 从左往右,自上而下 ,所以筛选出数据量少的条件放在最前面、走索引的放在前面

    orcale:其条件执行顺序是从右往左,自下而上

     

     

    展开全文
  • having子句使用方法及select执行顺序

    千次阅读 2013-10-12 14:34:14
    having子句对已分组和汇总的结果表进行删除某些组操作。 having子句总是与group by子句一起使用,但是group by子句一般也可以单独使用。 having子句写在group by子句之后,order by...SQL> select job_id,count(employ
  • SQL Select 语句 Select 和 Order by执行顺序是怎样的? 网上查了些,都说先执行Select 那为什么 Order by 可以对非Select 字段进行排序???? 栗子:select id,name from tb_student order by age
  • SELECT语句执行顺序

    2010-05-15 13:16:46
    ansi sql中SELECT语句的执行顺序,很有用的哦
  • 关于Sql中Select语句的执行顺序,一直很少注意这个问题,对于关键字的使用也很随意,至于效率问题,因为表中的数据量都不是很大,所以也不是很在意。
  • SQL Select语句的使用小结
  • SQL 的select 语句完整的执行顺序

    千次阅读 2018-08-05 18:34:28
    SQL Select 语句完整的执行顺序:  1、from 子句组装来自不同数据源的数据;  2、where 子句基于指定的条件对记录行进行筛选;  3、group by 子句将数据划分为多个分组;  4、使用聚集函数进行计算;  5、使用...
  • Sql语句中select from等结构的执行顺序

    千次阅读 2018-09-04 10:00:50
    sql语句的分类:  DDL:数据库定义语言,...DQL:数据库查询语言,查询数据库中的记录(select from) DCL:数据库控制语言,数据库权限和安全级别的控制(grant revoke) sql语句的编写顺序: SQL语句的编写...
  • SQL Select 语句完整的执行顺序: 1、from 子句组装来自不同数据源的数据; 2、where 子句基于指定的条件对记录行进行筛选; 3、group by 子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用 ...
  • 1.select 语句的语法顺序(数字为执行顺序) 5. select [字段列表] 1.from [表名] 2. where [条件] 3.group by [列] 4. having [筛选条件] 6.order by [列] 注: order by可以跟列的别名,其他子句不可以...
  • select语句的逻辑执行顺序,你知道吗? 引言: 这个知识点不是很深的技术问题,但是他会让你对sql的编写、排忧及优化上会有很大的帮助。 但是你可以问一问你周围的人,有几个注意到这个问题了?又有几个能...
  • select,from等关键字执行顺序 参考相关链接原创 SQL 查询的执行顺序是怎样的? 按常规如下: 我们平常写的顺序是这样的: 1. SELECT 2. DISTINCT <select_list> 3. FROM <left_table> 4. <join_...
  • 在使用select查询的时候,有时需要对数据进行分组汇总(即:将现有的数据按照某列来汇总统计),这时就需要用到group by语句。select 语句中可以使用group by 子句将行划分成较小的组,然后,使用聚合函数返回每一个...
  •  当SELECT语句被DBMS执行时,其子句会按照固定的先后顺序执行:   (1)FROM 子句。   (2)WHERE 子句。   (3)GROUP BY 子句。   (4)HAVING 子句。   (5)SELECT 子句。   (6)ORDER BY 子句。...
  • SQL 查询语句先执行 SELECT?兄弟你认真的么?

    万次阅读 多人点赞 2020-05-02 19:57:21
    SQL 查询的执行顺序是怎样的? 好像这个问题应该很好回答,毕竟自己已经写了无数个 SQL 查询了,有一些还很复杂的。还装不了这个逼了?! 但事实是,我仍然很难确切地说出它的顺序是怎样的。 言归正传,...
  • MySQL的having和select顺序问题

    千次阅读 2020-05-02 23:27:20
    我觉得可以看做select在having进行分组过滤前已经解析过,从而having可以使用select中的别名,下面这个例子可以明显看出。 要求:从电子商务行业中,取出每个城市的数据相关职位数量超过50的城市和职位数量 写法1...
  • MySQL中select from where group by having order by的执行顺序 from Where Group by Having Select Order by 1.执行where xx对全表数据做筛选,返回第1个结果集。 2.针对第1个结果集使用group by分组,返回第2个...
  • hive中sql执行顺序

    千次阅读 2019-09-23 00:07:48
    1.from 2.joinon 或 lateral view explode(需炸裂的列) tbl as 炸裂后的列名 3.where 4.group by (开始使用select中的别名,从group 开始往后都可用) ...7.select 中若包含over()开窗函数,执行完非开...
  • 主要介绍了数据库中的SELECT语句逻辑执行顺序分析,并列出了一些例子,需要的朋友可以参考下
  • sql查询执行顺序

    万次阅读 2018-11-17 23:32:16
    目前还在查看,但是在查阅资料时发现了一些有益的知识,给大家分享一下,就是关于sql以及MySQL语句执行顺序: sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。 一、sql执行顺序 (1)from (3) ...
  • SQL语句的执行顺序

    千次阅读 2018-07-26 23:30:15
    查询语句中select from where group by having order by的执行顺序   1.查询中用到的关键词主要包含六个,并且他们的顺序依次为  select--from--where--group by--having--order by    其中select和...
  • SELECT语句定义: 一个完成的SELECT语句包含可选的几个子句。SELECT语句的定义如下:   <SELECT clause> [<FROM clause>] [<WHERE clause>] [<GROUP BY clause>] [<HAVING clause>]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 317,601
精华内容 127,040
关键字:

select执行顺序