摘要: 引言 T-SQL不仅仅是一个用于查询数据库的语言,还是一个可以对数据进行操作的语言。基于列的CASE表达式就是其中一种,不像其他查询语句可以互相替代(比如用子查询实现的查询也可以使用Join实现),CASE表达式在控制基于列的逻辑大部分是无法替代的。下面文中会详细讲解CASE表达式。简介 基于列的逻辑表达式,其实就是CASE表达式.可以用在SELECT,UPDATE,DELETE,SET以及IN,WHERE,ORDER BY和HAVING子句之后。由于这里讲的是T-SQL查询,所以只说到CASE表达式在SELECT子句和ORDER BY子句中的使用。 CASE表达式实现的功能类似于编程语言中的 阅读全文
posted @ 2013-09-25 17:14 Todd Zhang 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 作为面试官从在大学里面试社团大一新生,到加入百度后帮公司面试候选人,我觉得我对面试这件事一直不得要领。百度提供面试培训,也允许参考或使用题库,但我还是觉得不知道如何判断给不给一名候选人通过我这关。偶尔我会遇到非常优秀的实习生候选人,我能十分确定我要给他过,甚至想方设法确保他能来。其它时候,我觉得我的判断随机性太大,或许还不如一枚硬币做得好。在百度做二面的时候,我往往会问一些组合问题,就是候选人需要有扎实的基础加上一定的解题能力才能做出来的。我假设一面的面试官已经问过基础问题,所以我不会再问基础问题。结果通常是,候选人的基础不够扎实,会作出一些错误的假设,甚至面对组合问题就无从下手,不知道如何分 阅读全文
posted @ 2013-09-25 13:40 Todd Zhang 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 概述 和其他高级语言一样,T-SQL中也有用于控制流程的语句。T-SQL中的流程控制语句进一步扩展了T-SQL的力量……使得大部分业务逻辑可以在数据库层面进行。但很多人对T-SQL中的流程控制语句并没有系统的了解,本篇文章会系统的对T-SQL语句中的流程控制语句进行系统讲解。基本概念 在没有流程控制语句的情况下,T-SQL语句是按照从上到下的顺序逐个执行: 使用流程控制语句可以让开发人员可以基于某些逻辑进行选择性的跳转,实现了类似高级语言的跳转结构: 流程控制语句的使用范围和GO关键字 流程控制语句只能在单个批处理段(Batch),用户自定义函数和存储过程中使用。不能跨多个批处理段或者用户自. 阅读全文
posted @ 2013-09-25 13:30 Todd Zhang 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 最近一直在研究JQuery,这个东西还是很博大精深的.下面分享一下我的学习总结.$(document).Ready()方法 VS OnLoad事件 VS $(window).load()方法 接触JQuery一般最先学到的是何时启动事件。在曾经很长一段时间里,在页面载入后引发的事件都被加载在”Body”的Onload事件里. 对于Body的Onload事件和JQuery的Ready方法相比,有很多弊端.比如:1.加载多个函数的问题 在Onload事件中只能这样加载,很丑陋…而在JQuery中你可以利用多个JQuery.Ready()方法,它们会按次序依次执行2.代码和内容不分离 这个貌似不用. 阅读全文
posted @ 2013-09-25 10:00 Todd Zhang 阅读(189) 评论(0) 推荐(0) 编辑
摘要: jQuery选择器的强大不仅在于选择器支持基本的css选择符,还支持很多CSS的伪类选择符,甚至可以自定义选择符,下面让我们来看看一些伪类选择符 :nth-child的用法 nth-child是一个css3伪类选择符,在jQuery中被实现了,在Jquery API中对nth-child的定义是:”匹配其父元素下的第N个子或奇偶元素“。读着感觉有点绕口,下面让我们通过例子来说明: one two three four five six seven eight nine 1 2 3 4... 阅读全文
posted @ 2013-09-25 09:59 Todd Zhang 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 概述 变量对于一种语言是必不可少的一部分,当然,对于T-SQL来讲也是一样。在简单查询中,往往很少用到变量,但无论对于复杂的查询或存储过程中,变量都是必不可少的一部分.变量的种类 在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable). 1.全局变量是由系统定义的,在整个SQL SERVER实例内都能访问到的变量.全局变量以@@作为第一个字符,用户只能访问,不能赋值。 2.局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和赋值。 一个简单的例子如下 因为全局变量仅仅是用于读取系统的. 阅读全文
posted @ 2013-09-25 09:58 Todd Zhang 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 概述 关系数据库的起源起源于数学中的集合概念.所以集合与集合之间,也同样继承了数学集合之间的运算.而对于在关系数据库中,常常用于两个数据集中并没有直接的关系数据库中的“关系”,比如外键.但两个数据集会有间接的关系,比如两届比赛,参加比赛人员集合之间会有间接关系.数据集运算的种类 在T-SQL中,关系运算实际上可以分为四类,首先看我们举例子用的表: 这里的例子表分别为两个不同会议参加的人员记录,分别为Meeting1和Meeting2,如下: 关系运算的具体可以分为以下四类:1.A∩B,既是所求数据集既在A中,又在B中 在实例表中,实际的例子为既参加第一个会议,又参加第二个会议人的集合,如下.. 阅读全文
posted @ 2013-09-25 09:56 Todd Zhang 阅读(151) 评论(0) 推荐(0) 编辑
摘要: SQL Server 触发器触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。Ø 什么是触发器 触发器对表进行插入、更新、删除的时候会自动执行的特殊存储过程。触发器一般用在check约束更加复杂的约束上面。触发器和普通的存储过程的区别是:触发器是当对某一个表进行操作。诸如:update、insert、delete这些操作的时候,系统会自动调用执行该表上对应的触发器。SQL Server 2005中触发器可以分为两类:DML触发器和DDL触发器,其中DDL触发器它们会影响多种数据定义语 阅读全文
posted @ 2013-09-25 09:55 Todd Zhang 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的。而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服。 正常面向集合的思维方式是: 而对于游标来说: 这也是为什么游标是邪恶的,它会使开发人员变懒,懒得去想用面向集合的查询方式实现某些功能. 同样的,在性能上,游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量…… 从游标对数据库的读取方式来说,不难看出游标为什么占用更多的资源,打个比方: 当你从ATM取钱的时候,是一次取1000效率更高呢,还是取10次100?既然游标这么“邪恶”,为什么还要... 阅读全文
posted @ 2013-09-25 09:52 Todd Zhang 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 1.在生产环境中不要出现Select * 这一点我想大家已经是比较熟知了,这样的错误相信会犯的人不会太多。但我这里还是要说一下。 不使用Select *的原因主要不是坊间所流传的将*解析成具体的列需要产生消耗,这点消耗在我看来完全可以忽略不计。更主要的原因来自以下两点: 扩展方面的问题 造成额外的书签查找或是由查找变为扫描 扩展方面的问题是当表中添加一个列时,Select *会把这一列也囊括进去,从而造成上面的第二种问题。 而额外的IO这点显而易见,当查找不需要的列时自然会产生不必要的IO,下面我们通过一个非常简单的例子来比较这两种差别,如图1所示。 图1.*带来的不必要的IO2.声明变量时. 阅读全文
posted @ 2013-09-25 09:50 Todd Zhang 阅读(193) 评论(0) 推荐(0) 编辑