• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > T-SQL 查询语句的执行顺序解析

T-SQL 查询语句的执行顺序解析

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了查询语句,执行顺序等相关知识,希望本文的分享对您有所帮助

查询语句大家用的很多,但是知道语句执行的顺序和各各阶段的作用的人却很少。这里给大家简单介绍一下

(5)SELECT (5-2) DISTINCT(5-3)TOP()(5-1)

(1)FROM (1-J) JOIN on

(2)WHERE

(3)GROUP BY

(4)HAVING

(6)ORDER BY ;

  每一步都会生成一个虚拟表,该虚拟表会作为下一步的输入。这些虚拟表对于调用者是不可用的,只有最后一步生成的虚拟表才会返回给调用者。如果在查询中没有指定某一个子句,则会跳过相应的步骤。接下来就简单地描述一下这些不同的逻辑步骤。

(1)FROM FROM阶段标识出查询的来源表,处理表运算符,每个表运算符也会应用一系列子阶段。例如,在联接运算中涉及的阶段是(1-J1)笛卡尔积、(1-J2)ON筛选器和(1-J3)添加外部行。FROM阶段生成虚拟表VT1。

(1-J1)笛卡尔积 这个阶段对表运算符涉及的两个表执行笛卡尔积(交叉联接),生成虚拟表VT1-J1。

(1-J2)ON筛选器 这个阶段对VT1-J1中的行根据ON子句中出现的谓语进行筛选。只有让该谓语取值为TRUE的行,才能插入VT1-J2中。

(1-J3)添加外部行 如果指定了OUTER JOIN(相对于CROSS JOIN 或 INNER JOIN),则将保留表(preserved table)中没有找到匹配的行,作为外部行添加到VT1-J2中,生成VT1-J3。

(2)WHERE 这个阶段根据在WHERE子句中出现的谓语()对于VT1中的行进行筛选。只有让谓语计算结果为TRUE的行,才会插入VT2中。

(3)GROUP BY 按照GROUP BY子句中指定的列名列表,将VT2中的行进行分组,生成VT3。

(4)HAVING 根据HAVING子句中出现的谓语()对VT3中的分组进行筛选。只有让谓语计算结果为TRUE的组,才会插入到VT4。

(5)SELECT 处理SELECT子句中的元素,生成VT5。

(5-1)计算表达式 计算SELECT列表中的表达式,生成VT5-1。

(5-2)DISTINCT 删除VT5-1中的重复行,生成VT5-2。

(5-3)TOP 根据ORDER BYi子句定义的逻辑排序,从VT5-2中选择前面指定数量或百分比的行,生成表VT5-3。

(6)ORDER BY 根据ORDER BY子句中指定的列名列表,对VT5-3中的行进行排序,生成游标VC6。

以上就是一个完整的T-SQL语句的执行过程,希望能给大家帮助。

以上内容摘自《Microsoft SQL Server 2008技术内幕 T-SQL查询》一书。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析Mysql多表查询的实现
  • 基于mysql查询语句的使用详解
  • MySQL多表之间字段的匹配实现代码
  • mysql嵌套查询和联表查询优化方法
  • mysql多表联合查询返回一张表的内容实现代码
  • 工作中常用的mysql语句分享 不用php也可以实现的效果
  • mysql 查询第几行到第几行记录的语句
  • 关于SQL嵌套的误解分析
  • mysql删除重复记录语句的方法
  • mysql 前几条记录语句之(limit)

相关文章

  • 2017-05-11MySql状态查看方法 MySql如何查看连接数和状态?
  • 2018-12-05sqlserver2005 行列转换实现方法
  • 2018-12-05Mac下brew方式安装mysql
  • 2018-12-05Mysql系列(五)索引功能
  • 2018-12-05删除SQL 某个表中重复的记录
  • 2017-05-11mysql中如何使用正则表达式查询
  • 2018-12-05mongodb 3.4下远程连接认证失败应该怎么办?
  • 2017-05-11深入分析Mysql中limit的用法
  • 2018-12-05MySQL性能调优
  • 2018-12-05SQL Server的通用分页存储过程 未使用游标,速度更快!

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 让MySQL支持中文排序的实现方法
    • Mysql中Identity 详细介绍
    • 在WIN命令提示符下mysql 用户新建、授权、删除,密码修改
    • 如何恢复Mysql数据库的详细介绍
    • sqlserver 数据库被注入解决方案
    • 通过sql语句将blob里的char取出来转成数字保存在其它字段
    • MySQL数据表字段内容的批量修改、清空、复制等更新命令
    • linux mysql忘记密码的多种解决或Access denied for user 'root'@'localhost'
    • mysql存储过程中使用游标的实例
    • MySQL数据库恢复(使用mysqlbinlog命令)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有