设为首页 收藏本站
查看: 2027|回复: 0

[经验分享] SQL SERVER 系列(1)那些我们错过的细节

[复制链接]

尚未签到

发表于 2015-6-28 11:39:33 | 显示全部楼层 |阅读模式
从去年开始用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新增的一些特性。
最近又一次仔细看了一遍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,
        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’
开篇就写到这吧,第一次写博客很多排版的地方不是很好,如果大家在这个系列中有什么更好的语句或者我有讲的有误的地方希望大家不要吝啬您的意见,我会关注您的评论,并改正。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81157-1-1.html 上篇帖子: SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database) 下篇帖子: SQL Server数据库访问通用类
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表