导航

SQL(一)

Posted on 2011-11-27 18:05  网名还没想好  阅读(194)  评论(0编辑  收藏  举报
 
      一,SQL语句执行顺序:FROM,WHERE,GROUP BY,HAVING,SELECT,ORDER BY。这意味着对于SELECT子句之前处理的那些句子,在SELECT中为其分配的别名并不存在。不如以下这就是无效应用的一个例子:
 
                                SELECT order,YEAR(orderdate) AS orderyear
                                FROM salary.orders
                                WHERE orderyear>2006
     二,NULL值。SQL使用的是三值谓词逻辑:TRUE,FALSE,UNKNOWN。SQL对查询过滤条件处理的正确定义是“接受TRUE”(意味着虑掉UNKNOWN和FALSE),对CHECK约束处理的正确定义是“拒绝FALSE”(意味着接受TRUE和UNKNOWN),UNKNOWN 的微妙之处是对它取反时结果仍是KNOWN,例如,NOT(salary>0),当salary为NULL时,salary>0的结果仍是UNKNOWN,NULL=NULL也是KNOWN等,因此,SQL提供了IS NULL和IS NOT NULL 两个谓词用来取代=NULL和<>NULL。但是,在分组和排序时SQL认为NULL值是相等的,也就是说GROUP BY字句会认为相同列为NULL的是同一组的。ORDER BY也会对所有NULL进行排序,T-SQL把NULL值排在了有效值之前。
     三,同时操作(all-at-once-operation)
SQL中,同一逻辑处理阶段中出现的所有逻辑表达式都是同时进行计算的,例如下面查询就是无效的:
                                    SELECT ORDERID, YEAR(orderdate)AS date,date+1 AS nextdate
                                    FROM Salary.Orders