Group By和Having,Where,Order by语句的执行顺序
2015-12-11 23:38
309 查看
Group By和Having,Where,Order by语句的执行顺序
一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。
首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组
接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉
最后按照Order By语句对视图进行排序,这样最终的结果就产生了。
在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
PS:
凡是在group by后面出现的字段,必须同时在select后面出现;
凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。
Group By和Having,Where,Order by语句的执行顺序
一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。
首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组
接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉
最后按照Order By语句对视图进行排序,这样最终的结果就产生了。
在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
PS:
凡是在group by后面出现的字段,必须同时在select后面出现;
凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。 http://www.2cto.com/database/201306/217906.html
一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。
首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组
接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉
最后按照Order By语句对视图进行排序,这样最终的结果就产生了。
在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
PS:
凡是在group by后面出现的字段,必须同时在select后面出现;
凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。
Group By和Having,Where,Order by语句的执行顺序
一个SQL语句往往会产生多个临时视图,那么这些关键字的执行顺序就非常重要了,因为你必须了解这个关键字是在对应视图形成前的字段进行操作还是对形成的临时视图进行操作,这个问题在使用了别名的视图尤其重要。
Group By 和 Having, Where ,Order by这些关键字是按照如下顺序进行执行的:Where, Group By, Having, Order by。
首先where将最原始记录中不满足条件的记录删除(所以应该在where语句中尽量的将不符合条件的记录筛选掉,这样可以减少分组的次数)
然后通过Group By关键字后面指定的分组条件将筛选得到的视图进行分组
接着系统根据Having关键字后面指定的筛选条件,将分组视图后不满足条件的记录筛选掉
最后按照Order By语句对视图进行排序,这样最终的结果就产生了。
在这四个关键字中,只有在Order By语句中才可以使用最终视图的列名,如:
SELECT FruitName, ProductPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProductPlace = N'china')
ORDER BY IDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
PS:
凡是在group by后面出现的字段,必须同时在select后面出现;
凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面.
having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。 http://www.2cto.com/database/201306/217906.html
相关文章推荐
- LAMP 2.8 php.ini配置文件详解
- Android中的帧动画
- LeetCode 283:Move Zeroes
- SpringMVC中的HTTP跳转
- 网页中双击事件
- Hibernate 入门
- 2D图形截取
- Hardcoded string "下一步", should use @string resource警告
- 图片 样式更改
- comboBox选中的值保存到数据库中,且该数据是外键
- 论文查重网站
- Codeforces Round #335 (Div. 2) D. Lazy Student
- MAHOUT入门(一)——环境变量的配置
- 2015-12-11复习之CSS3动画多列
- Chrome DevTools的15个使用技巧(译)
- VS2008下直接安装使用Boost库1.46.1版本
- C++ Operators
- vs08自带sqlserver后如何安装SQL Server 2008 Management Studio Express
- This text field does not specify an inputType or a hint
- C# 重绘 windows 窗体标题栏和边框