日期:2014-05-18  浏览次数:20599 次

今天大年初一,2012年第一天出现了纠结的问题。
SQL code

select sr_date, sr_name,sr_title,sr_text from testTB 
--后面是这三种方案。
--1,这样用 
--where sr_date >='2010-10-10' and sr_date <='2010-11-10' and sr_date <>''
--Group By sr_date
--order by  sr_date desc

--2,是这样用? 
--Group By sr_date 
--having sr_date >='2010-10-10' and sr_date <='2010-11-10' and sr_date <>'' 
--order by  sr_date desc 

--3,还是这样用?
--where sr_date >='2010-10-10' and sr_date <='2010-11-10'
--Group By sr_date
--having   sr_date <>'' 
--order by  sr_date desc



代码执行的顺序是否是:from-----where ---group by---having----order by -----select?
运行三种代码结果都一样,都能得到我想要的结果,但是纠结在不知道选哪种好?
大家帮忙看看选哪种好,为什么,或者有更好的方案。

人在,每五分刷一次贴,有满意的答案,很快会结贴。
恭祝大家新年快乐,恭喜发财!

------解决方案--------------------
SQL code
SQL Select语句完整的执行顺序: 

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


另外:一个查询语句各个部分的执行顺序: 
--8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
--(1)  FROM <left_table> 
--(3)    <join_type> JOIN <right_table> 
--(2)      ON <join_condition> 
--(4)  WHERE <where_condition> 
--(5)  GROUP BY <group_by_list> 
--(6)  WITH {CUBE | ROLLUP} 
--(7)  HAVING <having_condition> 
--(10) ORDER BY <order_by_list>

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

一个查询语句各个部分的执行顺序: 
--8) SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
--(1) FROM <left_table> 
--(3) <join_type> JOIN <right_table> 
--(2) ON <join_condition> 
--(4) WHERE <where_condition> 
--(5) GROUP BY <group_by_list> 
--(6) WITH {CUBE | ROLLUP} 
--(7) HAVING <having_condition> 
--(10) ORDER BY <order_by_list>
------解决方案--------------------
sr_date >= ... and sr_date <= ...

sr_date <> '' 是不是多余了?!
------解决方案--------------------
要明白sql的执行顺序。