sql 执行顺序

前段时间去参加笔试,结果考了一些sql问题让我措手不及。因为长期使用linq的关系,我居然沦落到连sql子查询语法都忘记的地步,真是失败。

其中有道题目,问的是sql语句关键字的执行顺序问题。这个问题倒是让我觉得挺新颖(井底之蛙) 。以前从来没有去考虑这个问题,应该是因为每条sql语句都让人觉得太自然太口语化的原因(有点不知道怎么形容这个感觉了),都不会想去研究这个问题。

回来后,专门上网找了下相关内容,从别人的博客文章中找到以下内容:

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

 

1、from子句组装来自不同数据源的数据;
2、where子句基于指定的条件对记录行进行筛选;
3、group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。

见鬼的是里面没有提到“select”这个关键字。我之前跟同学讨论,认为它应该是在最后执行,,因为觉得应该是等条件都执行完毕了再取数据——但是也没有找到什么确切的证据。今天跟另外一位女同学讨论了这个东西,果然女同志比较细心,她对“select”提了别的意见。于是我也开始动摇了,,因为orderby是要判断select里的有没有包含orderby后的字段的。这个时候中文搜索也只能找到如上内容了,只好动用英文搜索,搜索关键字:sql Execute order,果然找到一个结果:

 

  1. FROM clause
  2. WHERE clause
  3. GROUP BY clause
  4. HAVING clause
  5. SELECT clause
  6. ORDER BY clause

这个答案我觉得才是合理的答案。

当然把答案写在这并不是为了下次笔试的时候有个答案,因为每次笔试问题都会不一样的。只有基础扎实,才可能兵来将挡,水来土掩。希望大家在平时要注意积累,别像我一样书到用时方恨少 

根据评论的指正,我还是去测试了一下,唉,果然order by 跟select 是没有关系的。难道是我linq搞得不清不楚,连sql也不清不楚起来了?看了老外的资料也不能相信啊。以后可别犯这种亚里士多德式的错误了,直接一试就知道的东西,要改正自己这种劣根性。

posted @ 2009-06-28 17:27  _龙猫  阅读(1381)  评论(6编辑  收藏  举报