精华内容
下载资源
问答
  • SQL Select 语句完整执行顺序: 1、from 子句组装来自不同数据源的数据; 2、where 子句基于指定的条件对记录行进行筛选; 3、group by 子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用 having ...

    SQL Select 语句完整的执行顺序:

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

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

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

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

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

    6、计算所有的表达式;

    7、select 的字段;

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

    SQL 语言不同于其他编程语言的最明显特征是处理代码的顺序。在大多数据库语言中,代码按编码顺序被处理。

    但在 SQL 语句中,第一个被处理的子句式 FROM,而不是第一出现的 SELECT。SQL 查询处理的步骤序号:

    (1) FROM <left_table>

    (2) <join_type> JOIN <right_table>

    (3) 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

    (9) ORDER BY <order_by_list>

    (10) <TOP_specification> <select_list>

    以上每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序

    或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句, 将跳过相应的

    步骤。

    逻辑查询处理阶段简介:

    1、 FROM:对 FROM 子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表 VT1。

    2、 ON:对 VT1 应用 ON 筛选器,只有那些使为真才被插入到 TV2。

    3、 OUTER (JOIN):如果指定了 OUTER JOIN(相对于 CROSS JOIN 或 INNER JOIN),保留表中未找到匹配

    的行将作为外部行添加到 VT2,生成 TV3。如果 FROM 子句包含两个以上的表,则对上一个联接生成的结果表

    和下一个表重复执行步骤 1 到步骤 3,直到处理完所有的表位置。

    4、 WHERE:对 TV3 应用 WHERE 筛选器,只有使为 true 的行才插入 TV4。

    5、 GROUP BY:按 GROUP BY 子句中的列列表对 TV4 中的行进行分组,生成 TV5。

    6、 CUTE|ROLLUP:把超组插入 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 的开始处选择指定数量或比例的行,生成表 TV11,并返回给调用者。

    展开全文
  • SQLselect语句完整语法 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的...

    select 语句查询格式

    select 目标表的列名或列表达式序列(2019-ave)
    from 基本表名 (最好加一个别名容易操作)和(或)视图序列
    [where 行条件表达式]
    [group by 列名序列
    [having 组条件表达式]]
    [order by 列名[asc(升序)| desc(降序)]…]

    1. 子句select-from-where的执行过程
      根据where子句的条件表达式,从from表中指定的表或视图中找到满足条件的元组,再按照select子句中的目标列表达式再选出元组中的属性形成结果表。

    2. 整个子句的执行过程
      读取from子句中的基本表,视图,进行笛卡尔积操作——>选取满足where子句中条件表达式的元组——>按照group子句里面的指定列进行分组,提取满足having子句条件的表达式的组——>按select给出的列名或列表达式求值取出——>根据order by对输出表进行排序,升序或降序。

    表的查询

    单表查询(最简单的查询)

    // 1.查询指定列
    select SNO, SNAME from s;
    
    //2.查询全部列(两种方法)
    select * from s;  /**列名非常的多时推荐使用**/
    select sno, sname, sex, avg, sdept from s; /**列的显示顺序与基表的顺序相同**/
    
    //3.查询经过计算的列
    //比如:查询全体学生的姓名及出生年份
    select sname, 2019 - ave from s;
    
    //4.选择表中的若干行
    /**distinct消除重复行,默认是all**/
    select distinct sno from sc; 
    /**用in查找指定集合的元组**/
    //比如:查询计算机系(CS),数学系(MA), 信息系(IS)学生的姓名和性别
    select sname, sex from s where sdept in ('CS', 'MA', 'IS');
    
    //5.涉及到空值的查询(只能用is不能用=)
    select sno,cno from sc where grade is null;
    select sno,cno from sc where grade is not null;
    
    //6.多重条件:可用逻辑运算符AND和OR来连接多个查询条件,AND的优先级高于OR,括号可以改变优先级
    select sno,cno from sc where  sdept in ('CS', 'MA', 'IS') and grade is not null;
    
    //7.order by子句:按一个或多个属性列排序。升序:ASC;降序:DESC;默认是升序
    select sno,cno from sc order by grade desc;
    * 当排序含空值时:ASC:排序列为空值的元组最后显示;DESC:排序列为空值的元组最先显示
    
    
    
    
    
    展开全文
  • SQL Update语句执行顺序执行顺序:从左到右,变量优先,逐行更新摘自CSDN的例子...

    SQL Update语句的执行顺序

    执行顺序:从左到右,变量优先,逐行更新

    摘自CSDN的例子(http://topic.csdn.net/u/20091030/16/7fd75fa6-bdb9-4516-9b27-48aef69703ba.html

    http://topic.csdn.net/u/20090904/16/e5dad9c7-fb59-41b9-b28d-e3b71c3e8420.html)

    1.变量优先

    create table #t (field1 varchar(10),field2 varchar(10))

    insert #t select 'a','b'

    declare @str varchar(10)

    set @str='Test'

    update #t set Field1=@str,@str=Field2,Field2=Field1

    select * from #t

    drop table #t

    /*field1     field2

    ---------- ----------

    b          a*/

    2.逐步更新

    if OBJECT_ID('ta') is not null drop table ta

    create table ta(empNo varchar(8) ,empName varchar(20),nIndex int)  --drop table ta

    insert into ta

    select 'A0001','張三',null

    union

    select 'A0002','李四',null

    union

    select 'A0003','王二',null

    union

    select 'A0004','趑六',null

    declare @tmpIndex int

    set @tmpIndex=0

    update ta set nIndex=@tmpIndex,@tmpIndex=@tmpIndex+1

    select * from ta

    /*

    empNo    empName    nIndex

    A0001    張三    1

    A0002    李四    2

    A0003    王二    3

    A0004    趑六    4

    */

    (1 行受影响)*/

    3.字段之间, 并行执行

    create table #t (field1 varchar(10),field2 varchar(10))

    insert #t select 'a','b'

    declare @str varchar(10)

    update #t set Field1=Field2,Field2=Field1

    select * from #t

    /*

    field1     field2

    ---------- ----------

    b          a

    */

    1, 先变量再字段

    2, 变量之间, 从左到右

    3, 字段之间, 并行执行

    相关文档:

    -- ================================================

    -- Template generated from Template Explorer using:

    -- Create Procedure (New Menu).SQL

    --

    -- Use the Specify Values for Template Parameters

    -- command (Ctrl-Shift-M) to fill in the parameter

    -- values below.

    --

    -- This block of comm ......

    bulk collect是可以看做是一种批获取的方式,在我们的plsql的代码段里经常作为into的扩展来使用。对于select id into v from .... 是一个常用的用法。不过这里只能是返回单条记录的时候,才能使用,如果是有多条记录我们就不能用这样的方式,而是使用fetch和循环的方式,不仅使用麻烦,而且性能也底下,这时我们的bulk coll ......

    首先给出两张测试表

    a(aid int, adata varchar(20))            b(bid int, bdata varchar(20))

    1.join 与 inner join

    执行如下语句:

    select * from a join b on a.aid = b.bid;

    我们会得到如下的结果:

    AID ADAT ......

    如何连接到另一台机器上的sql server 2005

    一、要进行两个地方的设置

    1         点开始—程序—sql server 2005 –配置工具—sql server 2005应用配置器 ,如图:

    选本地连接和远程连接中的  仅使用tcp/ip或& ......

    一、 简单查询

    简单的Transact-SQL查询只包括选择列表、from子句和WHERE子句。它们分别说明所查询列、查询的

    表或视图、以及搜索条件等。

    例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。

    SELECT nickname,email

    from testtable

    WHERE name='张三'

    (一) 选择列 ......

    展开全文
  • hive sql 语句正确执行顺序

    千次阅读 2021-03-14 16:33:29
    执行顺序:from ..on .. join .. .. where .. select .. group by .. having .. order by... limit ... map阶段 from 加载,进行表的查找和加载 where过滤 select查询 Reduce阶段 group by :对map端发来的文件...

    网上对select group by的执行顺有不同的说法,很容易让人挠头,这里通过代码成功验证 : group by>select

    正确的执行顺序:

    from ..on .. join .. where .. group by .. having .. select .. distinct .. order by .. limit

    案例:

    1.数据原表:

    2.执行sql:

    select
       dt,
       user_id,
       min(age) age,
       rank() over(partition by user_id order by dt) rk
    from
       user_age
    group by
       dt,user_id;

    3.执行结果:

    4.执行顺序详解:

    sql里有分区和分组两种操作,执行顺序不同会导致其结果也不同。其中分区操作为rank() over(partition by user_id order by dt) rk,分组操作为group by dt,user_id。

    由于group by>select,所以先执行group by操作,再执行select操作。

    具体执行步骤:

    步骤1:执行group by dt,user_id,执行结果如下:

    注:group by 后面有两个字段 dt,user_id,表示将这两个字段看成一个整体进行分组。

    步骤2:执行select dt,user_id,min(age) age,rank() over(partition by user_id order by dt) rk

    ①依次执行dt,user_id,min(age) age由于min(age)这里出现聚合,所以会先对表进行聚合,聚合后的结果如下:

    ②接着执行rank() over(partition by user_id order by dt) rk 先根据user_id进行分区,再根据dt进行排序,结果如下:


    由于select后没有其他操作了,所以该表为最终结果。

     

     

    附:执行计划:

    Map Operator Tree:
    TableScan
                alias: 表名   -- 相当于 from ...

    Filter Operator
                  predicate: where中的字段  -- 过滤where字段的条件

    Select Operator
                    expressions: select 中的字段 + 类型type    -- select
                    outputColumnNames: 输出的字段  -- select
    Group By Operator
                      aggregations: 聚合函数 sum(age)/count(age)等 
                      keys: group by 中的字段 + 类型type 
    Reduce Output Operator
                     map端本地的reduce

    Reduce Operator Tree:
    Group By Operator
              aggregations: sum(VALUE._col0)   --reduce 聚合函数 对虚拟列
              keys: KEY._col0 (type: string), KEY._col1 (type: string), KEY._col2 (type: string) 
              mode: mergepartial
                  outputColumnNames: _col0, _col1, _col2, _col3 --为临时结果字段按规则起的临时字段名
    Select Operator
                expressions: _col0 (type: string), _col1 (type: string), _col2 (type: string), _col3 (type: bigint) --select
                outputColumnNames: _col0, _col1, _col2, _col3 -- 输出虚拟列(为临时结果字段按规则起的临时字段名)
                
    File Output Operator
                  compressed: false

     

    展开全文
  • select语句的语法格式如下。 select 字段列表 from 数据源 [ where条件表达式 ] [ group by 分组字段 [ having条件表达式 ] [ order by 排序字段 [ asc | desc ] ] 2.执行顺序 from wher group by having select ...
  • 1.SELECT语句处理顺序 2.where 后条件执行先后顺序 1.SELECT语句处理顺序 (1)from (2)on (3)join (4)where (5)group by (开始使用select中的别名,后面的语句中都可以使用) (6)avg,sum.... (7)having (8...
  • 这是对SQL语句完整执行顺序(01)的补充:数据库是mysql,使用的数据库表名称是my_student.表的完整数据信息是:完整语法是:Select [select选项] 字段列表[字段别名]/* from 数据源 [where 字句] [group by子句 ]...
  • 标准SQL语句执行顺序的理解 SQL语句执行顺序的解读 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_type> JOIN <right_table> (2) ON <join_condition&...
  • SQL语句条件执行顺序

    2021-08-03 11:00:23
    1.FROM 2.ON 3.JOIN 4.WHERE 5.GROUP BY 6.WITH CUBE or WITH ROLLUP 7.HAVING 8.SELECT 9.DISTINCT 10.ORDER BY 11.TOP
  • sqlserver语句执行顺序

    2021-03-28 14:16:25
    注:sql server 不同于其他编程预言的最明显特征是处理代码的顺序。 每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入。这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表...
  • 1.书写顺序 (8)SELECT (6) avg,sum (9)DISTINCT <select_list> (1)FROM <table> (3)<join_type> JOIN <join_table> (2)ON <join_condition> (4)WHERE <where_condition> (5)...
  • 我们是以SQL Server 2005来学习的SQL语句,关于SQL Server的图形界面操作,和关于视图、数据库备份还原这些大家下来要下来看一下。关于Oracle,我们都已经学习了SQL语句,那么Oracle其实已经学习了一大半,就接下来...
  • SELECT语句执行顺序

    2021-11-08 21:51:07
    SELECT语句中子句的执行顺序SELECT语句中子句的输入顺序是不一样的,所以并不是从SELECT子句开始执行的,而是按照下面的顺序执行: 开始->FROM子句->WHERE子句->GROUP BY子句->HAVING子句->ORDER ...
  • sql select语句执行顺序

    2021-01-19 10:31:04
    很重要,很常用的知识点,一定要刻到脑子里:心法口诀 from where选出记录 分组聚合再筛选(having) 计算表达式 选取后排序。
  • SELECT语句执行的逻辑查询处理步骤:(8)SELECT (9)DISTINCT(11) (1)FROM (3) JOIN (2) ON (4)WHERE (5)GROUP BY (6)WITH {CUBE | ROLLUP}(7)HAVING (10)ORDER BY 1.FROM2.ON3.JOIN4.WHERE5.GROUP BY6.WITH CUBE ...
  • MySQL,SQL语句执行顺序

    千次阅读 2021-01-19 16:30:59
    1.SQL执行顺序select 考生姓名, max(总成绩) asmax总成绩fromtb_Gradewhere 考生姓名 is not nullgroup by考生姓名having max(总成绩) > 600order by max总成绩(1). 首先执行 FROM 子句, 从 tb_Grade 表组装...
  • sql 查询语句执行顺序

    千次阅读 2021-05-29 20:50:09
    了解 sql执行顺序是很必要的,执行顺序不同可能查询到的结果最后也会不一样。 select 语句完整语法如下: SELECT    DISTINCT < select_field >   FROM < ...
  • 关于 sql 语句执行顺序网上有很多资料,但是大多都没进行验证,并且很多都有点小错误,尤其是对于 select 和 group by 执行的先后顺序,有说 select执行,有说 group by 先执行,到底它俩谁先执行呢?...
  • MySQL sql语句执行顺序

    2021-02-08 00:06:28
    sql语句select语句查询顺序(7)SELECT(8)DISTINCT(1)FROM(3)JOIN(2)ON(4)WHERE(5)GROUPBY(6)HAVING(9)ORDERBY(10)LIMIT一、执行FROM语句,mysql是从左往右执行,oracle是从右往左执行...
  • 目录 1、执行FROM语句 2、执行ON过滤 ...程序员对sql语句执行顺序的透彻掌握,是避免编程中各种bug和错误,歧义语句的不二法则。 SELECT DISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT S
  • 熟练掌握sql语句执行顺序,才能避免编程中各种bug和错误。 文章目录一、Select 语句完整执行顺序二、使用步骤1.引入库2.读入数据总结 一、Select 语句完整执行顺序 1、from 子句组装来自不同数据源的数据; 2...
  • 上一篇讲述了Oracle的SELECT语法的执行顺序,这篇讲述MySQL的SELECT语法...目录一、SELECT语句的处理过程1、 FROM阶段2、 WHERE阶段3、 GROUP BY阶段4、 HAVING阶段5、 SELECT阶段6、 ORDER BY阶段7、 LIMIT阶段一、...
  • select语句书写顺序 select …要显示的内容.. from …表名.. where 条件…. group by …分组的列 … having …分组后的条件… order by …排序 底层执行顺序 select …5… from …1.. where …2.. group by ..3…...
  • Oracle sql语句执行顺序

    2021-05-01 05:12:12
    sql语法的分析是从右到左一、sql语句执行步骤:1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。2)语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。3)视图转换,将...
  • 查询分析器里好像是按顺序一条一条的执行,但在数据库内部呢?我用的生产系统有一个BUG,就是物品档案里的编码进行统一转换时,会把所以数据表里用到某个编码的地方,全转换为新的编码...查询分析器里好像是按顺序一...
  • MySQL 语句执行顺序

    2021-01-20 02:22:04
    (1)SQL语句的语法顺序SELECT[DISTINCT]FROMJOINONWHEREGROUP BYHAVINGUNIONORDER BYLIMIT(2)SQL执行顺序FROM:将数据从硬盘加载到数据缓冲区,方便对接下来的数据进行操作。WHERE:从基表或视图中选择满足条件的...
  • SQL Select 语句完整执行顺序:1、from 子句组装来自不同数据源的数据;2、where 子句基于指定的条件对记录行进行筛选;3、group by 子句将数据划分为多个分组;4、使用聚集函数进行计算;5、使用 having 子句筛选...
  • sql语句的别名问题:where后不能用字段的别名因为一、sql执行顺序(1)from(3)join(2)on(4)where(5)group by(使用select中的别名)(6)avg,sum….(7)having(8)select(9)distinct(10)order by1、在MySQL中:(1)group by中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 241,099
精华内容 96,439
关键字:

sql的select语句完整的执行顺序