灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4359回复:0

[SQL Server]SQL SERVER系列(1)那些我们错过的细节

楼主#
更多 发布于:2012-09-04 18:07


SQL SERVER系列(1)那些我们错过的细节

从去年开始用Oracle(注:本人使用的是9i)后很久没有用SQL SERVER 2008 写SQL 了,昨天打开SQL SERVER 2008编辑器,不由想起了曾经教我怎么写出性能更高的SQL 和 教我写 第一个Jquery插件的兄弟,在此由衷的感谢 : “Ben(小强)”(没有他也许我现在还是超级菜鸟,现在他还是很年轻的构架师哦),第二个要感谢的人是 ”万哥” (第一个教我写Jquery插件,小强就是万哥培养出来的哦,元老级,呵呵)。
为了在使用Oracle的同时,不让自己SQL  SERVER 退步,虽然Oracle 和SQL SERVER 语句大部份语句有相同之处,当使用Oracle 后发现SQL SERVER 有些特性比Oracle 方便不少.例如SQL SERVER 行转列 “PIVOT” 语句 列转行 “UNPIVOT” 语句 比 Oracle 的 行转列 ,列转行 要方便的多。所以为了加深对数据库知识,同时也为了自己不偷懒准备写SQL一套系列。系列中的SQL语句大部门来自项目通常遇到的问题怎么用更好的SQL去解决,同时也会讲解SQL SERVER 2008新增的一些特性。  www.atcpu.com  

最近又一次仔细看了一遍SQLSERVER,发现了很多细节以前没注意到,确实很多经常我们使用的东西,很多时候一些基础的东西我们会忽略掉,有时候有些很基础的东西是非常重要的。例如:简单的Select语句中就有些我们经常忽视掉的东西

(1):对于刚写SQL的人来说,很多人写查询的时候通常会写 SELECT * FROM table_list,注:作为一个好习惯,显示指定想要获取的列要比SELECT * 更好,如果在应用程序中使用了SELECT *,那么程序希望从查询中得到所有的列,如果之后要添加新列或删除列,那么可能你就不能调用这个程序了,因为在结果集中是新列是不希望出现的。SELECT * 返回的数据可能比真正的需要的要多,这样会增加结果集的大小和SQL SERVER 实例的数据检索操作,所以它可能对性能造成负面影响。对于需要每秒几千次事物来说,结果集返回的列数对性能的影响是不可低估的。

(2):当我们用Select 查询中,where 子句用来限制查询结果集返回的行。语句为:
SELECT select_list
FROM table_list
[where search_conditions]
Where 子句使用了搜索条件,它们确定了查询返回的行,搜索条件使用了谓词,它们计算结果为TRUE,FALSE或UNKNOWN 的表达式。 在搜索条件中有NULL 数据时可能会出现UNKNOWN值,很多时候我们是否考虑过什么是NULL值:NULL值不同于空白或零值,只表示值未知,并且两个NULL值并不相等。不产生UNKNOWN值的话是不能做比较的。

(3):AND , OR , NOT 优先级 有时候更具业务的要求WHERE  子句后面会用到AND,OR,NOT 当同时使用这三个语句时,我们需要括号来明确语句的意思。然而AND, OR,NOT 优先级是怎么样的呢?NOT优先级最高,比AND高,AND运算符的优先级比OR运算符高,当在统一where   子句中同时使用 AND 和OR 运算时,如果不使用括号可能会导致意想不到的结果:SELECT  title,
        Firstname,  www.atcpu.com  
        Lastname
Where title=’yu’ and
firstname=’wang’ or
lastname=’jin’
这段代码是返回title为yu,  并且firstname为wang或lastname 为jin的所以行吗?或者是firstname为wang且title为yu,  或lastname 为jin 的所以行吗? 所以我们要括号来明确条件:SELECT  title,
        Firstname,
        Lastname
Where ( title=’yu’ and
firstname=’wang’ ) or
lastname=’jin’



作者 用未来思考现在

喜欢0 评分0
游客

返回顶部