关于sql语句的执行顺序问题
2013-10-01 11:20
405 查看
我做的第一个项目是.net的网站,记得刚进项目组的时候,我组长让我调查关于sql语句的执行顺序,现在还清楚的记得当时自己是百度到的,现在想想真二,如果别人只是要知道答案的话,他为啥不自己百度呢!在之后的学习之中,渐渐了解到关于sql语句的执行顺序了。这些看来可能都是理论的事,在后来的学习中,会慢慢的了解。这也是决定你这个语句查询效率的关键,大概如下:
FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到
VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
SELECT:处理SELECT列表,产生VT8.
DISTINCT:将重复的行从VT8中移除,产生VT9.
ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用
FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1
ON:对VT1应用ON筛选器。只有那些使<join_condition>为真的行才被插入VT2。
OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到
VT2,生成VT3.如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。
WHERE:对VT3应用WHERE筛选器。只有使<where_condition>为true的行才被插入VT4.
GROUP BY:按GROUP BY子句中的列列表对VT4中的行分组,生成VT5.
CUBE|ROLLUP:把超组(Suppergroups)插入VT5,生成VT6.
HAVING:对VT6应用HAVING筛选器。只有使<having_condition>为true的组才会被插入VT7.
SELECT:处理SELECT列表,产生VT8.
DISTINCT:将重复的行从VT8中移除,产生VT9.
ORDER BY:将VT9中的行按ORDER BY 子句中的列列表排序,生成游标(VC10).
TOP:从VC10的开始处选择指定数量或比例的行,生成表VT11,并返回调用
相关文章推荐
- 关于sql和MySQL的语句执行顺序(必看!!!)
- 请教一个关于javascript执行sql语句的问题
- 关于SQL中 动态执行SQL语句并且获得动态SQL语句输出参数值的问题
- 关于mysql 执行批量的sql 语句问题:&allowMultiQueries=true
- weblogic hibernate关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题(www.50xiao.com)
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 关于sql和MySQL的语句执行顺序(必看!!!)
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题
- 关于Qt使用QSqlQuery执行sql语句时出现out of memory的问题
- 关于sql 语句的各个关键字的执行顺序:
- sql语句的执行顺序和别名问题
- 关于sql和MySQL的语句执行顺序(必看!!!)
- 关于sql语句先后顺序问题
- 关于sql条件语句where id in (@参数)执行报错问题(转换成数据类型 int 时失败)(
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- 关于No Dialect mapping for JDBC type :-9 hibernate执行原生sql语句问题 .
- 关于EF中直接执行sql语句的参数化问题
- 关于Sql关键字SELECT FROM GROUP ORDER 等的执行顺序问题的解释
- 关于sql和MySQL的语句执行顺序
- SQL语句中的AND和OR执行顺序问题